]> git.ipfire.org Git - thirdparty/collectd.git/commitdiff
add config option to write metadata
authorCarlos Peon Costa <carlospec@inditex.com>
Mon, 21 Nov 2022 19:39:35 +0000 (20:39 +0100)
committerMatthias Runge <mrunge@matthias-runge.de>
Mon, 28 Nov 2022 11:04:37 +0000 (12:04 +0100)
src/collectd.conf.in
src/collectd.conf.pod
src/utils/format_influxdb/format_influxdb.c
src/utils/format_influxdb/format_influxdb.h
src/write_http.c
src/write_influxdb_udp.c

index 89faefa85414948ae95375fa0b9140578cea50b9..add0905d3ea921f5e6145a2b88dc70f77403fcd7 100644 (file)
 #  Server "localhost"
 #  TimePrecision "ms"
 #  StoreRates true
+#  WriteMetadata false
 #  MaxPacketSize 32768
 #  TimeToLive 128
 #</Plugin>
index 1d83e1d2d5815875afb6eebc40b97265a9af04ac..adad1e4fbdbc06a571f073ef3e5cc9b378c73861 100644 (file)
@@ -11256,6 +11256,7 @@ miliseconds while plugin instance, type and type instance are sent as tags.
    Server "influxdb2.fqdn"
    TimePrecision "ms"
    StoreRates "yes"
+   WriteMetadata "no"
  </Plugin>
 
 =over 4
@@ -11297,6 +11298,11 @@ UDP.
 If set to B<true>, convert absolute, counter and derive values to rates. If set
 to B<false> (the default) absolute, counter and derive values are sent as is.
 
+=item B<WriteMetadata> B<true|false>
+
+Defaults to B<false>. If set to B<true>, send aditional tags to influxdb with
+collectd value metadata.
+
 =back
 
 =head2 Plugin C<write_kafka>
index b216509cc5dae3a56385a6189c485db879af3368..8218bb7a3bf4f1875918c6e33509a26ab5796d3a 100644 (file)
@@ -72,9 +72,10 @@ static int format_influxdb_escape_string(char *buffer, size_t buffer_size,
   return dst_pos;
 } /* int format_influxdb_escape_string */
 
-int format_influxdb_value_list(
-    char *buffer, int buffer_len, const data_set_t *ds, const value_list_t *vl,
-    bool store_rates, format_influxdb_time_precision_t time_precision) {
+int format_influxdb_value_list(char *buffer, int buffer_len,
+                               const data_set_t *ds, const value_list_t *vl,
+                               format_influxdb_time_precision_t time_precision,
+                               bool store_rates, bool write_meta) {
   int status;
   int offset = 0;
   gauge_t *rates = NULL;
@@ -116,7 +117,7 @@ int format_influxdb_value_list(
     BUFFER_ADD(",type_instance=");
     BUFFER_ADD_ESCAPE(vl->type_instance);
   }
-  if (vl->meta) {
+  if (write_meta && vl->meta) {
     for (meta_entry_t *it = meta_data_iter(vl->meta); it != NULL;
          it = meta_data_iter_next(it)) {
       const char *key = meta_data_iter_key(it);
index 53f5e88c3496fc8aaf7780c9ace3f8a2daabc46e..78332ccc10c813e374af17aa92116d414ad422f5 100644 (file)
@@ -40,7 +40,7 @@ typedef enum {
 
 int format_influxdb_value_list(char *buffer, int buffer_len,
                                const data_set_t *ds, const value_list_t *vl,
-                               bool store_rates,
-                               format_influxdb_time_precision_t time_precision);
+                               format_influxdb_time_precision_t time_precision,
+                               bool store_rates, bool write_meta);
 
 #endif /* UTILS_FORMAT_INFLUXDB_H */
index 3ca55661d2530f07079304ac039fc1d3107eb01c..a67d3220cfeba42272d5462c5b38cf91e8e00931 100644 (file)
@@ -605,8 +605,8 @@ static int wh_write_influxdb(const data_set_t *ds,
   }
 
   status = format_influxdb_value_list(cb->send_buffer + cb->send_buffer_fill,
-                                      cb->send_buffer_free, ds, vl,
-                                      cb->store_rates, NS);
+                                      cb->send_buffer_free, ds, vl, NS,
+                                      cb->store_rates, true);
   if (status == -ENOMEM) {
     status = wh_flush_nolock(/* timeout = */ 0, cb);
     if (status != 0) {
@@ -616,8 +616,8 @@ static int wh_write_influxdb(const data_set_t *ds,
     }
 
     status = format_influxdb_value_list(cb->send_buffer + cb->send_buffer_fill,
-                                        cb->send_buffer_free, ds, vl,
-                                        cb->store_rates, NS);
+                                        cb->send_buffer_free, ds, vl, NS,
+                                        cb->store_rates, true);
   }
   if (status < 0) {
     pthread_mutex_unlock(&cb->send_lock);
index 7c85a28e2a3de2142d276ac1e7f7e31578efb096..e26cf36f60dea0bfcf39b160302786e8d4a98033 100644 (file)
@@ -79,6 +79,7 @@ typedef struct sockent {
 static int wifxudp_config_ttl;
 static size_t wifxudp_config_packet_size = NET_DEFAULT_PACKET_SIZE;
 static bool wifxudp_config_store_rates;
+static bool wifxudp_config_write_meta;
 static format_influxdb_time_precision_t wifxudp_config_time_precision = MS;
 
 static sockent_t *sending_sockets;
@@ -354,9 +355,9 @@ write_influxdb_udp_write(const data_set_t *ds, const value_list_t *vl,
                          user_data_t __attribute__((unused)) * user_data) {
   char buffer[NET_DEFAULT_PACKET_SIZE];
 
-  int status = format_influxdb_value_list(buffer, NET_DEFAULT_PACKET_SIZE, ds,
-                                          vl, wifxudp_config_store_rates,
-                                          wifxudp_config_time_precision);
+  int status = format_influxdb_value_list(
+      buffer, NET_DEFAULT_PACKET_SIZE, ds, vl, wifxudp_config_time_precision,
+      wifxudp_config_store_rates, wifxudp_config_write_meta);
 
   if (status < 0) {
     ERROR("write_influxdb_udp plugin: write_influxdb_udp_write failed.");
@@ -509,6 +510,8 @@ static int write_influxdb_udp_config(oconfig_item_t *ci) {
       wifxudp_config_set_time_precision(child);
     else if (strcasecmp("StoreRates", child->key) == 0)
       cf_util_get_boolean(child, &wifxudp_config_store_rates);
+    else if (strcasecmp("WriteMetadata", child->key) == 0)
+      cf_util_get_boolean(child, &wifxudp_config_write_meta);
     else {
       WARNING("write_influxdb_udp plugin: "
               "Option `%s' is not allowed here.",