diff options
author | Igor Pashev <pashev.igor@gmail.com> | 2014-10-26 12:33:50 +0400 |
---|---|---|
committer | Igor Pashev <pashev.igor@gmail.com> | 2014-10-26 12:33:50 +0400 |
commit | 47e6e7c84f008a53061e661f31ae96629bc694ef (patch) | |
tree | 648a07f3b5b9d67ce19b0fd72e8caa1175c98f1a /src/pmdas/zimbra | |
download | pcp-debian.tar.gz |
Debian 3.9.10debian/3.9.10debian
Diffstat (limited to 'src/pmdas/zimbra')
-rw-r--r-- | src/pmdas/zimbra/GNUmakefile | 51 | ||||
-rwxr-xr-x | src/pmdas/zimbra/Install | 33 | ||||
-rwxr-xr-x | src/pmdas/zimbra/Remove | 25 | ||||
-rw-r--r-- | src/pmdas/zimbra/pmdazimbra.pl | 905 | ||||
-rw-r--r-- | src/pmdas/zimbra/pmlogconf.all | 4 | ||||
-rwxr-xr-x | src/pmdas/zimbra/zimbraprobe.sh | 26 |
6 files changed, 1044 insertions, 0 deletions
diff --git a/src/pmdas/zimbra/GNUmakefile b/src/pmdas/zimbra/GNUmakefile new file mode 100644 index 0000000..76d69a6 --- /dev/null +++ b/src/pmdas/zimbra/GNUmakefile @@ -0,0 +1,51 @@ +#!gmake +# +# Copyright (c) 2009 Aconex. All Rights Reserved. +# +# 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. +# + +TOPDIR = ../../.. +include $(TOPDIR)/src/include/builddefs + +IAM = zimbra +PMDADIR = $(PCP_PMDAS_DIR)/$(IAM) +LSRCFILES = Install Remove pmda$(IAM).pl zimbraprobe.sh pmlogconf.all +LDIRT = domain.h root pmns *.log $(MAN_PAGES) + +ifneq ($(POD2MAN),) +MAN_SECTION = 1 +MAN_PAGES = pmda$(IAM).$(MAN_SECTION) +MAN_DEST = $(PCP_MAN_DIR)/man$(MAN_SECTION) +endif + +default: check_domain $(MAN_PAGES) + +pmda$(IAM).1: pmda$(IAM).pl + $(POD_MAKERULE) + +include $(BUILDRULES) + +install: default + $(INSTALL) -m 755 -d $(PMDADIR) + $(INSTALL) -m 755 Install Remove $(PMDADIR) + $(INSTALL) -m 755 zimbraprobe.sh $(PMDADIR)/zimbraprobe + $(INSTALL) -m 644 pmda$(IAM).pl $(PMDADIR)/pmda$(IAM).pl + @$(INSTALL_MAN) + $(INSTALL) -m 755 -d $(PCP_VAR_DIR)/config/pmlogconf/$(IAM) + $(INSTALL) -m 644 pmlogconf.all $(PCP_VAR_DIR)/config/pmlogconf/$(IAM)/all + +default_pcp : default + +install_pcp : install + +check_domain: ../../pmns/stdpmid + $(DOMAIN_PERLRULE) diff --git a/src/pmdas/zimbra/Install b/src/pmdas/zimbra/Install new file mode 100755 index 0000000..8bff154 --- /dev/null +++ b/src/pmdas/zimbra/Install @@ -0,0 +1,33 @@ +#!/bin/sh +# +# Copyright (c) 2009 Aconex. All Rights Reserved. +# +# 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. +# +# Install the Zimbra PMDA +# + +. $PCP_DIR/etc/pcp.env +. $PCP_SHARE_DIR/lib/pmdaproc.sh + +iam=zimbra +perl_opt=true +daemon_opt=false +forced_restart=false + +if ! test -d /opt/zimbra/zmstat ; then + echo "Zimbra does not appear to be installed (no /opt/zimbra/zmstat)" + echo "Pushing on regardless, but no metric values exist initially." +fi + +pmdaSetup +pmdaInstall +exit 0 diff --git a/src/pmdas/zimbra/Remove b/src/pmdas/zimbra/Remove new file mode 100755 index 0000000..beeefe1 --- /dev/null +++ b/src/pmdas/zimbra/Remove @@ -0,0 +1,25 @@ +#!/bin/sh +# +# Copyright (c) 2009 Aconex. All Rights Reserved. +# +# 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. +# +# Remove the Zimbra PMDA +# + +. $PCP_DIR/etc/pcp.env +. $PCP_SHARE_DIR/lib/pmdaproc.sh + +iam=zimbra + +pmdaSetup +pmdaRemove +exit 0 diff --git a/src/pmdas/zimbra/pmdazimbra.pl b/src/pmdas/zimbra/pmdazimbra.pl new file mode 100644 index 0000000..f23c2e6 --- /dev/null +++ b/src/pmdas/zimbra/pmdazimbra.pl @@ -0,0 +1,905 @@ +# +# Copyright (c) 2012 Red Hat. +# Copyright (c) 2009 Aconex. All Rights Reserved. +# +# 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; + +my $pmda = PCP::PMDA->new('zimbra', 98); +my $probe = pmda_config('PCP_PMDAS_DIR') . '/zimbra/zimbraprobe'; +my $stats = '/opt/zimbra/zmstat/'; + +# Zimbra instrumentation is exported through a series of CSV files. +# Several of these are system-level files that we already have PMDAs +# for, extracted more accurately and efficiently, so we ignore those +# (cpu,vm,mysql). +# For the rest, we use the PMDA.pm file "tail" mechanism to monitor +# appends to each of the CSV files. For all data received, we parse +# the line and extract values. These we store in fixed-size arrays, +# one per metric cluster, then the fetch callback just passes out the +# most recently seen value. + +my ( $imap_domain, $soap_domain ) = ( 0, 1 ); +my @imap_indom = ( + 0 => 'CAPABILITY', 1 => 'UID', 2 => 'STATUS', + 3 => 'SUBSCRIBE', 4 => 'LIST', 5 => 'SELECT', + 6 => 'LOGIN', 7 => 'NAMESPACE', 8 => 'APPEND', + 9 => 'OTHER' ); +my @soap_indom = ( + 0 => 'AuthRequest', 1 => 'DelegateAuthRequest', + 2 => 'GetAccountInfoRequest', 3 => 'GetAllServersRequest', + 4 => 'GetDomainRequest', 5 => 'GetDomainInfoRequest', + 6 => 'GetCosRequest', 7 => 'GetServiceStatusRequest', + 8 => 'GetVersionInfoRequest', 9 => 'GetAccountMembershipRequest', + 10 => 'GetLDAPEntriesRequest', 11 => 'GetAdminSavedSearchesRequest', + 12 => 'GetAdminExtensionZimletsRequest', 13 => 'GetAllConfigRequest', + 14 => 'GetLicenseRequest', 15 => 'SearchDirectoryRequest', + 16 => 'Other' ); + +sub zimbra_array_lookup +{ + my ( $indomref, $name ) = @_; + my @indom = @$indomref; + my $index; + + for ($index = 1; $index < $#indom; $index += 2) { + return (($index-1) / 2) unless ($indom[$index] ne $name); + } + return (($#indom-1) / 2); # return the "other" bucket +} + +use vars qw( @fd_values @imap_time_values @imap_count_values @soap_time_values + @soap_count_values @mailbox_values @mtaqueue_values @proc_values + @threads_values @probe_values ); +use vars qw( $fd_timestamp $imap_timestamp $soap_timestamp + $mailbox_timestamp $mtaqueue_timestamp $proc_timestamp + $threads_timestamp $probe_timestamp ); +$fd_timestamp = $imap_timestamp = $soap_timestamp = $mailbox_timestamp = + $mtaqueue_timestamp = $proc_timestamp = $threads_timestamp = + $probe_timestamp = 0; + +sub zimbra_fd_parser +{ + ( undef, $_ ) = @_; + + # $pmda->log("zimbra_fd_parser got line: $_"); + if (s|^(\d\d/\d\d/\d\d\d\d \d\d:\d\d:\d\d), ||) { + chomp; + $fd_timestamp = $1; + @fd_values = split /,/; + } +} + +sub zimbra_imap_parser +{ + ( undef, $_ ) = @_; + + # $pmda->log("zimbra_imap_parser got line: $_"); + if (s|^(\d\d/\d\d/\d\d\d\d \d\d:\d\d:\d\d),||) { + chomp; + my $timestamp = $1; + my @values = split /,/; + + if ($timestamp ne $imap_timestamp) { + $imap_timestamp = $timestamp; + @imap_count_values = (); + $imap_count_values[($#imap_indom-1)/2] = 0; + @imap_time_values = (); + $imap_time_values[($#imap_indom-1)/2] = 0; + } + + my $index = zimbra_array_lookup(\@imap_indom, $values[0]); + $imap_count_values[$index] = $values[1]; + $imap_time_values[$index] = $values[2]; + } +} + +sub zimbra_soap_parser +{ + ( undef, $_ ) = @_; + + # $pmda->log("zimbra_soap_parser got line: $_"); + if (s|^(\d\d/\d\d/\d\d\d\d \d\d:\d\d:\d\d),||) { + chomp; + my $timestamp = $1; + my @values = split /,/; + + if ($timestamp ne $soap_timestamp) { + $soap_timestamp = $timestamp; + @soap_count_values = (); + $soap_count_values[($#soap_indom-1)/2] = 0; + @soap_time_values = (); + $soap_time_values[($#soap_indom-1)/2] = 0; + } + + my $index = zimbra_array_lookup(\@soap_indom, $values[0]); + $soap_count_values[$index] = $values[1]; + $soap_time_values[$index] = $values[2]; + } +} + +sub zimbra_mailbox_parser +{ + ( undef, $_ ) = @_; + + # $pmda->log("zimbra_mailbox_parser got line: $_"); + if (s|^(\d\d/\d\d/\d\d\d\d \d\d:\d\d:\d\d),||) { + chomp; + $mailbox_timestamp = $1; + @mailbox_values = split /,/; + } +} + +sub zimbra_mtaqueue_parser +{ + ( undef, $_ ) = @_; + + # $pmda->log("zimbra_mtaqueue_parser got line: $_"); + if (s|^(\d\d/\d\d/\d\d\d\d \d\d:\d\d:\d\d), ||) { + chomp; + $mtaqueue_timestamp = $1; + @mtaqueue_values = split /,/; + } +} + +sub zimbra_proc_parser +{ + ( undef, $_ ) = @_; + + # $pmda->log("zimbra_proc_parser got line: $_"); + if (s|^(\d\d/\d\d/\d\d\d\d \d\d:\d\d:\d\d), ||) { + chomp; + $proc_timestamp = $1; + @proc_values = (); + my @values = split /,/; + splice(@values, 0, 5); # ditch "system" values + + # 7 values for mailbox,mysql,convertd,ldap,postfix,amavis,clam + # seems sometimes not all are installed/available/whatever, so + # take care to handle that case. + + while ($#values >= 7) { + my $offset = 0; + my @chunk = splice(@values, 0, 8); + if (defined($chunk[0])) { + $chunk[0] =~ s/\s//g; + } + if (!defined($chunk[0])) { + $pmda->log("zimbra_proc_parser unexpected input: $_"); + } + elsif ($chunk[0] eq 'mailbox') { $offset = 0; } + elsif ($chunk[0] eq 'mysql') { $offset = 7; } + elsif ($chunk[0] eq 'convertd') { $offset = 14; } + elsif ($chunk[0] eq 'ldap') { $offset = 21; } + elsif ($chunk[0] eq 'postfix') { $offset = 28; } + elsif ($chunk[0] eq 'amavis') { $offset = 35; } + elsif ($chunk[0] eq 'clam') { $offset = 42; } + else { + $pmda->log("zimbra_proc_parser unexpected data: $chunk[0]"); + } + shift @chunk; # remove the chunk name - then add values + splice(@proc_values, $offset, 7, @chunk); # to correct spot + } + } + else { + # This includes the initial header line, so just debug: + # $pmda->log("zimbra_proc_parser could not parse line: $_"); + } +} + +sub zimbra_threads_parser +{ + ( undef, $_ ) = @_; + + # $pmda->log("zimbra_threads_parser got line: $_"); + if (s|^(\d\d/\d\d/\d\d\d\d \d\d:\d\d:\d\d),||) { + chomp; + $threads_timestamp = $1; + @threads_values = split /,/; + } +} + +sub zimbra_probe_callback +{ + ( undef, $_ ) = @_; + + # $pmda->log("zimbra_probe_callback got line: $_"); + if (s|^(\d\d/\d\d/\d\d\d\d \d\d:\d\d:\d\d)$||) { + $probe_timestamp = $1; + } else { + my ($service, $status) = split; + + return unless defined($status); + + $status = ($status eq 'Running') ? 1 : 0; + $probe_values[ 0] = $status unless ($service ne 'antivirus'); + $probe_values[ 1] = $status unless ($service ne 'antispam'); + $probe_values[ 2] = $status unless ($service ne 'archiving'); + $probe_values[ 3] = $status unless ($service ne 'convertd'); + $probe_values[ 4] = $status unless ($service ne 'mta'); + $probe_values[ 5] = $status unless ($service ne 'mailbox'); + $probe_values[ 6] = $status unless ($service ne 'logger'); + $probe_values[ 7] = $status unless ($service ne 'snmp'); + $probe_values[ 8] = $status unless ($service ne 'ldap'); + $probe_values[ 9] = $status unless ($service ne 'spell'); + $probe_values[10] = $status unless ($service ne 'imapproxy'); + $probe_values[11] = $status unless ($service ne 'stats'); + } +} + +sub zimbra_fetch_callback +{ + my ($cluster, $item, $inst) = @_; + + #$pmda->log("zimbra_fetch_callback for PMID: $cluster.$item ($inst)"); + if ($inst != PM_IN_NULL && $cluster != 1 && $cluster != 2) { + return (PM_ERR_INST, 0); + } + + if ($cluster == 0) { # fd.csv + if ($item >= 0 && $item <= 0) { + return (PM_ERR_AGAIN, 0) unless defined($fd_values[$item]); + return ($fd_values[$item], 1); + } + } + elsif ($cluster == 1 && $item == 0) { # imap.csv + if ($inst >= 0 && $inst <= $#imap_indom) { + return (PM_ERR_AGAIN, 0) unless defined($imap_count_values[$inst]); + return ($imap_count_values[$inst], 1); + } + } + elsif ($cluster == 1 && $item == 1) { # imap.csv + if ($inst >= 0 && $inst < $#imap_indom) { + return (PM_ERR_AGAIN, 0) unless defined($imap_time_values[$inst]); + return ($imap_time_values[$inst], 1); + } + } + elsif ($cluster == 2 && $item == 0) { # soap.csv + if ($inst >= 0 && $inst < $#soap_indom) { + return (PM_ERR_AGAIN, 0) unless defined($soap_count_values[$inst]); + return ($soap_count_values[$inst], 1); + } + } + elsif ($cluster == 2 && $item == 1) { # soap.csv + if ($inst >= 0 && $inst < $#soap_indom) { + return (PM_ERR_AGAIN, 0) unless defined($soap_time_values[$inst]); + return ($soap_time_values[$inst], 1); + } + } + elsif ($cluster == 3) { # mailboxd.csv + if ($item >= 0 && $item <= 60) { + return (PM_ERR_AGAIN, 0) unless defined($mailbox_values[$item]); + if ($mailbox_values[$item] eq '') { + $mailbox_values[$item] = 0; + } + return ($mailbox_values[$item], 1); + } + } + elsif ($cluster == 4) { # mtaqueue.csv + if ($item >= 0 && $item <= 1) { + return (PM_ERR_AGAIN, 0) unless defined($mtaqueue_values[$item]); + return ($mtaqueue_values[$item], 1); + } + } + elsif ($cluster == 5) { # proc.csv + if ($item >= 0 && $item <= 48) { + return (PM_ERR_AGAIN, 0) unless defined($proc_values[$item]); + return ($proc_values[$item], 1); + } + } + elsif ($cluster == 6) { # threads.csv + if ($item >= 0 && $item <= 13) { + return (PM_ERR_AGAIN, 0) unless defined($threads_values[$item]); + return ($threads_values[$item], 1); + } + } + elsif ($cluster == 7) { # timestamps + return ($fd_timestamp, 1) unless ($item != 0); + return ($imap_timestamp, 1) unless ($item != 1); + return ($soap_timestamp, 1) unless ($item != 2); + return ($mailbox_timestamp, 1) unless ($item != 3); + return ($mtaqueue_timestamp, 1) unless ($item != 4); + return ($proc_timestamp, 1) unless ($item != 5); + return ($threads_timestamp, 1) unless ($item != 6); + return ($probe_timestamp, 1) unless ($item != 7); + } + elsif ($cluster == 8) { # status probe + if ($item >= 0 && $item <= 11) { + return (PM_ERR_APPVERSION, 0) unless defined($probe_values[$item]); + return ($probe_values[$item], 1); + } + } + + return (PM_ERR_PMID, 0); +} + +$pmda->add_metric(pmda_pmid(0,0), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.fd_count', + '/opt/zimbra/zmstat/fd.csv', 'Open file descriptors'); + +$pmda->add_metric(pmda_pmid(1,0), PM_TYPE_U32, $imap_domain, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.imap.count', + '/opt/zimbra/zmstat/imap.csv', + 'Count of Internet Message Access Protocol commands'); +$pmda->add_metric(pmda_pmid(1,1), PM_TYPE_U32, $imap_domain, PM_SEM_INSTANT, + pmda_units(0,1,0,0,PM_TIME_MSEC,0), 'zimbra.imap.avgtime', + '/opt/zimbra/zmstat/imap.csv', + 'Time spent executing Internet Message Access Protocol commands'); + +$pmda->add_metric(pmda_pmid(2,0), PM_TYPE_U32, $soap_domain, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.soap.count', + '/opt/zimbra/zmstat/soap.csv', + 'Count of Simple Object Access Protocol commands'); +$pmda->add_metric(pmda_pmid(2,1), PM_TYPE_U32, $soap_domain, PM_SEM_INSTANT, + pmda_units(0,1,0,0,PM_TIME_MSEC,0), 'zimbra.soap.avgtime', + '/opt/zimbra/zmstat/soap.csv', + 'Time spent executing Simple Object Access Protocol commands'); + +$pmda->add_metric(pmda_pmid(3,0), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.mailboxd.lmtp.rcvd_msgs', + '/opt/zimbra/zmstat/mailboxd.csv', 'Received mail messages'); +$pmda->add_metric(pmda_pmid(3,1), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_BYTE,0,0), 'zimbra.mailboxd.lmtp.rcvd_bytes', + '/opt/zimbra/zmstat/mailboxd.csv', 'Received bytes'); +$pmda->add_metric(pmda_pmid(3,2), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.mailboxd.lmtp.rcvd_rcpt', + '/opt/zimbra/zmstat/mailboxd.csv', 'Received receipts'); +$pmda->add_metric(pmda_pmid(3,3), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.mailboxd.lmtp.dlvd_msgs', + '/opt/zimbra/zmstat/mailboxd.csv', 'Delivered messages'); +$pmda->add_metric(pmda_pmid(3,4), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.mailboxd.lmtp.dlvd_bytes', + '/opt/zimbra/zmstat/mailboxd.csv', 'Delivered bytes'); +$pmda->add_metric(pmda_pmid(3,5), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.mailboxd.db_conn.count', + '/opt/zimbra/zmstat/mailboxd.csv', 'Database connection count'); +$pmda->add_metric(pmda_pmid(3,6), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,1,0,0,PM_TIME_MSEC,0), 'zimbra.mailboxd.db_conn.time', + '/opt/zimbra/zmstat/mailboxd.csv', 'Database connection time'); +$pmda->add_metric(pmda_pmid(3,7), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.mailboxd.ldap.dc_count', + '/opt/zimbra/zmstat/mailboxd.csv', ''); +$pmda->add_metric(pmda_pmid(3,8), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,1,0,0,PM_TIME_MSEC,0), 'zimbra.mailboxd.ldap.dc_time', + '/opt/zimbra/zmstat/mailboxd.csv', ''); +$pmda->add_metric(pmda_pmid(3,9), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.mailboxd.mbox.add_msg_count', + '/opt/zimbra/zmstat/mailboxd.csv', 'Mailbox message add count'); +$pmda->add_metric(pmda_pmid(3,10), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,1,0,0,PM_TIME_MSEC,0), 'zimbra.mailboxd.mbox.add_msg_time', + '/opt/zimbra/zmstat/mailboxd.csv', 'Mailbox message add average time'); +$pmda->add_metric(pmda_pmid(3,11), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.mailboxd.mbox.get_count', + '/opt/zimbra/zmstat/mailboxd.csv', 'Mailbox get count'); +$pmda->add_metric(pmda_pmid(3,12), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,1,0,0,PM_TIME_MSEC,0), 'zimbra.mailboxd.mbox.get_time', + '/opt/zimbra/zmstat/mailboxd.csv', 'Mailbox average get time'); +$pmda->add_metric(pmda_pmid(3,13), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.mailboxd.mbox_cache', + '/opt/zimbra/zmstat/mailboxd.csv', 'Mailbox cache'); +$pmda->add_metric(pmda_pmid(3,14), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.mailboxd.mbox_msg_cache', + '/opt/zimbra/zmstat/mailboxd.csv', 'Mailbox message cache'); +$pmda->add_metric(pmda_pmid(3,15), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.mailboxd.mbox_item_cache', + '/opt/zimbra/zmstat/mailboxd.csv', 'Mailbox item cache'); +$pmda->add_metric(pmda_pmid(3,16), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.mailboxd.soap.count', + '/opt/zimbra/zmstat/mailboxd.csv', 'Simple Object Access Protocol count'); +$pmda->add_metric(pmda_pmid(3,17), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,1,0,0,PM_TIME_MSEC,0), 'zimbra.mailboxd.soap.time', + '/opt/zimbra/zmstat/mailboxd.csv', 'Simple Object Access Protocol time'); +$pmda->add_metric(pmda_pmid(3,18), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.mailboxd.imap.count', + '/opt/zimbra/zmstat/mailboxd.csv', 'Internet Message Access Protocol count'); +$pmda->add_metric(pmda_pmid(3,19), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,1,0,0,PM_TIME_MSEC,0), 'zimbra.mailboxd.imap.time', + '/opt/zimbra/zmstat/mailboxd.csv', 'Internet Message Access Protocol time'); +$pmda->add_metric(pmda_pmid(3,20), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.mailboxd.pop.count', + '/opt/zimbra/zmstat/mailboxd.csv', 'Post Office Protocol count'); +$pmda->add_metric(pmda_pmid(3,21), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,1,0,0,PM_TIME_MSEC,0), 'zimbra.mailboxd.pop.time', + '/opt/zimbra/zmstat/mailboxd.csv', 'Post Office Protocol time'); +$pmda->add_metric(pmda_pmid(3,22), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.mailboxd.idx.wrt_avg', + '/opt/zimbra/zmstat/mailboxd.csv', 'Lucene Index Writer count'); +$pmda->add_metric(pmda_pmid(3,23), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.mailboxd.idx.wrt_opened', + '/opt/zimbra/zmstat/mailboxd.csv', ''); +$pmda->add_metric(pmda_pmid(3,24), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.mailboxd.idx.wrt_opened_cache_hit', + '/opt/zimbra/zmstat/mailboxd.csv', ''); +$pmda->add_metric(pmda_pmid(3,25), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.mailboxd.calcache.hit', + '/opt/zimbra/zmstat/mailboxd.csv', ''); +$pmda->add_metric(pmda_pmid(3,26), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.mailboxd.calcache.mem_hit', + '/opt/zimbra/zmstat/mailboxd.csv', ''); +$pmda->add_metric(pmda_pmid(3,27), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.mailboxd.calcache.lru_size', + '/opt/zimbra/zmstat/mailboxd.csv', ''); +$pmda->add_metric(pmda_pmid(3,28), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_BYTE,0,0), 'zimbra.mailboxd.idx.bytes_written', + '/opt/zimbra/zmstat/mailboxd.csv', ''); +$pmda->add_metric(pmda_pmid(3,29), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_BYTE,0,0), 'zimbra.mailboxd.idx.bytes_written_avg', + '/opt/zimbra/zmstat/mailboxd.csv', ''); +$pmda->add_metric(pmda_pmid(3,30), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_BYTE,0,0), 'zimbra.mailboxd.idx.bytes_read', + '/opt/zimbra/zmstat/mailboxd.csv', ''); +$pmda->add_metric(pmda_pmid(3,31), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_BYTE,0,0), 'zimbra.mailboxd.idx.bytes_read_avg', + '/opt/zimbra/zmstat/mailboxd.csv', ''); +$pmda->add_metric(pmda_pmid(3,32), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.mailboxd.bis.read', + '/opt/zimbra/zmstat/mailboxd.csv', ''); +$pmda->add_metric(pmda_pmid(3,33), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.mailboxd.bis.seek_rate', + '/opt/zimbra/zmstat/mailboxd.csv', ''); +$pmda->add_metric(pmda_pmid(3,34), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.mailboxd.db_pool_size', + '/opt/zimbra/zmstat/mailboxd.csv', ''); +$pmda->add_metric(pmda_pmid(3,35), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.mailboxd.innodb_bp_hit_rate', + '/opt/zimbra/zmstat/mailboxd.csv', ''); +$pmda->add_metric(pmda_pmid(3,36), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.mailboxd.pop.conn', + '/opt/zimbra/zmstat/mailboxd.csv', ''); +$pmda->add_metric(pmda_pmid(3,37), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.mailboxd.pop.ssl_conn', + '/opt/zimbra/zmstat/mailboxd.csv', ''); +$pmda->add_metric(pmda_pmid(3,38), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.mailboxd.imap.conn', + '/opt/zimbra/zmstat/mailboxd.csv', ''); +$pmda->add_metric(pmda_pmid(3,39), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.mailboxd.imap.ssl_conn', + '/opt/zimbra/zmstat/mailboxd.csv', ''); +$pmda->add_metric(pmda_pmid(3,40), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.mailboxd.soap.sessions', + '/opt/zimbra/zmstat/mailboxd.csv', 'Simple Object Access Protocol session count'); +# Zimbra duplicates four metrics here, so skip four for direct indexing +$pmda->add_metric(pmda_pmid(3,45), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.mailboxd.gc.minor_count', + '/opt/zimbra/zmstat/mailboxd.csv', 'Java minor garbage collection count'); +$pmda->add_metric(pmda_pmid(3,46), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + pmda_units(0,1,0,0,PM_TIME_MSEC,0), 'zimbra.mailboxd.gc.minor_time', + '/opt/zimbra/zmstat/mailboxd.csv', 'Java minor garbage collection time'); +$pmda->add_metric(pmda_pmid(3,47), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.mailboxd.gc.major_count', + '/opt/zimbra/zmstat/mailboxd.csv', 'Java major garbage collection count'); +$pmda->add_metric(pmda_pmid(3,48), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + pmda_units(0,1,0,0,PM_TIME_MSEC,0), 'zimbra.mailboxd.gc.major_time', + '/opt/zimbra/zmstat/mailboxd.csv', 'Java major garbage collection time'); +$pmda->add_metric(pmda_pmid(3,49), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_BYTE,0,0), 'zimbra.mailboxd.mempool.code_cache_used', + '/opt/zimbra/zmstat/mailboxd.csv', 'Java code cache space used'); +$pmda->add_metric(pmda_pmid(3,50), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_BYTE,0,0), 'zimbra.mailboxd.mempool.code_cache_free', + '/opt/zimbra/zmstat/mailboxd.csv', 'Java code cache space free'); +$pmda->add_metric(pmda_pmid(3,51), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_BYTE,0,0), 'zimbra.mailboxd.mempool.eden_space_used', + '/opt/zimbra/zmstat/mailboxd.csv', 'Java Eden area space used'); +$pmda->add_metric(pmda_pmid(3,52), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_BYTE,0,0), 'zimbra.mailboxd.mempool.eden_space_free', + '/opt/zimbra/zmstat/mailboxd.csv', 'Java Eden area space free'); +$pmda->add_metric(pmda_pmid(3,53), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_BYTE,0,0), 'zimbra.mailboxd.mempool.survivor_space_used', + '/opt/zimbra/zmstat/mailboxd.csv', 'Java survivor area space used'); +$pmda->add_metric(pmda_pmid(3,54), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_BYTE,0,0), 'zimbra.mailboxd.mempool.survivor_space_free', + '/opt/zimbra/zmstat/mailboxd.csv', 'Java survivor area space free'); +$pmda->add_metric(pmda_pmid(3,55), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_BYTE,0,0), 'zimbra.mailboxd.mempool.old_gen_space_used', + '/opt/zimbra/zmstat/mailboxd.csv', 'Java old generation space used'); +$pmda->add_metric(pmda_pmid(3,56), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_BYTE,0,0), 'zimbra.mailboxd.mempool.old_gen_space_free', + '/opt/zimbra/zmstat/mailboxd.csv', 'Java old generation space free'); +$pmda->add_metric(pmda_pmid(3,57), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_BYTE,0,0), 'zimbra.mailboxd.mempool.perm_gen_space_used', + '/opt/zimbra/zmstat/mailboxd.csv', 'Java permanent generation space used'); +$pmda->add_metric(pmda_pmid(3,58), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_BYTE,0,0), 'zimbra.mailboxd.mempool.perm_gen_space_free', + '/opt/zimbra/zmstat/mailboxd.csv', 'Java permanent generation space free'); +$pmda->add_metric(pmda_pmid(3,59), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_BYTE,0,0), 'zimbra.mailboxd.heap.used', + '/opt/zimbra/zmstat/mailboxd.csv', 'Java heap space used'); +$pmda->add_metric(pmda_pmid(3,60), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_BYTE,0,0), 'zimbra.mailboxd.heap.free', + '/opt/zimbra/zmstat/mailboxd.csv', 'Java heap space free'); + +$pmda->add_metric(pmda_pmid(4,0), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_KBYTE,0,0), 'zimbra.mtaqueue.size', + '/opt/zimbra/zmstat/mtaqueue.csv', + 'Number of kilobytes queued to the Mail Transfer Agent'); +$pmda->add_metric(pmda_pmid(4,1), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,1,0,0,PM_TIME_MSEC,0), 'zimbra.mtaqueue.requests', + '/opt/zimbra/zmstat/mtaqueue.csv', + 'Number of requests queued to the Mail Transfer Agent'); + +$pmda->add_metric(pmda_pmid(5,0), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.proc.mailbox.cputime', + '/opt/zimbra/zmstat/proc.csv', + 'Total time as a percentage spent executing the mailbox process'); +$pmda->add_metric(pmda_pmid(5,1), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.proc.mailbox.utime', + '/opt/zimbra/zmstat/proc.csv', + 'Total user time as a percentage spent executing the mailbox process'); +$pmda->add_metric(pmda_pmid(5,2), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.proc.mailbox.stime', + '/opt/zimbra/zmstat/proc.csv', + 'Total systime as a percentage spent executing the mailbox process'); +$pmda->add_metric(pmda_pmid(5,3), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_MBYTE,0,0), 'zimbra.proc.mailbox.total', + '/opt/zimbra/zmstat/proc.csv', + 'Total virtual memory footprint of the mailbox processes'); +$pmda->add_metric(pmda_pmid(5,4), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_MBYTE,0,0), 'zimbra.proc.mailbox.rss', + '/opt/zimbra/zmstat/proc.csv', + 'Resident set size of the mailbox processes'); +$pmda->add_metric(pmda_pmid(5,5), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_MBYTE,0,0), 'zimbra.proc.mailbox.shared', + '/opt/zimbra/zmstat/proc.csv', + 'Shared memory space used by the mailbox processes'); +$pmda->add_metric(pmda_pmid(5,6), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.proc.mailbox.count', + '/opt/zimbra/zmstat/proc.csv', 'Total number of mailbox processes'); + +$pmda->add_metric(pmda_pmid(5,7), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.proc.mysql.cputime', + '/opt/zimbra/zmstat/proc.csv', + 'Total time as a percentage spent executing the MySQL process'); +$pmda->add_metric(pmda_pmid(5,8), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.proc.mysql.utime', + '/opt/zimbra/zmstat/proc.csv', + 'Total user time as a percentage spent executing the MySQL process'); +$pmda->add_metric(pmda_pmid(5,9), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.proc.mysql.stime', + '/opt/zimbra/zmstat/proc.csv', + 'Total systime as a percentage spent executing the MySQL process'); +$pmda->add_metric(pmda_pmid(5,10), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_MBYTE,0,0), 'zimbra.proc.mysql.total', + '/opt/zimbra/zmstat/proc.csv', + 'Total virtual memory footprint of the MySQL processes'); +$pmda->add_metric(pmda_pmid(5,11), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_MBYTE,0,0), 'zimbra.proc.mysql.rss', + '/opt/zimbra/zmstat/proc.csv', + 'Resident set size of the MySQL processes'); +$pmda->add_metric(pmda_pmid(5,12), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_MBYTE,0,0), 'zimbra.proc.mysql.shared', + '/opt/zimbra/zmstat/proc.csv', + 'Shared memory space used by the MySQL processes'); +$pmda->add_metric(pmda_pmid(5,13), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.proc.mysql.count', + '/opt/zimbra/zmstat/proc.csv', 'Total number of MySQL processes'); + +$pmda->add_metric(pmda_pmid(5,14), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.proc.convertd.cputime', + '/opt/zimbra/zmstat/proc.csv', + 'Total time as a percentage spent executing the convertd process'); +$pmda->add_metric(pmda_pmid(5,15), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.proc.convertd.utime', + '/opt/zimbra/zmstat/proc.csv', + 'Total user time as a percentage spent executing the convertd process'); +$pmda->add_metric(pmda_pmid(5,16), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.proc.convertd.stime', + '/opt/zimbra/zmstat/proc.csv', + 'Total systime as a percentage spent executing the convertd process'); +$pmda->add_metric(pmda_pmid(5,17), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_MBYTE,0,0), 'zimbra.proc.convertd.total', + '/opt/zimbra/zmstat/proc.csv', + 'Total virtual memory footprint of the convertd processes'); +$pmda->add_metric(pmda_pmid(5,18), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_MBYTE,0,0), 'zimbra.proc.convertd.rss', + '/opt/zimbra/zmstat/proc.csv', + 'Resident set size of the convertd processes'); +$pmda->add_metric(pmda_pmid(5,19), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_MBYTE,0,0), 'zimbra.proc.convertd.shared', + '/opt/zimbra/zmstat/proc.csv', + 'Shared memory space used by the convertd processes'); +$pmda->add_metric(pmda_pmid(5,20), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.proc.convertd.count', + '/opt/zimbra/zmstat/proc.csv', 'Total number of convertd processes'); + +$pmda->add_metric(pmda_pmid(5,21), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.proc.ldap.cputime', + '/opt/zimbra/zmstat/proc.csv', + 'Total time as a percentage spent executing the LDAP process'); +$pmda->add_metric(pmda_pmid(5,22), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.proc.ldap.utime', + '/opt/zimbra/zmstat/proc.csv', + 'Total user time as a percentage spent executing the LDAP process'); +$pmda->add_metric(pmda_pmid(5,23), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.proc.ldap.stime', + '/opt/zimbra/zmstat/proc.csv', + 'Total systime as a percentage spent executing the LDAP process'); +$pmda->add_metric(pmda_pmid(5,24), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_MBYTE,0,0), 'zimbra.proc.ldap.total', + '/opt/zimbra/zmstat/proc.csv', + 'Total virtual memory footprint of the LDAP processes'); +$pmda->add_metric(pmda_pmid(5,25), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_MBYTE,0,0), 'zimbra.proc.ldap.rss', + '/opt/zimbra/zmstat/proc.csv', + 'Resident set size of the LDAP processes'); +$pmda->add_metric(pmda_pmid(5,26), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_MBYTE,0,0), 'zimbra.proc.ldap.shared', + '/opt/zimbra/zmstat/proc.csv', + 'Shared memory space used by the LDAP processes'); +$pmda->add_metric(pmda_pmid(5,27), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.proc.ldap.count', + '/opt/zimbra/zmstat/proc.csv', 'Total number of LDAP processes'); + +$pmda->add_metric(pmda_pmid(5,28), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.proc.postfix.cputime', + '/opt/zimbra/zmstat/proc.csv', + 'Total time as a percentage spent executing the postfix process'); +$pmda->add_metric(pmda_pmid(5,29), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.proc.postfix.utime', + '/opt/zimbra/zmstat/proc.csv', + 'Total user time as a percentage spent executing the postfix process'); +$pmda->add_metric(pmda_pmid(5,30), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.proc.postfix.stime', + '/opt/zimbra/zmstat/proc.csv', + 'Total systime as a percentage spent executing the postfix process'); +$pmda->add_metric(pmda_pmid(5,31), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_MBYTE,0,0), 'zimbra.proc.postfix.total', + '/opt/zimbra/zmstat/proc.csv', + 'Total virtual memory footprint of the postfix processes'); +$pmda->add_metric(pmda_pmid(5,32), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_MBYTE,0,0), 'zimbra.proc.postfix.rss', + '/opt/zimbra/zmstat/proc.csv', + 'Resident set size of the postfix processes'); +$pmda->add_metric(pmda_pmid(5,33), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_MBYTE,0,0), 'zimbra.proc.postfix.shared', + '/opt/zimbra/zmstat/proc.csv', + 'Shared memory space used by the postfix processes'); +$pmda->add_metric(pmda_pmid(5,34), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.proc.postfix.count', + '/opt/zimbra/zmstat/proc.csv', 'Total number of postfix processes'); + +$pmda->add_metric(pmda_pmid(5,35), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.proc.amavis.cputime', + '/opt/zimbra/zmstat/proc.csv', + 'Total time as a percentage spent executing the virus scanner'); +$pmda->add_metric(pmda_pmid(5,36), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.proc.amavis.utime', + '/opt/zimbra/zmstat/proc.csv', + 'Total user time as a percentage spent executing the virus scanner'); +$pmda->add_metric(pmda_pmid(5,37), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.proc.amavis.stime', + '/opt/zimbra/zmstat/proc.csv', + 'Total systime as a percentage spent executing the virus scanner'); +$pmda->add_metric(pmda_pmid(5,38), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_MBYTE,0,0), 'zimbra.proc.amavis.total', + '/opt/zimbra/zmstat/proc.csv', + 'Total virtual memory footprint of the virus scanner process'); +$pmda->add_metric(pmda_pmid(5,39), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_MBYTE,0,0), 'zimbra.proc.amavis.rss', + '/opt/zimbra/zmstat/proc.csv', + 'Resident set size of the virus scanner process'); +$pmda->add_metric(pmda_pmid(5,40), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_MBYTE,0,0), 'zimbra.proc.amavis.shared', + '/opt/zimbra/zmstat/proc.csv', + 'Shared memory space used by the virus scanner processes'); +$pmda->add_metric(pmda_pmid(5,41), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.proc.amavis.count', + '/opt/zimbra/zmstat/proc.csv', 'Total number of virus scanner processes'); + +$pmda->add_metric(pmda_pmid(5,42), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.proc.clam.cputime', + '/opt/zimbra/zmstat/proc.csv', + 'Total time as a percentage spent executing the anti-virus process'); +$pmda->add_metric(pmda_pmid(5,43), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.proc.clam.utime', + '/opt/zimbra/zmstat/proc.csv', + 'Total user time as a percentage spent executing the anti-virus process'); +$pmda->add_metric(pmda_pmid(5,44), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.proc.clam.stime', + '/opt/zimbra/zmstat/proc.csv', + 'Total systime as a percentage spent executing the anti-virus process'); +$pmda->add_metric(pmda_pmid(5,45), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_MBYTE,0,0), 'zimbra.proc.clam.total', + '/opt/zimbra/zmstat/proc.csv', + 'Total virtual memory footprint of the anti-virus processes'); +$pmda->add_metric(pmda_pmid(5,46), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_MBYTE,0,0), 'zimbra.proc.clam.rss', + '/opt/zimbra/zmstat/proc.csv', + 'Resident set size of the clam processes'); +$pmda->add_metric(pmda_pmid(5,47), PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,0,0,PM_SPACE_MBYTE,0,0), 'zimbra.proc.clam.shared', + '/opt/zimbra/zmstat/proc.csv', + 'Shared memory space used by the anti-virus processes'); +$pmda->add_metric(pmda_pmid(5,48), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.proc.clam.count', + '/opt/zimbra/zmstat/proc.csv', 'Total number of anti-virus processes'); + +$pmda->add_metric(pmda_pmid(6,0), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.threads.btpool', + '/opt/zimbra/zmstat/threads.csv', ''); +$pmda->add_metric(pmda_pmid(6,1), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.threads.pool', + '/opt/zimbra/zmstat/threads.csv', ''); +$pmda->add_metric(pmda_pmid(6,2), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.threads.lmtp', + '/opt/zimbra/zmstat/threads.csv', ''); +$pmda->add_metric(pmda_pmid(6,3), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.threads.imap', + '/opt/zimbra/zmstat/threads.csv', ''); +$pmda->add_metric(pmda_pmid(6,4), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.threads.pop3', + '/opt/zimbra/zmstat/threads.csv', ''); +$pmda->add_metric(pmda_pmid(6,5), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.threads.scheduled_tasks', + '/opt/zimbra/zmstat/threads.csv', ''); +$pmda->add_metric(pmda_pmid(6,6), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.threads.timer', + '/opt/zimbra/zmstat/threads.csv', ''); +$pmda->add_metric(pmda_pmid(6,7), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.threads.anonymous_io', + '/opt/zimbra/zmstat/threads.csv', ''); +$pmda->add_metric(pmda_pmid(6,8), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.threads.flap_processor', + '/opt/zimbra/zmstat/threads.csv', ''); +$pmda->add_metric(pmda_pmid(6,9), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.threads.gc', + '/opt/zimbra/zmstat/threads.csv', ''); +$pmda->add_metric(pmda_pmid(6,10), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.threads.socket_acceptor', + '/opt/zimbra/zmstat/threads.csv', ''); +$pmda->add_metric(pmda_pmid(6,11), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.threads.thread', + '/opt/zimbra/zmstat/threads.csv', ''); +$pmda->add_metric(pmda_pmid(6,12), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.threads.other', + '/opt/zimbra/zmstat/threads.csv', ''); +$pmda->add_metric(pmda_pmid(6,13), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,1,0,0,PM_COUNT_ONE), 'zimbra.threads.total', + '/opt/zimbra/zmstat/threads.csv', ''); + +$pmda->add_metric(pmda_pmid(7,0), PM_TYPE_STRING, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.control.fd.timestamp', + 'Timestamp for completion of last fd value fetch', ''); +$pmda->add_metric(pmda_pmid(7,1), PM_TYPE_STRING, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.control.imap.timestamp', + 'Timestamp for completion of last imap value fetch', ''); +$pmda->add_metric(pmda_pmid(7,2), PM_TYPE_STRING, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.control.soap.timestamp', + 'Timestamp for completion of last soap value fetch', ''); +$pmda->add_metric(pmda_pmid(7,3), PM_TYPE_STRING, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.control.mailbox.timestamp', + 'Timestamp for completion of last mailbox value fetch', ''); +$pmda->add_metric(pmda_pmid(7,4), PM_TYPE_STRING, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.control.mtaqueue.timestamp', + 'Timestamp for completion of last mtaqueue value fetch', ''); +$pmda->add_metric(pmda_pmid(7,5), PM_TYPE_STRING, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.control.proc.timestamp', + 'Timestamp for completion of last process value fetch', ''); +$pmda->add_metric(pmda_pmid(7,6), PM_TYPE_STRING, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.control.threads.timestamp', + 'Timestamp for completion of last threads value fetch', ''); +$pmda->add_metric(pmda_pmid(7,7), PM_TYPE_STRING, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.control.status.timestamp', + 'Timestamp for completion of last status probe', ''); + +$pmda->add_metric(pmda_pmid(8,0), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.status.antivirus', + 'Status for Zimbra antivirus service - 0=stopped, 1=running', ''); +$pmda->add_metric(pmda_pmid(8,1), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.status.antispam', + 'Status for Zimbra antispam service - 0=stopped, 1=running', ''); +$pmda->add_metric(pmda_pmid(8,2), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.status.archiving', + 'Status for Zimbra archiving service - 0=stopped, 1=running', ''); +$pmda->add_metric(pmda_pmid(8,3), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.status.convertd', + 'Status for Zimbra convertd service - 0=stopped, 1=running', ''); +$pmda->add_metric(pmda_pmid(8,4), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.status.mta', + 'Status for Zimbra MTA service - 0=stopped, 1=running', ''); +$pmda->add_metric(pmda_pmid(8,5), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.status.mailbox', + 'Status for Zimbra mailbox service - 0=stopped, 1=running', ''); +$pmda->add_metric(pmda_pmid(8,6), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.status.logger', + 'Status for Zimbra logger service - 0=stopped, 1=running', ''); +$pmda->add_metric(pmda_pmid(8,7), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.status.snmp', + 'Status for Zimbra SNMP service - 0=stopped, 1=running', ''); +$pmda->add_metric(pmda_pmid(8,8), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.status.ldap', + 'Status for Zimbra LDAP service - 0=stopped, 1=running', ''); +$pmda->add_metric(pmda_pmid(8,9), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.status.spell', + 'Status for Zimbra spell service - 0=stopped, 1=running', ''); +$pmda->add_metric(pmda_pmid(8,10), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.status.imapproxy', + 'Status for Zimbra imapproxy service - 0=stopped, 1=running', ''); +$pmda->add_metric(pmda_pmid(8,11), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(0,0,0,0,0,0), 'zimbra.status.stats', + 'Status for Zimbra stats service - 0=stopped, 1=running', ''); + +$pmda->add_indom($imap_domain, \@imap_indom, 'IMAP operations', + 'Internet Message Access Protocol operations'); +$pmda->add_indom($soap_domain, \@soap_indom, 'SOAP operation', + 'Simple Object Access Protocol operations'); + +$pmda->add_tail($stats . 'fd.csv', \&zimbra_fd_parser, 0); +$pmda->add_tail($stats . 'imap.csv', \&zimbra_imap_parser, 0); +$pmda->add_tail($stats . 'mailboxd.csv', \&zimbra_mailbox_parser, 0); +$pmda->add_tail($stats . 'mtaqueue.csv', \&zimbra_mtaqueue_parser, 0); +$pmda->add_tail($stats . 'proc.csv', \&zimbra_proc_parser, 0); +$pmda->add_tail($stats . 'soap.csv', \&zimbra_soap_parser, 0); +$pmda->add_tail($stats . 'threads.csv', \&zimbra_threads_parser, 0); + +$pmda->add_pipe($probe, \&zimbra_probe_callback, 0); + +$pmda->set_fetch_callback(\&zimbra_fetch_callback); +$pmda->set_user('pcp'); +$pmda->run; + +=pod + +=head1 NAME + +pmdazimbra - Zimbra Collaboration Suite (ZCS) PMDA + +=head1 DESCRIPTION + +B<pmdazimbra> is a Performance Metrics Domain Agent (PMDA) which +exports metric values from several subsystems of the Zimbra Suite. +Further details on Zimbra can be found at http://www.zimbra.com/. + +=head1 INSTALLATION + +If you want access to the names and values for the zimbra performance +metrics, do the following as root: + + # cd $PCP_PMDAS_DIR/zimbra + # ./Install + +If you want to undo the installation, do the following as root: + + # cd $PCP_PMDAS_DIR/zimbra + # ./Remove + +B<pmdazimbra> 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 /opt/zimbra/zmstat/* + +comma-separated value files containing Zimbra performance data + +=item $PCP_PMDAS_DIR/zimbra/Install + +installation script for the B<pmdazimbra> agent + +=item $PCP_PMDAS_DIR/zimbra/Remove + +undo installation script for the B<pmdazimbra> agent + +=item $PCP_LOG_DIR/pmcd/zimbra.log + +default log file for error messages from B<pmdazimbra> + +=back + +=head1 SEE ALSO + +pmcd(1). diff --git a/src/pmdas/zimbra/pmlogconf.all b/src/pmdas/zimbra/pmlogconf.all new file mode 100644 index 0000000..3c3f14d --- /dev/null +++ b/src/pmdas/zimbra/pmlogconf.all @@ -0,0 +1,4 @@ +#pmlogconf-setup 2.0 +ident All Zimbra information +probe zimbra.fd_count + zimbra diff --git a/src/pmdas/zimbra/zimbraprobe.sh b/src/pmdas/zimbra/zimbraprobe.sh new file mode 100755 index 0000000..a238e27 --- /dev/null +++ b/src/pmdas/zimbra/zimbraprobe.sh @@ -0,0 +1,26 @@ +#!/bin/sh +# +# Copyright (c) 2009 Aconex. All Rights Reserved. +# +# 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. +# + +delay=${1:-10} + +# First one produces any errors to PMDA logfile +su -c 'zmcontrol status' - zimbra + +while true +do + date +'%d/%m/%Y %H:%M:%S' + sleep $delay + su -c 'zmcontrol status' - zimbra 2>/dev/null +done |