[pcp] [PATCH] Add NFS Server PMDA

Marko Myllynen myllynen at redhat.com
Tue Sep 16 10:46:44 CDT 2014


Hi,

please find the first cut of (Linux) NFS Server PMDA below. Needs at least a proper domain number, 135 used in the patch was randomly picked up unused number for testing, tested on RHEL 6 / Fedora 20. If the server is not exporting all NFS 2/3/4 versions, then during Install there will be warning for missing metrics and the values are obviously unavailable but otherwise does not prevent the PMDA working.

>From aca5ab97ded324f4fd3f903df226aa9e0d0fb0e9 Mon Sep 17 00:00:00 2001
From: Marko Myllynen <myllynen at redhat.com>
Date: Tue, 16 Sep 2014 16:14:19 +0300
Subject: [PATCH] Add NFS Server PMDA

---
 src/pmdas/nfsserver/Install          |   29 +
 src/pmdas/nfsserver/Remove           |   24 +
 src/pmdas/nfsserver/pmdanfsserver.pl |  943 ++++++++++++++++++++++++++++++++++
 3 files changed, 996 insertions(+), 0 deletions(-)
 create mode 100755 src/pmdas/nfsserver/Install
 create mode 100755 src/pmdas/nfsserver/Remove
 create mode 100644 src/pmdas/nfsserver/pmdanfsserver.pl

