From 3eebd68c6d41a672e64caecd82f57d08d0d0cf3d Mon Sep 17 00:00:00 2001 From: Francesco Romani Date: Mon, 13 Feb 2017 09:08:02 +0100 Subject: [PATCH] virt plugin: Add option to disable extra stats We are adding more metrics to the virt plugin, but not everyone may be interested in those. This patch add one more option to the virt plugin to enable or disable the new stats. For backward compatibility, the default is disabled. Signed-off-by: Francesco Romani --- src/collectd.conf.in | 1 + src/collectd.conf.pod | 6 ++++++ src/virt.c | 49 ++++++++++++++++++++++++++++++++++++++----------- 3 files changed, 45 insertions(+), 11 deletions(-) diff --git a/src/collectd.conf.in b/src/collectd.conf.in index 1cc86af4..982cba9f 100644 --- a/src/collectd.conf.in +++ b/src/collectd.conf.in @@ -1459,6 +1459,7 @@ # InterfaceFormat name # PluginInstanceFormat name # Instances 1 +# ExtraStats "disk" # # diff --git a/src/collectd.conf.pod b/src/collectd.conf.pod index 6931066e..57f2897d 100644 --- a/src/collectd.conf.pod +++ b/src/collectd.conf.pod @@ -8076,6 +8076,12 @@ How many read instances you want to use for this plugin. The default is one, and the sensible setting is a multiple of the B value. If you are not sure, just use the default setting. +=item B B + +Enable extra statistics. This allows the plugin to reported more detailed +statistics about the behaviour of Virtual Machines. The argument is a +space-separated list of selectors. Currently only B is supported. + =back =head2 Plugin C diff --git a/src/virt.c b/src/virt.c index acdc11fa..06081097 100644 --- a/src/virt.c +++ b/src/virt.c @@ -60,6 +60,7 @@ static const char *config_keys[] = {"Connection", "PluginInstanceFormat", "Instances", + "ExtraStats", NULL}; #define NR_CONFIG_KEYS ((sizeof config_keys / sizeof config_keys[0]) - 1) @@ -164,6 +165,12 @@ enum bd_field { target, source }; /* InterfaceFormat. */ enum if_field { if_address, if_name, if_number }; +/* ExtraStats */ +#define EX_STATS_MAX_FIELDS 8 +#define EX_STATS_DISK "disk" +enum ex_stats { ex_stats_none = 0, ex_stats_disk = 1 }; +static enum ex_stats extra_stats = ex_stats_none; + /* BlockDeviceFormatBasename */ _Bool blockdevice_format_basename = 0; static enum bd_field blockdevice_format = target; @@ -386,17 +393,19 @@ static void disk_submit(struct lv_block_info *binfo, virDomainPtr dom, submit_derive2("disk_octets", (derive_t)binfo->bi.rd_bytes, (derive_t)binfo->bi.wr_bytes, dom, type_instance); - if ((binfo->rd_total_times != -1) && (binfo->wr_total_times != -1)) - submit_derive2("disk_time", (derive_t)binfo->rd_total_times, - (derive_t)binfo->wr_total_times, dom, type_instance); - - if (binfo->fl_req != -1) - submit(dom, "total_requests", flush_type_instance, - &(value_t){.derive = (derive_t)binfo->fl_req}, 1); - if (binfo->fl_total_times != -1) { - derive_t value = binfo->fl_total_times / 1000; // ns -> ms - submit(dom, "total_time_in_ms", flush_type_instance, - &(value_t){.derive = value}, 1); + if (extra_stats & ex_stats_disk) { + if ((binfo->rd_total_times != -1) && (binfo->wr_total_times != -1)) + submit_derive2("disk_time", (derive_t)binfo->rd_total_times, + (derive_t)binfo->wr_total_times, dom, type_instance); + + if (binfo->fl_req != -1) + submit(dom, "total_requests", flush_type_instance, + &(value_t){.derive = (derive_t)binfo->fl_req}, 1); + if (binfo->fl_total_times != -1) { + derive_t value = binfo->fl_total_times / 1000; // ns -> ms + submit(dom, "total_time_in_ms", flush_type_instance, + &(value_t){.derive = value}, 1); + } } } @@ -594,6 +603,24 @@ static int lv_config(const char *key, const char *value) { return 0; } + if (strcasecmp(key, "ExtraStats") == 0) { + char *localvalue = sstrdup(value); + if (localvalue != NULL) { + char *exstats[EX_STATS_MAX_FIELDS]; + int numexstats; + + numexstats = strsplit(localvalue, exstats, STATIC_ARRAY_SIZE(exstats)); + for (int i = 0; i < numexstats; i++) { + if (strcasecmp(exstats[i], EX_STATS_DISK) == 0) { + DEBUG(PLUGIN_NAME " plugin: enabling extra stats for '%s'", + EX_STATS_DISK); + extra_stats |= ex_stats_disk; + } + } + sfree(localvalue); + } + } + /* Unrecognised option. */ return -1; } -- 2.11.0