Logfileauswertungen
Damit wir uns im laufenden Betrieb regelmäßigen über den aktuellen Status ein Bildmachen können - und das ohne langwierig im Logfile des Postfix herumzusuchen - stehen uns mehrere Hilfsprogramme zur Verfügung.
Im Detail wollen wir uns nun zwei der Varianten genauer ansehen.
- pflogsumm Logfilezusammenfassung generieren und via eMail dem postmaster zur Verfügung stellen.
- Awstats Logfilezusammenfassung generieren und zum Abrufen via Browser anbieten
- mailgraph Graphisch sehr ansprechende Logfilezusammenfassung generieren und zum Abrufen via Browser anbieten
pflogsumm
Mit Hilfe dieses kleinen Perlscriptes erstellen wir nun täglich einen Statusbericht über das was unserem MX widerfahren ist. :)
Installation
Die Installation des Perlscriptes gestaltet sich im gewohnten Maße sehr einfach über YUM.
# yum install postfix-pflogsumm
Anschließend finden wir in /usr/sbin/pflogsumm das besagte Perl-Script.
manueller Programmaufruf
Ein man pflogsumm bzw. pflogsumm –? verrät uns im Detail, welche Programmoptioonen zur Verfügung stehen.
Wollen wir uns einen Bericht des heutigen Tages ansehen, so generieren wir diesen on-the-fly mit:
# /usr/sbin/pflogsumm -d today /var/log/maillog
Interessiert uns was gestern los war, so lautet der Aufgruf ganz einfach:
# /usr/sbin/pflogsumm -d yesterday /var/log/maillog
automatischer Programmaufruf
Für die tägliche Erstellung unserer Mailserverstatistik bemühen wir nun ganz einfach unseres cron-deamon.
Hierzu legen wir mit dem Editor unserer Wahl eine betreffende Konfigurationsdate :
# vim /etc/crontab
#täglicher Statusbericht unseres Mailservers postfix 10 0 * * * root /usr/sbin/pflogsumm -d yesterday /var/log/maillog 2>&1 | /bin/mailx -s "‘uname -n‘ daily mail stats" postmaster
Täglich um 10 Minuten nach 12:00 Uhr p.m., wird die Statistik des letzten Tages erstellt und mittels mailx als eMail an den postmaster verschickt.
Date: Mon, 13 Oct 2008 00:10:03 +0200 (CEST) From: root <root@nausch.org> To: postmaster@nausch.org Subject: ‘uname -n‘ daily mail stats Postfix log summaries for Oct 12 Grand Totals ------------ messages 31 received 27 delivered 0 forwarded 0 deferred 0 bounced 339 rejected (92%) 0 reject warnings 0 held 0 discarded (0%) 353252 bytes received 353252 bytes delivered 16 senders 16 sending hosts/domains 4 recipients 1 recipient hosts/domains Per-Hour Traffic Summary time received delivered deferred bounced rejected -------------------------------------------------------------------- 0000-0100 0 0 0 0 0 0100-0200 0 0 0 0 0 0200-0300 0 0 0 0 0 0300-0400 0 0 0 0 0 0400-0500 1 0 0 0 3 0500-0600 1 1 0 0 24 0600-0700 0 0 0 0 10 0700-0800 0 0 0 0 2 0800-0900 4 3 0 0 7 0900-1000 3 3 0 0 18 1000-1100 3 2 0 0 18 1100-1200 2 2 0 0 29 1200-1300 2 2 0 0 25 1300-1400 2 1 0 0 20 1400-1500 0 0 0 0 37 1500-1600 0 0 0 0 22 1600-1700 0 0 0 0 24 1700-1800 2 2 0 0 31 1800-1900 3 3 0 0 12 1900-2000 3 3 0 0 10 2000-2100 4 4 0 0 19 2100-2200 1 1 0 0 2 2200-2300 0 0 0 0 19 2300-2400 0 0 0 0 7 Host/Domain Summary: Message Delivery sent cnt bytes defers avg dly max dly host/domain -------- ------- ------- ------- ------- ----------- 27 353252 0 1.3 s 3.6 s nausch.org ... ... Fatal Errors: none Panics: none Master daemon messages ---------------------- 1 reload configuration /etc/postfix
AWStats
Mit Hilfe zweier Perlscripte erstellen wir nun täglich einen Statusbericht über das was unserem MX widerfahren ist, und rufen später diese Information via Firefox/Konqueror ab. :)
Installation
Die Installation von AWStats ist logfileanalyse_mit_awstats ausfürlich beschrieben.
Konfiguration
Zur eigentlichen Logfileauswertung legen wir uns nun eine eigene Konfigurationdatei für AWStats an:
# /etc/awstats/awstats.postfix.nausch.org.conf
Darinpassen wir nun alle Konfigurationsoptionen, die für das maillog von Postfix relevant sind, an. Zusammengefasst sieht dann unsere Konfigurationdatei entsprechend wie folgt aus:
# egrep -v '(^#|^$)' /etc/awstats/awstats.postfix.nausch.org.conf
LogFile="perl /usr/bin/maillogconvert.pl standard < /var/log/maillog |" LogType=M LogFormat="%time2 %email %email_r %host %host_r %method %url %code %bytesd" LogSeparator=" " SiteDomain="mx1.nausch.org" HostAliases=„localhost 127.0.0.1 REGEX[nausch\.org$] REGEX[www\.nausch\.org$]“ DNSLookup=2 DirData="." DirCgi="/cgi-bin" DirIcons="/icon" AllowToUpdateStatsFromBrowser=0 AllowFullYearView=3 EnableLockForUpdate=1 DNSStaticCacheFile="dnscache.txt" DNSLastUpdateCacheFile="dnscachelastupdate.txt" SkipDNSLookupFor="" AllowAccessFromWebToAuthenticatedUsersOnly=0 AllowAccessFromWebToFollowingAuthenticatedUsers="" AllowAccessFromWebToFollowingIPAddresses="" CreateDirDataIfNotExists=0 BuildHistoryFormat=text BuildReportFormat=html SaveDatabaseFilesWithPermissionsForEveryone=0 PurgeLogFile=0 ArchiveLogRecords=0 KeepBackupOfHistoricFiles=0 DefaultFile="index.html" SkipHosts="" SkipUserAgents="" SkipFiles="" SkipReferrersBlackList="" OnlyHosts="" OnlyUserAgents="" OnlyUsers="" OnlyFiles="" NotPageList="css js class gif jpg jpeg png bmp ico rss xml swf" ValidHTTPCodes="200 304" ValidSMTPCodes="1 250" AuthenticatedUsersNotCaseSensitive=0 URLNotCaseSensitive=0 URLWithAnchor=0 URLQuerySeparators="?;" URLWithQuery=0 URLWithQueryWithOnlyFollowingParameters="" URLWithQueryWithoutFollowingParameters="" URLReferrerWithQuery=0 WarningMessages=1 ErrorMessages="" DebugMessages=0 NbOfLinesForCorruptedLog=50 WrapperScript="" DecodeUA=0 MiscTrackerUrl="/js/awstats_misc_tracker.js" LevelForBrowsersDetection=0 # 0 disables Browsers detection. # 2 reduces AWStats speed by 2% # allphones reduces AWStats speed by 5% LevelForOSDetection=0 # 0 disables OS detection. # 2 reduces AWStats speed by 3% LevelForRefererAnalyze=0 # 0 disables Origin detection. # 2 reduces AWStats speed by 14% LevelForRobotsDetection=0 # 0 disables Robots detection. # 2 reduces AWStats speed by 2.5% LevelForSearchEnginesDetection=0 # 0 disables Search engines detection. # 2 reduces AWStats speed by 9% LevelForKeywordsDetection=0 # 0 disables Keyphrases/Keywords detection. # 2 reduces AWStats speed by 1% LevelForFileTypesDetection=0 # 0 disables File types detection. # 2 reduces AWStats speed by 1% LevelForWormsDetection=0 # 0 disables Worms detection. # 2 reduces AWStats speed by 15% UseFramesWhenCGI=1 DetailedReportsOnNewWindows=1 Expires=0 MaxRowsInHTMLOutput=1000 Lang="de" DirLang="./lang" ShowMenu=1 ShowSummary=HB ShowMonthStats=HB ShowDaysOfMonthStats=HB ShowDaysOfWeekStats=HB ShowHoursStats=HB ShowDomainsStats=0 ShowHostsStats=HBL ShowAuthenticatedUsers=0 ShowRobotsStats=0 ShowWormsStats=0 ShowEMailSenders=HBML ShowEMailReceivers=HBML ShowSessionsStats=0 ShowPagesStats=0 ShowFileTypesStats=0 ShowFileSizesStats=0 ShowOSStats=0 ShowBrowsersStats=0 ShowScreenSizeStats=0 ShowOriginStats=0 ShowKeyphrasesStats=0 ShowKeywordsStats=0 ShowMiscStats=0 ShowHTTPErrorsStats=0 ShowSMTPErrorsStats=1 ShowClusterStats=0 AddDataArrayMonthStats=1 AddDataArrayShowDaysOfMonthStats=1 AddDataArrayShowDaysOfWeekStats=1 AddDataArrayShowHoursStats=1 IncludeInternalLinksInOriginSection=0 MaxNbOfDomain = 10 MinHitDomain = 1 MaxNbOfHostsShown = 10 MinHitHost = 1 MaxNbOfLoginShown = 10 MinHitLogin = 1 MaxNbOfRobotShown = 10 MinHitRobot = 1 MaxNbOfPageShown = 10 MinHitFile = 1 MaxNbOfOsShown = 10 MinHitOs = 1 MaxNbOfBrowsersShown = 10 MinHitBrowser = 1 MaxNbOfScreenSizesShown = 5 MinHitScreenSize = 1 MaxNbOfWindowSizesShown = 5 MinHitWindowSize = 1 MaxNbOfRefererShown = 10 MinHitRefer = 1 MaxNbOfKeyphrasesShown = 10 MinHitKeyphrase = 1 MaxNbOfKeywordsShown = 10 MinHitKeyword = 1 MaxNbOfEMailsShown = 20 MinHitEMail = 1 FirstDayOfWeek=1 ShowFlagLinks="" ShowLinksOnUrl=1 UseHTTPSLinkForUrl="" MaxLengthOfShownURL=64 HTMLHeadSection="" HTMLEndSection="" Logo="awstats_logo6.png" LogoLink="http://awstats.sourceforge.net" BarWidth = 260 BarHeight = 90 StyleSheet="" color_Background="FFFFFF" # Background color for main page (Default = "FFFFFF") color_TableBGTitle="CCCCDD" # Background color for table title (Default = "CCCCDD") color_TableTitle="000000" # Table title font color (Default = "000000") color_TableBG="CCCCDD" # Background color for table (Default = "CCCCDD") color_TableRowTitle="FFFFFF" # Table row title font color (Default = "FFFFFF") color_TableBGRowTitle="ECECEC" # Background color for row title (Default = "ECECEC") color_TableBorder="ECECEC" # Table border color (Default = "ECECEC") color_text="000000" # Color of text (Default = "000000") color_textpercent="606060" # Color of text for percent values (Default = "606060") color_titletext="000000" # Color of text title within colored Title Rows (Default = "000000") color_weekend="EAEAEA" # Color for week-end days (Default = "EAEAEA") color_link="0011BB" # Color of HTML links (Default = "0011BB") color_hover="605040" # Color of HTML on-mouseover links (Default = "605040") color_u="FFAA66" # Background color for number of unique visitors (Default = "FFAA66") color_v="F4F090" # Background color for number of visites (Default = "F4F090") color_p="4477DD" # Background color for number of pages (Default = "4477DD") color_h="66DDEE" # Background color for number of hits (Default = "66DDEE") color_k="2EA495" # Background color for number of bytes (Default = "2EA495") color_s="8888DD" # Background color for number of search (Default = "8888DD") color_e="CEC2E8" # Background color for number of entry pages (Default = "CEC2E8") color_x="C1B2E2" # Background color for number of exit pages (Default = "C1B2E2") ExtraTrackedRowsLimit=500
Logrotate anpassen
In regelmäßigen Abständen werden die Logfiles unseres Webserver rotiert, d.h. es werden die Alten Daten gapackt und eine neue Logdatei angelegt.
AWStats kann jedoch nur auf das aktuelle Logfile zugreifen, nicht aber auf die bereits archivierten. Damit nun keine Statistik-Daten verloren gehen, müsssen wir noch sicherstellen, dass vor dem Archivierungsintervall von logrotate, AWStats einen Update seiner Statistikfiles machen kann.
Hierzu tragen wir nachfolgende Zeilen in die zentrale „syslog-logrotate-Konfogurationsdatei“ /etc/logrotate.d/syslog ein:
# vim /etc/logrotate.d/syslog
- syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron { sharedscripts prerotate /usr/bin/awstats_updateall.pl now -configdir=/etc/awstats/ --awstatsprog=/var/www/awstats/awstats.pl >/dev/null endscript postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true /bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true endscript }
mailgraph
Eine weitere graphisch ansprechende Übersicht kann mittels Mailgraph erstellt werden.
Paketinstalltion(en)
Die von mailgraph benötigten Pakete rrdtool, perl-Time-HiRes-Value und perl-File-Tail installieren wir über unseren bewährten Mechanismus yum
# yum install rrdtool perl-Time-HiRes-Value perl-File-Tail
Download
Das Programm-Archiv mailgraph holen wir uns direkt von David Schweikert's Homepage via wget.
# cd /usr/local/src
# wget http://mailgraph.schweikert.ch/pub/mailgraph-1.14.tar.gz
--11:31:12-- http://mailgraph.schweikert.ch/pub/mailgraph-1.14.tar.gz Auflösen des Rechnernamens »mailgraph.schweikert.ch«.... 88.198.52.145 Verbindungsaufbau mit mailgraph.schweikert.ch[88.198.52.145]:80... verbunden. HTTP-Anfrage gesendet, warte auf Antwort... 200 OK Länge: 22014 (21K) [application/x-gzip] Speichere nach: »mailgraph-1.14.tar.gz« 100%[===========================================================================================================================================>] 22.014 --.-K/s in 0,06s 11:31:12 (374 KB/s) - »mailgraph-1.14.tar.gz« gespeichert [22014/22014]
Installation
Anschließend entpacken wir das Archiv und verlinken auf die aktuelle Version.
# tar zxvf mailgraph-1.14.tar.gz
mailgraph-1.14/ mailgraph-1.14/mailgraph-init mailgraph-1.14/mailgraph.cgi mailgraph-1.14/mailgraph.pl mailgraph-1.14/mailgraph.css mailgraph-1.14/COPYING mailgraph-1.14/CHANGES mailgraph-1.14/README
# ln -s mailgraph-1.14 mailgraph
Konfiguration
Entsprechend unserer Installationsumgebung passen wir die Pfadangaben in dem Programm mailgraph.cgi an
# vim mailgraph.cgi
- mailgraph.cgi
#!/usr/bin/perl -w # mailgraph -- postfix mail traffic statistics # copyright (c) 2000-2007 ETH Zurich # copyright (c) 2000-2007 David Schweikert <david@schweikert.ch> # released under the GNU General Public License use RRDs; use POSIX qw(uname); my $VERSION = "1.14"; my $host = (POSIX::uname())[1]; my $scriptname = 'mailgraph.cgi'; my $xpoints = 540; my $points_per_sample = 3; my $ypoints = 160; my $ypoints_err = 96; my $rrd = '/var/log/mailgraph.rrd'; # path to where the RRD database is my $rrd_virus = '/var/log/mailgraph_virus.rrd'; # path to where the Virus RRD database is my $tmp_dir = '/tmp/mailgraph'; # temporary directory where to store the images
Das Verzeichnis für die temporär erstellen Graphiken legen wir noch an:
# mkdir /tmp/mailgraph
und passen die Berechtigung an.
# chown apache:apache /tmp/mailgraph/
Apache VHost anlegen
Damit wir bequem von unserem Browser aus, die aktuellen Graphiken abfragen können, legen wir nun einen passenden VHost an.
# vim /etc/httpd/conf.d/vhosts.conf
- vhosts.conf
# # mailgraph.nausch.org # <VirtualHost *:80> ServerAdmin webmaster@nausch.org ServerName mailgraph.nausch.org:80 ServerAlias www.mailgraph.nausch.org ServerPath / DocumentRoot "/usr/local/src/mailgraph" AddHandler cgi-script .cgi <Directory "/usr/local/src/mailgraph"> Options ExecCGI AllowOverride AuthConfig Order allow,deny </Directory> DirectoryIndex mailgraph.cgi ErrorLog logs/mailgraph_error.log CustomLog logs/mailgraph_access.log combined </VirtualHost>
und starten anschließend unseren Webserver einmal durch, damit er den weiteren VHost auch verwenden kann.
# service postfix restart httpd beenden: [ OK ] httpd starten: [ OK ]
Programmaufruf
manueller Start des Dämon
Damit das Maillogfile forlaufend ausgelesen wird, starten wir unserem im Dämonmodus. Über die Option –ignore-localhost weisen wir mailgraph an, die Mails von unserem amavis nicht „doppelt“ zu zählen. Ferner werden auch die Informationen zu Spam- und Virusmeldungen aus dem MAillog in den Graphiken berücksichtigt.
# /usr/local/src/mailgraph/mailgraph.pl -d -l /var/log/maillog --ignore-localhost
Über unseren definierten VHost können wir nun mit Hilfe des CGI-Sriptes mailgraph.cgi auf unsere Loggraphiken zugreifen.
automatischer Start des Dämon
Damit beim Systemstart der mailgraph-Dämon richtig gestartet wird, passen wir das mitgelieferte init-script unseren Gegebenheiten an.
# vim /usr/local/src/mailgraph/mailgraph-init
- mailgraph-init
#!/bin/sh # $Id: mailgraph-init 19 2005-06-13 11:23:22Z dws $ # example init script for mailgraph # # chkconfig: 2345 82 28 # description: mailgraph postfix log grapher. # # processname: mailgraph.pl # pidfile: /var/run/mailgraph.pid PATH=/bin:/usr/bin MAILGRAPH_PL=/usr/local/src/mailgraph/mailgraph.pl MAIL_LOG=/var/log/maillog PID_FILE=/var/run/mailgraph.pid RRD_DIR=/var/log case "$1" in 'start') echo "Starting mail statistics grapher: mailgraph"; nice -19 $MAILGRAPH_PL -l $MAIL_LOG -d \ --daemon-pid=$PID_FILE --daemon-rrd=$RRD_DIR \ --ignore-localhost ;; 'stop') echo "Stopping mail statistics grapher: mailgraph"; if [ -f $PID_FILE ]; then kill `cat $PID_FILE` rm $PID_FILE else echo "mailgraph not running"; fi ;; *) echo "Usage: $0 { start | stop }" exit 1
Anschließend „machen“ wir das Script noch ausführbar,
# chmod 755 vim /usr/local/src/mailgraph/mailgraph-init
kopieren es an nach /etc/int.d/
# cp vim /usr/local/src/mailgraph/mailgraph-init /etc/init.d/
und starten den daemon mit
# service mailgraph-init start
Damit der Start nun auch bei einem reboot automatisch erfolgt, setzen wir die nötigen symlinks automatisch mit
# chkconfig mailgraph-init on
Das Ganze überprüfen wir dann noch mittels
# chkconfig --list | grep mailgraph mailgraph-init 0:Aus 1:Aus 2:Ein 3:Ein 4:Ein 5:Ein 6:Aus
Webaufruf
Über unseren Vhost erhalten wir nun optisch schön ansprechende Übersichten über den Mailverkehr unseres MX.