Hi guys, how can I monitorize the mails? I have found this script (attached here) that helps to get the data from the postfix but I don't know how can be used together the ISPConfig configuration. I mean that I don't find some information required by the stat script. fetch_mail_statistics.pl /var/log/mail.log /var/log/mailstats.db .1.3.6.1.4.1.2021.255 -g .1.3.6.1.4.1.2021.255 where are those files? thanks in advance
I would like to configure it too but I have found some problem. I use CentOS 5.4 & ISPConfig 2. Where do you have downloaded it?
1. download mailgraph http://mailgraph.schweikert.ch/ - open the tar.gz file (tar zxf mailgraph-1.14.tar.gz) - copy the file mailgraph.pl to dir: /usr/local/bin - copy the file mailgraph-init to dir: /etc/init.d/ and rename it to "mailgraph" (the following works on debian, i don't know if it works on centos as well, it's to create an autostart when the server reboots) - run: update-rc.d mailgraph defaults 2. edit /etc/snmp/snmpd.conf and add these lines: Code: exec mailcount_sent /bin/cat /tmp/mailsent exec mailcount_recv /bin/cat /tmp/mailrecv exec mailcount_reject /bin/cat /tmp/mailrejected exec mailcount_bounced /bin/cat /tmp/mailbounced exec mailcount_spam /bin/cat /tmp/mailspam exec mailcount_virus /bin/cat /tmp/mailvirus 3. restart snmpd (/etc/init.d/snmpd restart) 4. Open the file mailgraph.pl and find the sub "update" (search for "sub update($)") 5. Replace the function with this one: Code: sub update($) { my $t = shift; my $m = $t - $t%$rrdstep; init_rrd($m) unless $rrd_inited; return 1 if $m == $this_minute; return 0 if $m < $this_minute; `echo $sum{sent} > /tmp/mailsent`; `echo $sum{received} > /tmp/mailrecv`; `echo $sum{bounced} > /tmp/mailbounced`; `echo $sum{rejected} > /tmp/mailrejected`; `echo $sum{virus} > /tmp/mailvirus`; `echo $sum{spam} > /tmp/mailspam`; # print "update $this_minute:$sum{sent}:$sum{received}:$sum{bounced}:$sum{rejected}:$sum{virus}:$sum{spam}\n" if $opt{verbose}; # RRDs::update $rrd, "$this_minute:$sum{sent}:$sum{received}:$sum{bounced}:$sum{rejected}" unless $opt{'only-virus-rrd'}; # RRDs::update $rrd_virus, "$this_minute:$sum{virus}:$sum{spam}" unless $opt{'only-mail-rrd'}; # if($m > $this_minute+$rrdstep) { # for(my $sm=$this_minute+$rrdstep;$sm<$m;$sm+=$rrdstep) { # print "update $sm:0:0:0:0:0:0 (SKIP)\n" if $opt{verbose}; # RRDs::update $rrd, "$sm:0:0:0:0" unless $opt{'only-virus-rrd'}; # RRDs::update $rrd_virus, "$sm:0:0" unless $opt{'only-mail-rrd'}; # } # } $this_minute = $m; $sum{sent}=0; $sum{received}=0; $sum{bounced}=0; $sum{rejected}=0; $sum{virus}=0; $sum{spam}=0; return 1; } 6. Start mailgraph (/etc/init.d/mailgraph start) What have we done so far: - Mailgraph will write it's totals to files in /tmp directory. - We've added some options for snmpd (so cacti can get the totals through snmp) 7. Import the attached xml file in cacti
I don't understand this part of the installation: Code: See the file mailgraph-init for an example init script that you can use to start mailgraph at system boot. and then have I just copy the cgi file in the cgi folder of my website previously created on ISPConfig? The files contained inside the TAR archive are: Code: -rw-r--r-- 1 1000 1000 8519 29 ago 2007 CHANGES -rw-r--r-- 1 1000 1000 17976 29 ago 2007 COPYING -rwxr-xr-x 1 1000 1000 6898 29 ago 2007 mailgraph.cgi --------> /var/www/web2/cgi-bin/ -rw-r--r-- 1 1000 1000 672 29 ago 2007 mailgraph.css -rw-r--r-- 1 1000 1000 777 29 ago 2007 mailgraph-init -------> ??? -rwxr-xr-x 1 1000 1000 29230 29 ago 2007 mailgraph.pl -------> ??? -rw-r--r-- 1 1000 1000 2683 29 ago 2007 README
No, we're not going to use the cgi part of the script .. the cgi part is for when you want to view the stats in an image created by the cgi script (we don't want that, we want postfix to do it, so skip that) I've updated my previous post to make things more clear.
This command doesn't exist in CentOS: update-rc.d mailgraph defaults Other steps to do are: 1. chmod 777 /etc/init.d/mailgraph 2. /etc/init.d/mailgraph start Furthermore I get this message from CACTI: Code: 12/04/2009 04:05:02 PM - CMDPHP: Poller[0] Host[1] DS[22] WARNING: Result from SNMP not valid. Partial Result: /bin/cat: /tmp/mailv 12/04/2009 04:05:01 PM - CMDPHP: Poller[0] Host[1] DS[21] SNMP: v3: 127.0.0.1, dsname: spam, oid: .1.3.6.1.4.1.2021.8.1.101.5, output: U 12/04/2009 04:05:01 PM - CMDPHP: Poller[0] Host[1] DS[21] WARNING: Result from SNMP not valid. Partial Result: /bin/cat: /tmp/mails 12/04/2009 04:05:01 PM - CMDPHP: Poller[0] Host[1] DS[20] SNMP: v3: 127.0.0.1, dsname: send, oid: .1.3.6.1.4.1.2021.8.1.101.1, output: U 12/04/2009 04:05:01 PM - CMDPHP: Poller[0] Host[1] DS[20] WARNING: Result from SNMP not valid. Partial Result: /bin/cat: /tmp/mails 12/04/2009 04:05:01 PM - CMDPHP: Poller[0] Host[1] DS[19] SNMP: v3: 127.0.0.1, dsname: reject, oid: .1.3.6.1.4.1.2021.8.1.101.3, output: U 12/04/2009 04:05:01 PM - CMDPHP: Poller[0] Host[1] DS[19] WARNING: Result from SNMP not valid. Partial Result: /bin/cat: /tmp/mailr 12/04/2009 04:05:01 PM - CMDPHP: Poller[0] Host[1] DS[18] SNMP: v3: 127.0.0.1, dsname: recv, oid: .1.3.6.1.4.1.2021.8.1.101.2, output: U 12/04/2009 04:05:01 PM - CMDPHP: Poller[0] Host[1] DS[18] WARNING: Result from SNMP not valid. Partial Result: /bin/cat: /tmp/mailr 12/04/2009 04:05:01 PM - CMDPHP: Poller[0] Host[1] DS[17] SNMP: v3: 127.0.0.1, dsname: bounced, oid: .1.3.6.1.4.1.2021.8.1.101.4, output: U 12/04/2009 04:05:01 PM - CMDPHP: Poller[0] Host[1] DS[17] WARNING: Result from SNMP not valid. Partial Result: /bin/cat: /tmp/mailb
Is mailgraph running? (ps flax | grep mailgraph) Do the following files exist? /tmp/mailsent /tmp/mailrecv /tmp/mailrejected /tmp/mailbounced /tmp/mailspam /tmp/mailvirus
Code: #ps flax | grep mailgraph 0 0 7925 7825 15 0 3940 720 pipe_w S+ pts/1 0:00 \_ grep mailgraph There are not any of these file in the /tmp /tmp/mailsent /tmp/mailrecv /tmp/mailrejected /tmp/mailbounced /tmp/mailspam /tmp/mailvirus
Mailgraph is not running .. mailgraph creates those files .. Code: /etc/init.d/mailgraph start edit: if it won't start .. run /usr/local/bin/mailgraph.pl -l /var/log/syslog -d and see if you get errors
Code: # /etc/init.d/mailgraph start Starting mail statistics grapher: mailgraph Code: # ps flax | grep mailgraph 0 0 8248 7825 15 0 3940 724 stext S+ pts/1 0:00 \_ grep mailgraph No file has been created yet.
I assume perl is installed on your machine: perl -MCPAN -e 'install File::Tail' you can also install "strace" and run: Code: strace /etc/init.d/mailgraph start and see what errors you get. (last reply, i'll help you further on monday, cya!)
Thanks for the help ... but maybe we can see again on monday Code: # perl -MCPAN -e 'install File::Tail' CPAN: Storable loaded ok Going to read /root/.cpan/Metadata Database was generated on Fri, 04 Dec 2009 00:39:45 GMT File::Tail is up to date. Code: # strace /etc/init.d/mailgraph start execve("/etc/init.d/mailgraph", ["/etc/init.d/mailgraph", "start"], [/* 21 vars */]) = 0 brk(0) = 0x916c000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=44205, ...}) = 0 mmap2(NULL, 44205, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f97000 close(3) = 0 open("/lib/libtermcap.so.2", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\320J\274\0004\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=13084, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f96000 mmap2(0xbc4000, 14568, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xbc4000 mmap2(0xbc7000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2) = 0xbc7000 close(3) = 0 open("/lib/libdl.so.2", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0PZ\271\0004\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=16428, ...}) = 0 mmap2(0xb95000, 12408, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb95000 mmap2(0xb97000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1) = 0xb97000 close(3) = 0 open("/lib/libc.so.6", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\340?\246\0004\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=1611564, ...}) = 0 mmap2(0xa4e000, 1328580, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xa4e000 mmap2(0xb8d000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x13f) = 0xb8d000 mmap2(0xb90000, 9668, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb90000 close(3) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f95000 set_thread_area({entry_number:-1 -> 6, base_addr:0xb7f956c0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0 mprotect(0xb97000, 4096, PROT_READ) = 0 mprotect(0xb8d000, 8192, PROT_READ) = 0 mprotect(0xa45000, 4096, PROT_READ) = 0 munmap(0xb7f97000, 44205) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 open("/dev/tty", O_RDWR|O_NONBLOCK|O_LARGEFILE) = 3 close(3) = 0 brk(0) = 0x916c000 brk(0x918d000) = 0x918d000 open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=56438480, ...}) = 0 mmap2(NULL, 2097152, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7d95000 close(3) = 0 getuid32() = 0 getgid32() = 0 geteuid32() = 0 getegid32() = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 time(NULL) = 1259943853 open("/proc/meminfo", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fa1000 read(3, "MemTotal: 4145344 kB\nMemFre"..., 4096) = 771 close(3) = 0 munmap(0xb7fa1000, 4096) = 0 rt_sigaction(SIGCHLD, {SIG_DFL, [], 0}, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGCHLD, {SIG_DFL, [], 0}, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGINT, {SIG_DFL, [], 0}, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGINT, {SIG_DFL, [], 0}, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGQUIT, {SIG_DFL, [], 0}, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGQUIT, {SIG_DFL, [], 0}, {SIG_DFL, [], 0}, 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 rt_sigaction(SIGQUIT, {0x1, [], 0}, {SIG_DFL, [], 0}, 8) = 0 uname({sys="Linux", node="server.software.com", ...}) = 0 stat64("/root", {st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0 stat64(".", {st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0 getpid() = 13475 open("/usr/lib/gconv/gconv-modules.cache", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=25462, ...}) = 0 mmap2(NULL, 25462, PROT_READ, MAP_SHARED, 3, 0) = 0xb7f9b000 close(3) = 0 getppid() = 13474 getpgrp() = 13474 rt_sigaction(SIGCHLD, {0x807aa60, [], 0}, {SIG_DFL, [], 0}, 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 open("/etc/init.d/mailgraph", O_RDONLY|O_LARGEFILE) = 3 ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbfc6d3c8) = -1 ENOTTY (Inappropriate ioctl for device) _llseek(3, 0, [0], SEEK_CUR) = 0 read(3, "#!/bin/sh\n\n# $Id: mailgraph-init"..., 80) = 80 _llseek(3, 0, [0], SEEK_SET) = 0 getrlimit(RLIMIT_NOFILE, {rlim_cur=1024, rlim_max=1024}) = 0 dup2(3, 255) = 255 close(3) = 0 fcntl64(255, F_SETFD, FD_CLOEXEC) = 0 fcntl64(255, F_GETFL) = 0x8000 (flags O_RDONLY|O_LARGEFILE) fstat64(255, {st_mode=S_IFREG|0777, st_size=777, ...}) = 0 _llseek(255, 0, [0], SEEK_CUR) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 read(255, "#!/bin/sh\n\n# $Id: mailgraph-init"..., 777) = 777 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f9a000 write(1, "Starting mail statistics grapher"..., 44Starting mail statistics grapher: mailgraph ) = 44 stat64(".", {st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0 stat64("/bin/nice", {st_mode=S_IFREG|0755, st_size=20856, ...}) = 0 access("/bin/nice", X_OK) = 0 access("/bin/nice", R_OK) = 0 stat64("/bin/nice", {st_mode=S_IFREG|0755, st_size=20856, ...}) = 0 access("/bin/nice", X_OK) = 0 access("/bin/nice", R_OK) = 0 rt_sigprocmask(SIG_BLOCK, [INT CHLD], [], 8) = 0 _llseek(255, -7, [770], SEEK_CUR) = 0 clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0xb7f95708) = 13476 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0 rt_sigaction(SIGINT, {0x807b610, [], 0}, {SIG_DFL, [], 0}, 8) = 0 waitpid(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0) = 13476 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 --- SIGCHLD (Child exited) @ 0 (0) --- waitpid(-1, 0xbfc6cca8, WNOHANG) = -1 ECHILD (No child processes) sigreturn() = ? (mask now []) rt_sigaction(SIGINT, {SIG_DFL, [], 0}, {0x807b610, [], 0}, 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 read(255, "exit 0\n", 777) = 7 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 exit_group(0) = ?
Back on the job, so let's see ..it's not perl, .. mailgraph uses rrdtool, but WE are not using it, so we might want to check if rrdtool is installed (it's still needed for cacti, so you need it indeed). check: Code: which rrdtool