plugin-pg__all_tables_activity: pg__all_tables_activity

File pg__all_tables_activity, 3.8 KB (added by ajaja, 7 years ago)
Line 
1#!/usr/bin/perl -w
2# Plugin for monitor postgres connections.
3#
4# Licenced under GPL v2.
5#
6# Usage:
7#
8#       Symlink into /etc/munin/plugins/ and add the monitored
9#       database to the filename. e.g.:
10#
11#       ln -s /usr/share/munin/plugins/pg__connections \
12#         /etc/munin/plugins/pg_<databasename>_connections
13#       This should, however, be given through autoconf and suggest.
14#
15#       If required, give username, password and/or Postgresql server
16#       host through environment variables.
17#
18#       You must also activate Postgresql statistics. See
19#       http://www.postgresql.org/docs/7.4/interactive/monitoring-stats.html
20#       for how to enable this. Specifically, the following lines must
21#       exist in your postgresql.conf:
22#
23#           stats_start_collector = true
24#           stats_block_level = true
25#
26#
27# Parameters:
28#
29#       config   (required)
30#
31# Config variables:
32#
33#       dbhost     - Which database server to use. Defaults to
34#                    'localhost'.
35#       dbname     - Which database to use. Defaults to template1
36#       dbuser     - A Postgresql user account with read permission to
37#                    the given database. Defaults to
38#                    'postgres'. Anyway, Munin must be told which user
39#                    this plugin should be run as.
40#       dbpass     - The corresponding password, if
41#                    applicable. Default to undef. Remember that
42#                    pg_hba.conf must be configured accordingly.
43#
44# Magic markers
45#%# family=auto
46#%# capabilities=autoconf
47
48use strict;
49use DBI;
50
51my $dbhost = $ENV{'dbhost'} || '127.0.0.1';
52my $dbname = $ENV{'dbname'} || 'template1';
53my $dbuser = $ENV{'dbuser'} || 'postgres';
54my $dbport = $ENV{'dbport'} || '5432';
55my $dbpass = $ENV{'dbpass'} || '';
56my $statscope = $ENV{'statscope'} || 'user';
57
58# Check for DBD::Pg
59if (! eval "require DBD::Pg;") {
60     exit 1;
61}
62
63my $dsn = "DBI:Pg:dbname=$dbname;host=$dbhost;port=$dbport";
64#print "$dsn\n";
65my $dbh = DBI->connect ($dsn, $dbuser,
66                        $dbpass,
67                        {RaiseError =>1}) || die "";
68
69
70if (exists $ARGV[0]) {
71    if ($ARGV[0] eq 'autoconf') {
72        # Check for DBD::Pg
73        if (! eval "require DBD::Pg;") {
74             print "no (DBD::Pg not found)";
75             exit 1;
76        }
77        if ($dbh) {
78            print "yes\n";
79            exit 0;
80        } else {
81            print "no Unable to access Database $dbname on host $dbhost as user $dbuser.\nError returned was: ". $DBI::errstr;
82            exit 1;
83        }
84    }
85
86    if ($ARGV[0] eq "config") {
87        print "graph_title PostgreSQL Rows activity from $dbname\n";
88        print "graph_vlabel Count / \${graph_period}\n";
89        print "graph_category Postgresql \n";
90        print "graph_args --base 1000\n";
91        print "graph_info Numbers of row insertions, updates, and deletions\n";
92
93        print "n_tup_ins.label Rows inserted\n";
94        print "n_tup_ins.draw LINE2\n";
95        print "n_tup_ins.type DERIVE\n";
96        print "n_tup_ins.min 0\n";
97        print "n_tup_ins.graph_info Number of row insertions\n";
98
99
100        print "n_tup_upd.label Rows updated\n";
101        print "n_tup_upd.draw LINE2\n";
102        print "n_tup_upd.type DERIVE\n";
103        print "n_tup_upd.min 0\n";
104        print "n_tup_upd.graph_info Number of row updates\n";
105
106        print "n_tup_del.label Rows deleted\n";
107        print "n_tup_del.draw LINE2\n";
108        print "n_tup_del.type DERIVE\n";
109        print "n_tup_del.min 0\n";
110        print "n_tup_del.graph_info Number of row deletions\n";
111
112        exit 0;
113    }
114}
115
116#my $sql = "select sum(n_tup_ins),sum(n_tup_upd),sum(n_tup_del) from pg_stat_all_tables;";
117my $sql = "select sum(n_tup_ins),sum(n_tup_upd),sum(n_tup_del) from pg_stat_".$statscope."_tables;";
118my $sth = $dbh->prepare($sql);
119$sth->execute();
120my ($n_tup_ins,$n_tup_upd,$n_tup_del) = $sth->fetchrow();
121print "n_tup_ins.value $n_tup_ins\n";
122print "n_tup_upd.value $n_tup_upd\n";
123print "n_tup_del.value $n_tup_del\n";