diff --git a/src/pmdas/nfsserver/Install b/src/pmdas/nfsserver/Install
new file mode 100755
index 0000000..e63f45a
--- /dev/null
+++ b/src/pmdas/nfsserver/Install
@@ -0,0 +1,29 @@
+#!/bin/sh
+#
+# Copyright (c) 2011 SGI.
+# Copyright (C) 2014 Marko Myllynen <myllynen at redhat.com>
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 2 of the License, or (at your
+# option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+
+. $PCP_DIR/etc/pcp.env
+. $PCP_SHARE_DIR/lib/pmdaproc.sh
+
+iam=nfsserver
+pmda_interface=2
+dso_opt=false
+daemon_opt=false
+perl_opt=true
+socket_opt=false
+
+pmdaSetup
+pmdaInstall
+exit 0
diff --git a/src/pmdas/nfsserver/Remove b/src/pmdas/nfsserver/Remove
new file mode 100755
index 0000000..5eb35ad
--- /dev/null
+++ b/src/pmdas/nfsserver/Remove
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# Copyright (c) 2011 SGI.
+# Copyright (C) 2014 Marko Myllynen <myllynen at redhat.com>
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 2 of the License, or (at your
+# option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+
+. $PCP_DIR/etc/pcp.env
+. $PCP_SHARE_DIR/lib/pmdaproc.sh
+
+iam=nfsserver
+
+pmdaSetup
+pmdaRemove
+exit 0
diff --git a/src/pmdas/nfsserver/pmdanfsserver.pl b/src/pmdas/nfsserver/pmdanfsserver.pl
new file mode 100644
index 0000000..a9f6ce6
--- /dev/null
+++ b/src/pmdas/nfsserver/pmdanfsserver.pl
@@ -0,0 +1,943 @@
+#
+# Copyright (c) 2011 SGI.
+# Copyright (C) 2014 Marko Myllynen <myllynen at redhat.com>
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 2 of the License, or (at your
+# option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+
+use strict;
+use warnings;
+use PCP::PMDA;
+
+use vars qw( $pmda );
+
+# /proc/net/rpc/nfsd or other file to use
+our $NFSDSTATS_PATH = "/proc/net/rpc/nfsd";
+
+# Configuration files for overriding the location of stats file, mostly for testing purposes
+for my $file (pmda_config('PCP_PMDAS_DIR') . '/nfsserver/nfsserver.conf', 'nfsserver.conf') {
+	eval `cat $file` unless ! -f $file;
+}
+
+# Check env variable for stats file to use
+if ( defined $ENV{"NFSSERVER_NFSDSTATS_PATH"} ) {
+	$NFSDSTATS_PATH = $ENV{"NFSSERVER_NFSDSTATS_PATH"}
+}
+
+# The hash that contains all of the stats data keyed on pmid_name
+our %h = ();
+
+#
+# Parse /proc/net/rpc/nfsd and store the stats, taking one pass through
+# the file.
+#
+sub nfsserver_parse_nfsdstats {
+	open STATS, '<', $NFSDSTATS_PATH ||
+		( $pmda->err("pmdanfsserver failed to open $NFSDSTATS_PATH: $!") &&
+		die "Can't open $NFSDSTATS_PATH: $!\n") ;
+
+	while (my $line = <STATS>) {
+
+		my @data = split(' ', $line);
+
+		# rc
+		if ($line =~ /^rc /) {
+			$h{'nfsserver.rc.hits'} = $data[1];
+			$h{'nfsserver.rc.misses'} = $data[2];
+			$h{'nfsserver.rc.nocache'} = $data[3];
+		}
+
+		# fh
+		if ($line =~ /^fh /) {
+			$h{'nfsserver.fh.stale'} = $data[1];
+			$h{'nfsserver.fh.lookup'} = $data[2];
+			$h{'nfsserver.fh.anon'} = $data[3];
+			$h{'nfsserver.fh.ncachedir'} = $data[4];
+			$h{'nfsserver.fh.ncachenondir'} = $data[5];
+		}
+
+		# io
+		if ($line =~ /^io /) {
+			$h{'nfsserver.io.read'} = $data[1];
+			$h{'nfsserver.io.write'} = $data[2];
+		}
+
+		# th
+		if ($line =~ /^th /) {
+			$h{'nfsserver.th.cnt'} = $data[1];
+			$h{'nfsserver.th.fullcnt'} = $data[2];
+			$h{'nfsserver.th.usage.0-10'} = $data[3];
+			$h{'nfsserver.th.usage.10-20'} = $data[4];
+			$h{'nfsserver.th.usage.20-30'} = $data[5];
+			$h{'nfsserver.th.usage.30-40'} = $data[6];
+			$h{'nfsserver.th.usage.40-50'} = $data[7];
+			$h{'nfsserver.th.usage.50-60'} = $data[8];
+			$h{'nfsserver.th.usage.60-70'} = $data[9];
+			$h{'nfsserver.th.usage.70-80'} = $data[10];
+			$h{'nfsserver.th.usage.80-90'} = $data[11];
+			$h{'nfsserver.th.usage.90-100'} = $data[12];
+		}
+
+		# ra
+		if ($line =~ /^ra /) {
+			$h{'nfsserver.ra.size'} = $data[1];
+			$h{'nfsserver.ra.depth.10'} = $data[2];
+			$h{'nfsserver.ra.depth.20'} = $data[3];
+			$h{'nfsserver.ra.depth.30'} = $data[4];
+			$h{'nfsserver.ra.depth.40'} = $data[5];
+			$h{'nfsserver.ra.depth.50'} = $data[6];
+			$h{'nfsserver.ra.depth.60'} = $data[7];
+			$h{'nfsserver.ra.depth.70'} = $data[8];
+			$h{'nfsserver.ra.depth.80'} = $data[9];
+			$h{'nfsserver.ra.depth.90'} = $data[10];
+			$h{'nfsserver.ra.depth.100'} = $data[11];
+			$h{'nfsserver.ra.nfound'} = $data[12];
+		}
+
+		# net
+		if ($line =~ /^net /) {
+			$h{'nfsserver.net.packets'} = $data[1];
+			$h{'nfsserver.net.udp'} = $data[2];
+			$h{'nfsserver.net.tcp'} = $data[3];
+			$h{'nfsserver.net.tcpconn'} = $data[4];
+		}
+
+		# rpc
+		if ($line =~ /^rpc /) {
+			$h{'nfsserver.rpc.calls'} = $data[1];
+			$h{'nfsserver.rpc.badcalls'} = $data[2];
+			$h{'nfsserver.rpc.badfmt'} = $data[3];
+			$h{'nfsserver.rpc.badauth'} = $data[4];
+			$h{'nfsserver.rpc.badclnt'} = $data[5];
+		}
+
+		# proc2
+		if ($line =~ /^proc2 /) {
+			$h{'nfsserver.proc2.values'} = $data[1];
+			$h{'nfsserver.proc2.null'} = $data[2];
+			$h{'nfsserver.proc2.getattr'} = $data[3];
+			$h{'nfsserver.proc2.setattr'} = $data[4];
+			$h{'nfsserver.proc2.root'} = $data[5];
+			$h{'nfsserver.proc2.lookup'} = $data[6];
+			$h{'nfsserver.proc2.readlink'} = $data[7];
+			$h{'nfsserver.proc2.read'} = $data[8];
+			$h{'nfsserver.proc2.wrcache'} = $data[9];
+			$h{'nfsserver.proc2.write'} = $data[10];
+			$h{'nfsserver.proc2.create'} = $data[11];
+			$h{'nfsserver.proc2.remove'} = $data[12];
+			$h{'nfsserver.proc2.rename'} = $data[13];
+			$h{'nfsserver.proc2.link'} = $data[14];
+			$h{'nfsserver.proc2.symlink'} = $data[15];
+			$h{'nfsserver.proc2.mkdir'} = $data[16];
+			$h{'nfsserver.proc2.rmdir'} = $data[17];
+			$h{'nfsserver.proc2.readdir'} = $data[18];
+			$h{'nfsserver.proc2.fsstat'} = $data[19];
+		}
+
+		# proc3
+		if ($line =~ /^proc3 /) {
+			$h{'nfsserver.proc3.values'} = $data[1];
+			$h{'nfsserver.proc3.null'} = $data[2];
+			$h{'nfsserver.proc3.getattr'} = $data[3];
+			$h{'nfsserver.proc3.setattr'} = $data[4];
+			$h{'nfsserver.proc3.lookup'} = $data[5];
+			$h{'nfsserver.proc3.access'} = $data[6];
+			$h{'nfsserver.proc3.readlink'} = $data[7];
+			$h{'nfsserver.proc3.read'} = $data[8];
+			$h{'nfsserver.proc3.write'} = $data[9];
+			$h{'nfsserver.proc3.create'} = $data[10];
+			$h{'nfsserver.proc3.mkdir'} = $data[11];
+			$h{'nfsserver.proc3.symlink'} = $data[12];
+			$h{'nfsserver.proc3.mknod'} = $data[13];
+			$h{'nfsserver.proc3.remove'} = $data[14];
+			$h{'nfsserver.proc3.rmdir'} = $data[15];
+			$h{'nfsserver.proc3.rename'} = $data[16];
+			$h{'nfsserver.proc3.link'} = $data[17];
+			$h{'nfsserver.proc3.readdir'} = $data[18];
+			$h{'nfsserver.proc3.readdirplus'} = $data[19];
+			$h{'nfsserver.proc3.fsstat'} = $data[20];
+			$h{'nfsserver.proc3.fsinfo'} = $data[21];
+			$h{'nfsserver.proc3.pathconf'} = $data[22];
+			$h{'nfsserver.proc3.commit'} = $data[23];
+		}
+
+		# proc4
+		if ($line =~ /^proc4 /) {
+			$h{'nfsserver.proc4.values'} = $data[1];
+			$h{'nfsserver.proc4.null'} = $data[2];
+			$h{'nfsserver.proc4.compound'} = $data[3];
+		}
+
+		# proc4ops
+		if ($line =~ /^proc4ops /) {
+			$h{'nfsserver.proc4ops.values'} = $data[1];
+			$h{'nfsserver.proc4ops.op0-unused'} = $data[2];
+			$h{'nfsserver.proc4ops.op1-unused'} = $data[3];
+			$h{'nfsserver.proc4ops.op2-future'} = $data[4];
+			$h{'nfsserver.proc4ops.access'} = $data[5];
+			$h{'nfsserver.proc4ops.close'} = $data[6];
+			$h{'nfsserver.proc4ops.commit'} = $data[7];
+			$h{'nfsserver.proc4ops.create'} = $data[8];
+			$h{'nfsserver.proc4ops.delegpurge'} = $data[9];
+			$h{'nfsserver.proc4ops.delegreturn'} = $data[10];
+			$h{'nfsserver.proc4ops.getattr'} = $data[11];
+			$h{'nfsserver.proc4ops.getfh'} = $data[12];
+			$h{'nfsserver.proc4ops.link'} = $data[13];
+			$h{'nfsserver.proc4ops.lock'} = $data[14];
+			$h{'nfsserver.proc4ops.lockt'} = $data[15];
+			$h{'nfsserver.proc4ops.locku'} = $data[16];
+			$h{'nfsserver.proc4ops.lookup'} = $data[17];
+			$h{'nfsserver.proc4ops.lookup_root'} = $data[18];
+			$h{'nfsserver.proc4ops.nverify'} = $data[19];
+			$h{'nfsserver.proc4ops.open'} = $data[20];
+			$h{'nfsserver.proc4ops.openattr'} = $data[21];
+			$h{'nfsserver.proc4ops.open_conf'} = $data[22];
+			$h{'nfsserver.proc4ops.open_dgrd'} = $data[23];
+			$h{'nfsserver.proc4ops.putfh'} = $data[24];
+			$h{'nfsserver.proc4ops.putpubfh'} = $data[25];
+			$h{'nfsserver.proc4ops.putrootfh'} = $data[26];
+			$h{'nfsserver.proc4ops.read'} = $data[27];
+			$h{'nfsserver.proc4ops.readdir'} = $data[28];
+			$h{'nfsserver.proc4ops.readlink'} = $data[29];
+			$h{'nfsserver.proc4ops.remove'} = $data[30];
+			$h{'nfsserver.proc4ops.rename'} = $data[31];
+			$h{'nfsserver.proc4ops.renew'} = $data[32];
+			$h{'nfsserver.proc4ops.restorefh'} = $data[33];
+			$h{'nfsserver.proc4ops.savefh'} = $data[34];
+			$h{'nfsserver.proc4ops.secinfo'} = $data[35];
+			$h{'nfsserver.proc4ops.setattr'} = $data[36];
+			$h{'nfsserver.proc4ops.setcltid'} = $data[37];
+			$h{'nfsserver.proc4ops.setcltidconf'} = $data[38];
+			$h{'nfsserver.proc4ops.verify'} = $data[39];
+			$h{'nfsserver.proc4ops.write'} = $data[40];
+			$h{'nfsserver.proc4ops.rellockowner'} = $data[41];
+			$h{'nfsserver.proc4ops.bc_ctl'} = $data[42];
+			$h{'nfsserver.proc4ops.bind_conn'} = $data[43];
+			$h{'nfsserver.proc4ops.exchange_id'} = $data[44];
+			$h{'nfsserver.proc4ops.create_ses'} = $data[45];
+			$h{'nfsserver.proc4ops.destroy_ses'} = $data[46];
+			$h{'nfsserver.proc4ops.free_stateid'} = $data[47];
+			$h{'nfsserver.proc4ops.getdirdeleg'} = $data[48];
+			$h{'nfsserver.proc4ops.getdevinfo'} = $data[49];
+			$h{'nfsserver.proc4ops.getdevlist'} = $data[50];
+			$h{'nfsserver.proc4ops.layoutcommit'} = $data[51];
+			$h{'nfsserver.proc4ops.layoutget'} = $data[52];
+			$h{'nfsserver.proc4ops.layoutreturn'} = $data[53];
+			$h{'nfsserver.proc4ops.secinfononam'} = $data[54];
+			$h{'nfsserver.proc4ops.sequence'} = $data[55];
+			$h{'nfsserver.proc4ops.set_ssv'} = $data[56];
+			$h{'nfsserver.proc4ops.test_stateid'} = $data[57];
+			$h{'nfsserver.proc4ops.want_deleg'} = $data[58];
+			$h{'nfsserver.proc4ops.destroy_clid'} = $data[59];
+			$h{'nfsserver.proc4ops.reclaim_comp'} = $data[60];
+		}
+
+	}
+
+	close STATS;
+}
+
+#
+# fetch is called once by pcp for each refresh and then the fetch callback is
+# called to query each statistic individually
+#
+sub nfsserver_fetch {
+	nfsserver_parse_nfsdstats();
+}
+
+sub nfsserver_fetch_callback {
+	my ($cluster, $item, $inst) = @_; 
+	my $metric = pmda_pmid_name($cluster, $item);
+	my $value;
+
+	if ($inst != PM_INDOM_NULL)	{ return (PM_ERR_INST, 0); }
+
+	$value = $h{$metric};
+
+	if (!defined($value))		{ return (PM_ERR_APPVERSION, 0); }
+
+	return ($value, 1);
+}
+
+our $pmda = PCP::PMDA->new('nfsserver', 135);
+
+# metrics go here, with full descriptions
+
+# rc
+$pmda->add_metric(pmda_pmid(0,1), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.rc.hits',
+		  '', '');
+$pmda->add_metric(pmda_pmid(0,2), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.rc.misses',
+		  '', '');
+$pmda->add_metric(pmda_pmid(0,3), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.rc.nocache',
+		  '', '');
+
+# fh
+$pmda->add_metric(pmda_pmid(1,1), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.fh.stale',
+		  '', '');
+$pmda->add_metric(pmda_pmid(1,2), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.fh.lookup',
+		  '', '');
+$pmda->add_metric(pmda_pmid(1,3), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.fh.anon',
+		  '', '');
+$pmda->add_metric(pmda_pmid(1,4), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.fh.ncachedir',
+		  '', '');
+$pmda->add_metric(pmda_pmid(1,5), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.fh.ncachenondir',
+		  '', '');
+
+# io
+$pmda->add_metric(pmda_pmid(2,1), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(1,0,0,PM_SPACE_BYTE,0,0),
+		  'nfsserver.io.read',
+		  '', '');
+$pmda->add_metric(pmda_pmid(2,2), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(1,0,0,PM_SPACE_BYTE,0,0),
+		  'nfsserver.io.write',
+		  '', '');
+
+# th
+$pmda->add_metric(pmda_pmid(3,1), PM_TYPE_U32, PM_INDOM_NULL,
+		  PM_SEM_DISCRETE, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.th.cnt',
+		  '', '');
+$pmda->add_metric(pmda_pmid(3,2), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.th.fullcnt',
+		  '', '');
+$pmda->add_metric(pmda_pmid(3,3), PM_TYPE_DOUBLE, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,1,0,0,PM_TIME_SEC,0),
+		  'nfsserver.th.usage.0-10',
+		  '', '');
+$pmda->add_metric(pmda_pmid(3,4), PM_TYPE_DOUBLE, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,1,0,0,PM_TIME_SEC,0),
+		  'nfsserver.th.usage.10-20',
+		  '', '');
+$pmda->add_metric(pmda_pmid(3,5), PM_TYPE_DOUBLE, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,1,0,0,PM_TIME_SEC,0),
+		  'nfsserver.th.usage.20-30',
+		  '', '');
+$pmda->add_metric(pmda_pmid(3,6), PM_TYPE_DOUBLE, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,1,0,0,PM_TIME_SEC,0),
+		  'nfsserver.th.usage.30-40',
+		  '', '');
+$pmda->add_metric(pmda_pmid(3,7), PM_TYPE_DOUBLE, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,1,0,0,PM_TIME_SEC,0),
+		  'nfsserver.th.usage.40-50',
+		  '', '');
+$pmda->add_metric(pmda_pmid(3,8), PM_TYPE_DOUBLE, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,1,0,0,PM_TIME_SEC,0),
+		  'nfsserver.th.usage.50-60',
+		  '', '');
+$pmda->add_metric(pmda_pmid(3,9), PM_TYPE_DOUBLE, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,1,0,0,PM_TIME_SEC,0),
+		  'nfsserver.th.usage.60-70',
+		  '', '');
+$pmda->add_metric(pmda_pmid(3,10), PM_TYPE_DOUBLE, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,1,0,0,PM_TIME_SEC,0),
+		  'nfsserver.th.usage.70-80',
+		  '', '');
+$pmda->add_metric(pmda_pmid(3,11), PM_TYPE_DOUBLE, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,1,0,0,PM_TIME_SEC,0),
+		  'nfsserver.th.usage.80-90',
+		  '', '');
+$pmda->add_metric(pmda_pmid(3,12), PM_TYPE_DOUBLE, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,1,0,0,PM_TIME_SEC,0),
+		  'nfsserver.th.usage.90-100',
+		  '', '');
+
+# ra
+$pmda->add_metric(pmda_pmid(4,1), PM_TYPE_U32, PM_INDOM_NULL,
+		  PM_SEM_DISCRETE, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.ra.size',
+		  '', '');
+$pmda->add_metric(pmda_pmid(4,2), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.ra.depth.10',
+		  '', '');
+$pmda->add_metric(pmda_pmid(4,3), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.ra.depth.20',
+		  '', '');
+$pmda->add_metric(pmda_pmid(4,4), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.ra.depth.30',
+		  '', '');
+$pmda->add_metric(pmda_pmid(4,5), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.ra.depth.40',
+		  '', '');
+$pmda->add_metric(pmda_pmid(4,6), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.ra.depth.50',
+		  '', '');
+$pmda->add_metric(pmda_pmid(4,7), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.ra.depth.60',
+		  '', '');
+$pmda->add_metric(pmda_pmid(4,8), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.ra.depth.70',
+		  '', '');
+$pmda->add_metric(pmda_pmid(4,9), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.ra.depth.80',
+		  '', '');
+$pmda->add_metric(pmda_pmid(4,10), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.ra.depth.90',
+		  '', '');
+$pmda->add_metric(pmda_pmid(4,11), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.ra.depth.100',
+		  '', '');
+$pmda->add_metric(pmda_pmid(4,12), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.ra.nfound',
+		  '', '');
+
+# net
+$pmda->add_metric(pmda_pmid(5,1), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.net.packets',
+		  '', '');
+$pmda->add_metric(pmda_pmid(5,2), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.net.udp',
+		  '', '');
+$pmda->add_metric(pmda_pmid(5,3), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.net.tcp',
+		  '', '');
+$pmda->add_metric(pmda_pmid(5,4), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.net.tcpconn',
+		  '', '');
+
+# rpc
+$pmda->add_metric(pmda_pmid(6,1), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.rpc.calls',
+		  '', '');
+$pmda->add_metric(pmda_pmid(6,2), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.rpc.badcalls',
+		  '', '');
+$pmda->add_metric(pmda_pmid(6,3), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.rpc.badfmt',
+		  '', '');
+$pmda->add_metric(pmda_pmid(6,4), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.rpc.badauth',
+		  '', '');
+$pmda->add_metric(pmda_pmid(6,5), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.rpc.badclnt',
+		  '', '');
+
+# proc2
+$pmda->add_metric(pmda_pmid(7,1), PM_TYPE_U32, PM_INDOM_NULL,
+		  PM_SEM_DISCRETE, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc2.values',
+		  '', '');
+$pmda->add_metric(pmda_pmid(7,2), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc2.null',
+		  '', '');
+$pmda->add_metric(pmda_pmid(7,3), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc2.getattr',
+		  '', '');
+$pmda->add_metric(pmda_pmid(7,4), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc2.setattr',
+		  '', '');
+$pmda->add_metric(pmda_pmid(7,5), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc2.root',
+		  '', '');
+$pmda->add_metric(pmda_pmid(7,6), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc2.lookup',
+		  '', '');
+$pmda->add_metric(pmda_pmid(7,7), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc2.readlink',
+		  '', '');
+$pmda->add_metric(pmda_pmid(7,8), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc2.read',
+		  '', '');
+$pmda->add_metric(pmda_pmid(7,9), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc2.wrcache',
+		  '', '');
+$pmda->add_metric(pmda_pmid(7,10), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc2.write',
+		  '', '');
+$pmda->add_metric(pmda_pmid(7,11), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc2.create',
+		  '', '');
+$pmda->add_metric(pmda_pmid(7,12), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc2.remove',
+		  '', '');
+$pmda->add_metric(pmda_pmid(7,13), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc2.rename',
+		  '', '');
+$pmda->add_metric(pmda_pmid(7,14), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc2.link',
+		  '', '');
+$pmda->add_metric(pmda_pmid(7,15), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc2.symlink',
+		  '', '');
+$pmda->add_metric(pmda_pmid(7,16), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc2.mkdir',
+		  '', '');
+$pmda->add_metric(pmda_pmid(7,17), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc2.rmdir',
+		  '', '');
+$pmda->add_metric(pmda_pmid(7,18), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc2.readdir',
+		  '', '');
+$pmda->add_metric(pmda_pmid(7,19), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc2.fsstat',
+		  '', '');
+
+# proc3
+$pmda->add_metric(pmda_pmid(8,1), PM_TYPE_U32, PM_INDOM_NULL,
+		  PM_SEM_DISCRETE, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc3.values',
+		  '', '');
+$pmda->add_metric(pmda_pmid(8,2), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc3.null',
+		  '', '');
+$pmda->add_metric(pmda_pmid(8,3), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc3.getattr',
+		  '', '');
+$pmda->add_metric(pmda_pmid(8,4), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc3.setattr',
+		  '', '');
+$pmda->add_metric(pmda_pmid(8,5), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc3.lookup',
+		  '', '');
+$pmda->add_metric(pmda_pmid(8,6), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc3.access',
+		  '', '');
+$pmda->add_metric(pmda_pmid(8,7), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc3.readlink',
+		  '', '');
+$pmda->add_metric(pmda_pmid(8,8), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc3.read',
+		  '', '');
+$pmda->add_metric(pmda_pmid(8,9), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc3.write',
+		  '', '');
+$pmda->add_metric(pmda_pmid(8,10), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc3.create',
+		  '', '');
+$pmda->add_metric(pmda_pmid(8,11), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc3.mkdir',
+		  '', '');
+$pmda->add_metric(pmda_pmid(8,12), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc3.symlink',
+		  '', '');
+$pmda->add_metric(pmda_pmid(8,13), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc3.mknod',
+		  '', '');
+$pmda->add_metric(pmda_pmid(8,14), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc3.remove',
+		  '', '');
+$pmda->add_metric(pmda_pmid(8,15), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc3.rmdir',
+		  '', '');
+$pmda->add_metric(pmda_pmid(8,16), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc3.rename',
+		  '', '');
+$pmda->add_metric(pmda_pmid(8,17), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc3.link',
+		  '', '');
+$pmda->add_metric(pmda_pmid(8,18), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc3.readdir',
+		  '', '');
+$pmda->add_metric(pmda_pmid(8,19), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc3.readdirplus',
+		  '', '');
+$pmda->add_metric(pmda_pmid(8,20), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc3.fsstat',
+		  '', '');
+$pmda->add_metric(pmda_pmid(8,21), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc3.fsinfo',
+		  '', '');
+$pmda->add_metric(pmda_pmid(8,22), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc3.pathconf',
+		  '', '');
+$pmda->add_metric(pmda_pmid(8,23), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc3.commit',
+		  '', '');
+
+# proc4
+$pmda->add_metric(pmda_pmid(9,1), PM_TYPE_U32, PM_INDOM_NULL,
+		  PM_SEM_DISCRETE, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4.values',
+		  '', '');
+$pmda->add_metric(pmda_pmid(9,2), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4.null',
+		  '', '');
+$pmda->add_metric(pmda_pmid(9,3), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4.compound',
+		  '', '');
+
+# proc4ops
+$pmda->add_metric(pmda_pmid(10,1), PM_TYPE_U32, PM_INDOM_NULL,
+		  PM_SEM_DISCRETE, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.values',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,2), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.op0-unused',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,3), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.op1-unused',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,4), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.op2-future',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,5), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.access',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,6), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.close',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,7), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.commit',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,8), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.create',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,9), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.delegpurge',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,10), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.delegreturn',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,11), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.getattr',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,12), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.getfh',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,13), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.link',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,14), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.lock',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,15), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.lockt',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,16), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.locku',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,17), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.lookup',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,18), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.lookup_root',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,19), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.nverify',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,20), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.open',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,21), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.openattr',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,22), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.open_conf',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,23), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.open_dgrd',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,24), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.putfh',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,25), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.putpubfh',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,26), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.putrootfh',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,27), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.read',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,28), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.readdir',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,29), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.readlink',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,30), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.remove',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,31), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.rename',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,32), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.renew',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,33), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.restorefh',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,34), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.savefh',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,35), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.secinfo',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,36), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.setattr',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,37), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.setcltid',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,38), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.setcltidconf',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,39), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.verify',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,40), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.write',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,41), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.rellockowner',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,42), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.bc_ctl',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,43), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.bind_conn',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,44), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.exchange_id',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,45), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.create_ses',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,46), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.destroy_ses',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,47), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.free_stateid',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,48), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.getdirdeleg',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,49), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.getdevinfo',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,50), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.getdevlist',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,51), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.layoutcommit',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,52), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.layoutget',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,53), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.layoutreturn',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,54), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.secinfononam',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,55), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.sequence',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,56), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.set_ssv',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,57), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.test_stateid',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,58), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.want_deleg',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,59), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.destroy_clid',
+		  '', '');
+$pmda->add_metric(pmda_pmid(10,60), PM_TYPE_U64, PM_INDOM_NULL,
+		  PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+		  'nfsserver.proc4ops.reclaim_comp',
+		  '', '');
+
+$pmda->set_fetch(\&nfsserver_fetch);
+$pmda->set_fetch_callback(\&nfsserver_fetch_callback);
+
+$pmda->run;
+
+=pod
+
+=head1 NAME
+
+pmdanfsserver - nfs server statistics performance metrics domain agent (PMDA)
+
+=head1 DESCRIPTION
+
+B<pmdanfsserver> is a Performance Metrics Domain Agent (PMDA) which exports
+metric values from the /proc/net/rpc/nfsd interface to provide information
+on nfs exports.
+
+=head1 INSTALLATION
+
+If you want access to the names and values for the nfsserver performance
+metrics, do the following as root:
+
+        # cd $PCP_PMDAS_DIR/nfsserver
+        # ./Install
+
+If you want to undo the installation, do the following as root:
+
+        # cd $PCP_PMDAS_DIR/nfsserver
+        # ./Remove
+
+B<pmdanfsserver> is launched by pmcd(1) and should never be executed
+directly.  The Install and Remove scripts notify pmcd(1) when
+the agent is installed or removed.
+
+=head1 FILES
+
+=over
+
+=item $PCP_PMDAS_DIR/nfsserver/Install
+
+installation script for the B<pmdanfsserver> agent
+
+=item $PCP_PMDAS_DIR/nfsserver/Remove
+
+undo installation script for the B<pmdanfsserver> agent
+
+=item $PCP_LOG_DIR/pmcd/nfsserver.log
+
+default log file for error messages from B<pmdanfsserver>
+
+=back
+
+=head1 SEE ALSO
+
+pmcd(1) and nfsd(7) and rpc.nfsd(8).
+
-- 
1.7.1


-- 
Marko Myllynen



More information about the pcp mailing list