summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 973e569)
raw | patch | inline | side by side (parent: 973e569)
author | usev6 <use_v6@aglaz.de> | |
Fri, 15 Sep 2017 21:05:14 +0000 (23:05 +0200) | ||
committer | usev6 <use_v6@aglaz.de> | |
Fri, 15 Sep 2017 21:05:14 +0000 (23:05 +0200) |
src/collectd.conf.in | patch | blob | history | |
src/collectd.conf.pod | patch | blob | history | |
src/nfs.c | patch | blob | history |
diff --git a/src/collectd.conf.in b/src/collectd.conf.in
index 9b36e2379044d9367573549d43bd826c40e234c0..dbc5463fd1982fe6e8529e40400c2105a26f5a98 100644 (file)
--- a/src/collectd.conf.in
+++ b/src/collectd.conf.in
# CacheFlush 1800
@LOAD_PLUGIN_NETWORK@</Plugin>
+#<Plugin nfs>
+# IgnoreV2 true
+# #IgnoreV3 true
+# #IgnoreV4 true
+#</Plugin>
+
#<Plugin nginx>
# URL "http://localhost/status?auto"
# User "www-user"
diff --git a/src/collectd.conf.pod b/src/collectd.conf.pod
index 80ba758b5123366a9774c3e883e58ceae8e79863..298a43b4d2167c843a5e3844de1b65ee01e2ef26 100644 (file)
--- a/src/collectd.conf.pod
+++ b/src/collectd.conf.pod
=back
+=head2 Plugin C<nfs>
+
+The I<nfs plugin> collects information about the usage of the Network File
+System (NFS). It counts the number of procedure calls for each procedure,
+grouped by version and whether the system runs as server or client.
+
+It is possibly to omit metrics for a specific NFS version by setting one or
+more of the following options to B<true> (all of them default to B<false>).
+
+=over 4
+
+=item B<IgnoreV2> B<false>|B<true>
+
+=item B<IgnoreV3> B<false>|B<true>
+
+=item B<IgnoreV4> B<false>|B<true>
+
+=back
+
=head2 Plugin C<nginx>
This plugin collects the number of connections and requests handled by the
diff --git a/src/nfs.c b/src/nfs.c
index bbe843845ace33b4fd546407eed64306dcf974bd..2f628218448381d9290ff5f4126fca0a962253ee 100644 (file)
--- a/src/nfs.c
+++ b/src/nfs.c
#include <kstat.h>
#endif
+static const char *config_keys[] = {"IgnoreV2", "IgnoreV3", "IgnoreV4"};
+static int config_keys_num = STATIC_ARRAY_SIZE(config_keys);
+static int ignore_v2 = 0;
+static int ignore_v3 = 0;
+static int ignore_v4 = 0;
+
/*
see /proc/net/rpc/nfs
see http://www.missioncriticallinux.com/orph/NFS-Statistics
static kstat_t *nfs4_ksp_server;
#endif
+static int nfs_config(const char *key, const char *value) {
+ if (strcasecmp(key, "IgnoreV2") == 0 && IS_TRUE(value))
+ ignore_v2 = 1;
+ else if (strcasecmp(key, "IgnoreV3") == 0 && IS_TRUE(value))
+ ignore_v3 = 1;
+ else if (strcasecmp(key, "IgnoreV4") == 0 && IS_TRUE(value))
+ ignore_v4 = 1;
+ else
+ return -1;
+
+ return 0;
+}
+
#if KERNEL_LINUX
static int nfs_init(void) { return 0; }
/* #endif KERNEL_LINUX */
if (fields_num < 3)
continue;
- if (strcmp(fields[0], "proc2") == 0) {
+ if (strcmp(fields[0], "proc2") == 0 && ignore_v2 == 0) {
nfs_submit_fields_safe(/* version = */ 2, inst, fields + 2,
(size_t)(fields_num - 2), nfs2_procedures_names,
nfs2_procedures_names_num);
- } else if (strncmp(fields[0], "proc3", 5) == 0) {
+ } else if (strncmp(fields[0], "proc3", 5) == 0 && ignore_v3 == 0) {
nfs_submit_fields_safe(/* version = */ 3, inst, fields + 2,
(size_t)(fields_num - 2), nfs3_procedures_names,
nfs3_procedures_names_num);
- } else if (strcmp(fields[0], "proc4ops") == 0) {
+ } else if (strcmp(fields[0], "proc4ops") == 0 && ignore_v4 == 0) {
if (inst[0] == 's')
nfs_submit_nfs4_server(inst, fields + 2, (size_t)(fields_num - 2));
- } else if (strcmp(fields[0], "proc4") == 0) {
+ } else if (strcmp(fields[0], "proc4") == 0 && ignore_v4 == 0) {
if (inst[0] == 'c')
nfs_submit_nfs4_client(inst, fields + 2, (size_t)(fields_num - 2));
}
#elif HAVE_LIBKSTAT
static int nfs_read(void) {
- nfs_read_kstat(nfs2_ksp_client, /* version = */ 2, "client",
- nfs2_procedures_names, nfs2_procedures_names_num);
- nfs_read_kstat(nfs2_ksp_server, /* version = */ 2, "server",
- nfs2_procedures_names, nfs2_procedures_names_num);
- nfs_read_kstat(nfs3_ksp_client, /* version = */ 3, "client",
- nfs3_procedures_names, nfs3_procedures_names_num);
- nfs_read_kstat(nfs3_ksp_server, /* version = */ 3, "server",
- nfs3_procedures_names, nfs3_procedures_names_num);
- nfs_read_kstat(nfs4_ksp_client, /* version = */ 4, "client",
- nfs4_procedures_names, nfs4_procedures_names_num);
- nfs_read_kstat(nfs4_ksp_server, /* version = */ 4, "server",
- nfs4_procedures_names, nfs4_procedures_names_num);
+ if (ignore_v2 == 0) {
+ nfs_read_kstat(nfs2_ksp_client, /* version = */ 2, "client",
+ nfs2_procedures_names, nfs2_procedures_names_num);
+ nfs_read_kstat(nfs2_ksp_server, /* version = */ 2, "server",
+ nfs2_procedures_names, nfs2_procedures_names_num);
+ }
+ if (ignore_v3 == 0) {
+ nfs_read_kstat(nfs3_ksp_client, /* version = */ 3, "client",
+ nfs3_procedures_names, nfs3_procedures_names_num);
+ nfs_read_kstat(nfs3_ksp_server, /* version = */ 3, "server",
+ nfs3_procedures_names, nfs3_procedures_names_num);
+ }
+ if (ignore_v2 == 0) {
+ nfs_read_kstat(nfs4_ksp_client, /* version = */ 4, "client",
+ nfs4_procedures_names, nfs4_procedures_names_num);
+ nfs_read_kstat(nfs4_ksp_server, /* version = */ 4, "server",
+ nfs4_procedures_names, nfs4_procedures_names_num);
+ }
return 0;
}
#endif /* HAVE_LIBKSTAT */
void module_register(void) {
+ plugin_register_config("nfs", nfs_config, config_keys, config_keys_num);
plugin_register_init("nfs", nfs_init);
plugin_register_read("nfs", nfs_read);
} /* void module_register */