Projet

Général

Profil

Paste
Télécharger au format
Statistiques
| Branche: | Révision:

root / plugins / mail / postgrey-new @ 430d68ff

Historique | Voir | Annoter | Télécharger (4,48 ko)

1 a15365dd Rico Sagner
#! /usr/bin/perl
2
###################################################################
3
# Munins Plugin to monitor actions of postgrey greylisting daemon #
4
# Version 0.1                                                     #
5
###################################################################
6
7
######################### Configuration ###########################
8
# Usually this plugin will look in /var/log/mail.log for the      #
9
# output of postgrey. You can change that by setting  env.logfile #
10
# The state file is /var/lib/munin/plugin-state/postgrey-new.state#
11
# This can be changed by setting env.statefile                    #
12
# Keep in  mind to grant enough rigths in order to open the       #
13
# logfiles etc.                                                   #
14
# Parameters understood by this plugin                            #
15
#                                                                 #
16
#   config   (required)                                           #
17
#   autoconf (optional)                                           #
18
#                                                                 #
19
###################################################################
20
# This plgin works with postgrey 1.31 but should also do with 1.32#
21
# Tested under Debian lenny                                       #
22
###################################################################
23
24
25
### Author Rico Sagner hellriegel@sund-xplosion.de
26
### Please send bug reports  to this address
27
28
use strict;
29
use warnings;
30
31
my $maillog= $ENV{'logfile'} || "/var/log/mail.log";
32
my $statefile= $ENV{'statefile'} || "/var/lib/munin/plugin-state/postgrey-new.state";
33
34
my $greylisted=0;
35
my $greylisted_old=0;
36
my $passes=0;
37
my $passes_old=0;
38
my $passes_white=0;
39
my $passes_white_old=0;
40
my $retry=0;
41
my $retry_old=0;
42
my $grey_new=0;
43
my $pass_new=0;
44
my $retry_new=0;
45
my $passes_white_new=0;
46
47
if(defined $ARGV[0] and $ARGV[0] eq "autoconf") {
48
 if ( -f $maillog) {
49
	print "yes\n";
50
	exit 0;
51
	}
52
 else {
53
	print "no\n";
54
	exit 1
55
 }
56
}
57
58
59
if(defined $ARGV[0] and $ARGV[0] eq "config") {
60
	print "graph_title Postgrey Actions\n";
61
	print "graph_order greylisted retry_early passed passed_w\n";
62
	print "graph_category mail\n";
63
	print "graph_vlabel Count\n";
64
	print "graph_scale no\n";
65
	
66
	print "greylisted.label greylisted_reason_new\n";
67
	print "greylisted.type GAUGE\n";
68
	print "greylisted.draw AREA\n";
69
	print "greylisted.min 0\n";
70
	print "retry_early.label greylisted_retry_early\n";
71
	print "retry_early.type GAUGE\n";
72
	print "retry_early.draw AREA\n";
73
	print "retry_early.min 0\n";
74
	print "passed.label passed_found\n";
75
	print "passed.type GAUGE\n";
76
	print "passed.draw AREA\n";
77
	print "passed.min 0\n";
78
	print "passed_w.label passed_whitelisted\n";
79
	print "passed_w.type GAUGE\n";
80
	print "passed_w.draw AREA\n";
81
	print "passed_w.min 0\n";
82
	exit 0;
83
}
84
85
if( -f $statefile) {
86
 open ( STATE ,"<$statefile");
87
 defined($greylisted_old=<STATE>) or $greylisted_old=0;
88
 defined($passes_old=<STATE>) or $passes_old=0;
89
 defined($retry_old=<STATE>) or $retry_old=0;
90
 defined($passes_white_old=<STATE>) or $passes_white_old=0;
91
 chomp($greylisted_old);
92
 chomp($passes_old);
93
 chomp($retry_old);
94
 chomp($passes_white_old);
95
 close STATE;
96
} 
97
98
99
100
open (LOG ,"<$maillog") or die "Cannot open Maillog";
101
while(my $line = <LOG>)
102
{
103
	if($line=~m/postgrey\[/)
104
	{
105
		if($line=~m/action=greylist/) {
106
			if($line=~m/reason=new/)
107
			{
108
				$greylisted++;
109
			}
110
			elsif($line=~m/reason=early-retry/)
111
			{
112
				$retry++;
113
			}
114
		}
115
		elsif($line=~m/action=pass/)  {
116
			if($line=~m/reason=triplet/)
117
			{
118
				$passes++;
119
			}
120
			elsif($line=~m/reason=client/)
121
			{
122
				$passes_white++;
123
			}
124
		}
125
		
126
127
	}
128
}
129
close(LOG);
130
131
132
open (STATE2,">$statefile");
133
print STATE2 "$greylisted\n";
134
print STATE2 "$passes\n";
135
print STATE2 "$retry\n";
136
print STATE2 "$passes_white\n";
137
close STATE2;
138
139
if($greylisted_old>$greylisted) { $grey_new=$greylisted; }
140
elsif($greylisted_old eq $greylisted) { $grey_new=0;}
141
else { $grey_new=$greylisted-$greylisted_old; }
142
143
if($passes_old>$passes) { $pass_new=$passes;}
144
elsif( $passes_old eq $passes) { $pass_new=0; }
145
else { $pass_new=$passes-$passes_old; }
146
147
if($retry_old>$retry) { $retry_new=$retry;}
148
elsif($retry_old eq $retry) { $retry_new=0;}
149
else { $retry_new=$retry-$retry_old; }
150
151
if($passes_white_old>$passes_white) { $passes_white_new=$passes_white;}
152
elsif($passes_white_old eq $passes_white) { $passes_white_new=0;}
153
else { $passes_white_new=$passes_white-$passes_white_old; }
154
155
print "greylisted.value $grey_new\n";
156
print "retry_early.value $retry_new\n";
157
print "passed.value $pass_new\n";
158
print "passed_w.value $passes_white_new\n";
159
160
exit 0;