Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
centos:mail_c6:mta_11 [25.02.2013 19:21. ] – [Installation] django | centos:mail_c6:mta_11 [18.11.2024 19:12. ] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Mailserver - Logfileauswertungen unter CentOS 6.x ====== | ||
+ | Damit wir uns im laufenden Betrieb regelmäßigen über den aktuellen Status ein Bildmachen können, ohne dazu extra langwierig im Logfile unseres Mailservers herumzusuchen, | ||
+ | |||
+ | Im Detail wollen wir uns nun drei der Varianten genauer ansehen. | ||
+ | - **[[centos: | ||
+ | - WEB-GUIs Graphisch sehr ansprechende Logfilezusammenfassung generieren und zum Abrufen via Browser anbieten | ||
+ | - **[[centos: | ||
+ | - **[[centos: | ||
+ | - **[[centos: | ||
+ | - **[[centos: | ||
+ | - **[[centos: | ||
+ | - **[[centos: | ||
+ | |||
+ | ===== pflogsumm ===== | ||
+ | Mit Hilfe dieses kleinen Perlscriptes können wir uns einen täglichen Statusbericht unseres Mailservers erstellen lassen und wissen so das was unserem MX widerfahren ist. :) Das Perlscript **pflogsumm** wertet hierzu das Logfile // | ||
+ | |||
+ | ==== Installation ==== | ||
+ | Das Perlscript **pflogsumm** befindet sich unter CentOS 6.x im Paket **// | ||
+ | # yum install postfix-perl-scripts -y | ||
+ | |||
+ | Was uns bei der Installation dieses Paketes alles mitgebracht wurde, zeigt uns folgender Aufruf. | ||
+ | # rpm -qil postfix-perl-scripts | ||
+ | < | ||
+ | Version | ||
+ | Release | ||
+ | Install Date: Sun 03 Jun 2012 07:18:19 PM CEST Build Host: c6b18n3.bsys.dev.centos.org | ||
+ | Group : Applications/ | ||
+ | Size : 106404 | ||
+ | Signature | ||
+ | Packager | ||
+ | URL : http:// | ||
+ | Summary | ||
+ | Description : | ||
+ | This package contains perl scripts pflogsumm and qshape. | ||
+ | |||
+ | Pflogsumm is a log analyzer/ | ||
+ | designed to provide an over-view of Postfix activity. Pflogsumm | ||
+ | generates summaries and, in some cases, detailed reports of mail | ||
+ | server traffic volumes, rejected and bounced email, and server | ||
+ | warnings, errors and panics. | ||
+ | |||
+ | qshape prints Postfix queue domain and age distribution. | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | ==== Optionen beim Programmaufruf==== | ||
+ | Hinweise zur Konfiguration oder besser gesagt über die Optionen beim Aufruf des Programms zeigt ein Blick in die Manpage von **pflogsumm**. | ||
+ | |||
+ | < | ||
+ | |||
+ | NAME | ||
+ | | ||
+ | |||
+ | | ||
+ | |||
+ | SYNOPSIS | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | |||
+ | If no file(s) specified, reads from stdin. | ||
+ | |||
+ | DESCRIPTION | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | mail server traffic volumes, rejected and bounced email, and server | ||
+ | | ||
+ | |||
+ | OPTIONS | ||
+ | -d today | ||
+ | -d yesterday | ||
+ | |||
+ | | ||
+ | |||
+ | Emit detailed reports. | ||
+ | only a per-message report, sorted by sender domain, | ||
+ | then user-in-domain, | ||
+ | |||
+ | WARNING: the data built to generate this report can | ||
+ | quickly consume very large amounts of memory if a | ||
+ | lot of log entries are processed! | ||
+ | |||
+ | -h < | ||
+ | |||
+ | 0 = none. | ||
+ | |||
+ | See also: " | ||
+ | report-limiting options. | ||
+ | |||
+ | | ||
+ | |||
+ | (By happy coincidence, | ||
+ | being as it requires a numeric argument :-). Yeah, I | ||
+ | know: lame.) | ||
+ | |||
+ | -i | ||
+ | | ||
+ | manner. | ||
+ | |||
+ | Normally pflogsumm lower-cases only the host and | ||
+ | domain parts, leaving the user part alone. | ||
+ | option causes the entire email address to be lower- | ||
+ | cased. | ||
+ | |||
+ | | ||
+ | |||
+ | For summaries that contain date or time information, | ||
+ | use ISO 8601 standard formats (CCYY-MM-DD and HH:MM), | ||
+ | rather than "Mon DD CCYY" and " | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | This is for use when you have a mix of Internet-style | ||
+ | domain addresses and UUCP-style bang-paths in the log. | ||
+ | Upstream UUCP feeds sometimes mung Internet domain | ||
+ | style address into bang-paths. | ||
+ | sometimes undo the " | ||
+ | " | ||
+ | host upstream and " | ||
+ | originated) will get converted to | ||
+ | " | ||
+ | extended detail report (-e), to help ensure that by- | ||
+ | | ||
+ | |||
+ | | ||
+ | |||
+ | Merely a convenience feature. | ||
+ | is in $PATH. | ||
+ | if desired.) | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | Suppresses the printing of the following detailed | ||
+ | reports, respectively: | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | See also: " | ||
+ | options. | ||
+ | |||
+ | | ||
+ | |||
+ | Do not emit report on " | ||
+ | |||
+ | | ||
+ | The message may be delivered long-enough after the | ||
+ | | ||
+ | the log(s) processed by a particular run of | ||
+ | | ||
+ | | ||
+ | | ||
+ | size data." | ||
+ | |||
+ | | ||
+ | |||
+ | On a busy mail server, say at an ISP, SMTPD warnings | ||
+ | can result in a rather sizeable report. | ||
+ | turns reporting them off. | ||
+ | |||
+ | | ||
+ | |||
+ | Emit " | ||
+ | etc.) before " | ||
+ | |||
+ | | ||
+ | For those reject reports that list IP addresses or | ||
+ | host/domain names: append the email from address to | ||
+ | each listing. | ||
+ | SMTP command pipelining" | ||
+ | |||
+ | | ||
+ | |||
+ | note: headings for warning, fatal, and " | ||
+ | messages will always be printed. | ||
+ | |||
+ | | ||
+ | |||
+ | Generate smtpd connection statistics. | ||
+ | |||
+ | The " | ||
+ | reports. | ||
+ | are daily averages (reflected in the report heading). | ||
+ | |||
+ | | ||
+ | |||
+ | Set syslog_name to look for for Postfix log entries. | ||
+ | |||
+ | By default, pflogsumm looks for entries in logfiles | ||
+ | with a syslog name of " | ||
+ | If you’ve set a non-default " | ||
+ | in your Postfix configuration, | ||
+ | tell pflogsumm what that is. | ||
+ | |||
+ | See the discussion about the use of this option under | ||
+ | " | ||
+ | |||
+ | -u < | ||
+ | |||
+ | See also: " | ||
+ | report-limiting options. | ||
+ | |||
+ | | ||
+ | |||
+ | For the message deferral, bounce and reject summaries: | ||
+ | display the full " | ||
+ | |||
+ | Note: this can result in quite long lines in the report. | ||
+ | |||
+ | | ||
+ | | ||
+ | " | ||
+ | to | ||
+ | " | ||
+ | |||
+ | In other words: replace the numeric value with " | ||
+ | |||
+ | By specifying the optional " | ||
+ | munging is more " | ||
+ | to something like: | ||
+ | |||
+ | " | ||
+ | |||
+ | Actually: specifying anything less than 2 does the | ||
+ | " | ||
+ | in the more " | ||
+ | |||
+ | See " | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | data in columns that that might otherwise be blank. | ||
+ | |||
+ | RETURN VALUE | ||
+ | | ||
+ | |||
+ | ERRORS | ||
+ | Error messages are emitted to stderr. | ||
+ | |||
+ | EXAMPLES | ||
+ | | ||
+ | |||
+ | | ||
+ | |||
+ | A report of prior week’s activities (after logs rotated): | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | at 10 minutes after midnight. | ||
+ | |||
+ | 10 0 * * * / | ||
+ | | ||
+ | |||
+ | | ||
+ | (This example assumes one rotates ones mail logs weekly, some time | ||
+ | | ||
+ | |||
+ | 10 4 * * 0 / | ||
+ | | ||
+ | |||
+ | The two crontab examples, above, must actually be a single line | ||
+ | | ||
+ | | ||
+ | |||
+ | SEE ALSO | ||
+ | The pflogsumm FAQ: pflogsumm-faq.txt. | ||
+ | |||
+ | NOTES | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | For display purposes: integer values are munged into " | ||
+ | " | ||
+ | | ||
+ | which to do this--my thinking being 512x was the largest number | ||
+ | (of digits) that most folks can comfortably grok at-a-glance. | ||
+ | These are " | ||
+ | can easily change all of this with some constants near the | ||
+ | | ||
+ | |||
+ | " | ||
+ | | ||
+ | daily averages (reflected in the report headings). | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | Verp munging may not always result in correct address and | ||
+ | | ||
+ | |||
+ | Verp munging is always in a state of experimentation. | ||
+ | of this option may result in inaccurate statistics with regards | ||
+ | to the " | ||
+ | |||
+ | | ||
+ | | ||
+ | run with " | ||
+ | may not be sorted correctly by-domain-by-user. | ||
+ | | ||
+ | |||
+ | The " | ||
+ | | ||
+ | " | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | |||
+ | There are some issues with the use of --syslog_name. | ||
+ | that, even with $syslog_name set, Postfix will sometimes still log | ||
+ | | ||
+ | / | ||
+ | |||
+ | # Beware: a non-default syslog_name setting takes effect only | ||
+ | # after process initialization. Some initialization errors will be | ||
+ | # logged with the default name, especially errors while parsing | ||
+ | # the command line and errors while accessing the Postfix main.cf | ||
+ | # configuration file. | ||
+ | |||
+ | As a consequence, | ||
+ | as well as whatever is supplied for syslog_name. | ||
+ | |||
+ | Where this becomes an issue is where people are running two or more | ||
+ | | ||
+ | |||
+ | . Neither instance may use the default " | ||
+ | | ||
+ | |||
+ | . Log entries that fall victim to what’s described in | ||
+ | | ||
+ | | ||
+ | log entries will show up in each report. | ||
+ | |||
+ | The Pflogsumm Home Page is at: | ||
+ | |||
+ | | ||
+ | |||
+ | REQUIREMENTS | ||
+ | For certain options (e.g.: --smtpd_stats), | ||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | As of version 19990413-02, | ||
+ | | ||
+ | |||
+ | LICENSE | ||
+ | This program is free software; you can redistribute it and/or | ||
+ | | ||
+ | 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 | ||
+ | | ||
+ | GNU General Public License for more details. | ||
+ | |||
+ | You may have received a copy of the GNU General Public License | ||
+ | along with this program; if not, write to the Free Software | ||
+ | | ||
+ | USA. | ||
+ | |||
+ | An on-line copy of the GNU General Public License can be found | ||
+ | | ||
+ | |||
+ | 1.1.1 | ||
+ | </ | ||
+ | Mit der Option **-help** werden die entsprechenden Optionen ebenfalls in Kurzform angezeigt. | ||
+ | # pflogsumm -help | ||
+ | < | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | </ | ||
+ | ==== manueller Programmaufruf ==== | ||
+ | Wollen wir uns einen Bericht des heutigen Tages ansehen, so generieren wir diesen on-the-fly mit: | ||
+ | # / | ||
+ | Interessiert uns was gestern los war, so lautet der Aufgruf ganz einfach: | ||
+ | # / | ||
+ | |||
+ | ==== 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 Konfigurationsdatei an, bzw. ergänzen die bereits vorhandene Datei. | ||
+ | # vim / | ||
+ | |||
+ | < | ||
+ | #täglicher Statusbericht unseres Mailservers postfix | ||
+ | 10 0 * * * root / | ||
+ | </ | ||
+ | |||
+ | Täglich um 00:10 Uhr wird die Statistik des letzten Tages erstellt und mittels **mailx** als eMail an den postmaster verschickt. | ||
+ | < | ||
+ | From: root < | ||
+ | To: postmaster@nausch.org | ||
+ | Subject: ‘uname -n‘ daily mail stats | ||
+ | |||
+ | Postfix log summaries for Oct 12 | ||
+ | |||
+ | Grand Totals | ||
+ | ------------ | ||
+ | messages | ||
+ | |||
+ | | ||
+ | | ||
+ | 0 | ||
+ | 0 | ||
+ | 0 | ||
+ | 339 | ||
+ | 0 | ||
+ | 0 held | ||
+ | 0 | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | 4 | ||
+ | 1 | ||
+ | |||
+ | |||
+ | Per-Hour Traffic Summary | ||
+ | time received | ||
+ | -------------------------------------------------------------------- | ||
+ | 0000-0100 | ||
+ | 0100-0200 | ||
+ | 0200-0300 | ||
+ | 0300-0400 | ||
+ | 0400-0500 | ||
+ | 0500-0600 | ||
+ | 0600-0700 | ||
+ | 0700-0800 | ||
+ | 0800-0900 | ||
+ | 0900-1000 | ||
+ | 1000-1100 | ||
+ | 1100-1200 | ||
+ | 1200-1300 | ||
+ | 1300-1400 | ||
+ | 1400-1500 | ||
+ | 1500-1600 | ||
+ | 1600-1700 | ||
+ | 1700-1800 | ||
+ | 1800-1900 | ||
+ | 1900-2000 | ||
+ | 2000-2100 | ||
+ | 2100-2200 | ||
+ | 2200-2300 | ||
+ | 2300-2400 | ||
+ | |||
+ | Host/Domain Summary: Message Delivery | ||
+ | sent cnt bytes | ||
+ | | ||
+ | | ||
+ | |||
+ | ... | ||
+ | |||
+ | ... | ||
+ | |||
+ | Fatal Errors: none | ||
+ | |||
+ | Panics: none | ||
+ | |||
+ | Master daemon messages | ||
+ | ---------------------- | ||
+ | 1 | ||
+ | </ | ||
+ | |||
+ | ===== mailgraph ===== | ||
+ | Eine ansprechende graphische Übersicht kann mittels [[http:// | ||
+ | |||
+ | ==== Installation ==== | ||
+ | Mit Hilfe von **yum** holen wir uns als erstes das benötigte Paket auf unser System. | ||
+ | # yum install mailgraph -y | ||
+ | Den Inhalt des Paketes inspizieren wir bei Bedarf mit folgendem Aufruf. | ||
+ | # rpm -qil mailgraph | ||
+ | < | ||
+ | Version | ||
+ | Release | ||
+ | Install Date: Tue 03 Jul 2012 03:04:16 PM CEST Build Host: ppc02.phx2.fedoraproject.org | ||
+ | Group : System Environment/ | ||
+ | Size : 68312 License: GPL+ | ||
+ | Signature | ||
+ | Packager | ||
+ | URL : http:// | ||
+ | Summary | ||
+ | Description : | ||
+ | Mailgraph is a very simple mail statistics RRDtool frontend for Postfix and | ||
+ | Sendmail that produces daily, weekly, monthly and yearly graphs of | ||
+ | received/ | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | </ | ||
+ | ==== Konfiguration ==== | ||
+ | Die Konfiguration von mailgraph selbst gestaltet sich sehr einfach. Über die Konfigurationsdatei // | ||
+ | # vim / | ||
+ | |||
+ | <file hash / | ||
+ | PRIORITY=-19 | ||
+ | OPTIONS=--ignore-localhost | ||
+ | </ | ||
+ | |||
+ | Will man die Sprache bei der Webseite, oder die Farben anpassen, so nimmt man die Änderungen direkt im CGI-Script vor. | ||
+ | # vim / | ||
+ | <file perl / | ||
+ | |||
+ | # mailgraph -- postfix mail traffic statistics | ||
+ | # copyright (c) 2000-2007 ETH Zurich | ||
+ | # copyright (c) 2000-2007 David Schweikert < | ||
+ | # released under the GNU General Public License | ||
+ | |||
+ | use RRDs; | ||
+ | use POSIX qw(uname); | ||
+ | |||
+ | my $VERSION = " | ||
+ | |||
+ | my $host = (POSIX:: | ||
+ | my $scriptname = ' | ||
+ | my $xpoints = 540; | ||
+ | my $points_per_sample = 3; | ||
+ | my $ypoints = 160; | ||
+ | my $ypoints_err = 96; | ||
+ | my $rrd = '/ | ||
+ | my $rrd_virus = '/ | ||
+ | my $tmp_dir = '/ | ||
+ | |||
+ | my @graphs = ( | ||
+ | { title => ' | ||
+ | { title => ' | ||
+ | { title => ' | ||
+ | { title => ' | ||
+ | ); | ||
+ | |||
+ | my %color = ( | ||
+ | sent => ' | ||
+ | received => ' | ||
+ | rejected => ' | ||
+ | bounced | ||
+ | virus | ||
+ | spam => ' | ||
+ | ); | ||
+ | |||
+ | sub rrd_graph(@) | ||
+ | { | ||
+ | my ($range, $file, $ypoints, @rrdargs) = @_; | ||
+ | my $step = $range*$points_per_sample/ | ||
+ | # choose carefully the end otherwise rrd will maybe pick the wrong RRA: | ||
+ | my $end = time; $end -= $end % $step; | ||
+ | my $date = localtime(time); | ||
+ | $date =~ s|:|\\:|g unless $RRDs:: | ||
+ | |||
+ | my ($graphret, | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | $RRDs:: | ||
+ | |||
+ | @rrdargs, | ||
+ | |||
+ | ' | ||
+ | ); | ||
+ | |||
+ | my $ERR=RRDs:: | ||
+ | die " | ||
+ | } | ||
+ | |||
+ | sub graph($$) | ||
+ | { | ||
+ | my ($range, $file) = @_; | ||
+ | my $step = $range*$points_per_sample/ | ||
+ | rrd_graph($range, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ); | ||
+ | } | ||
+ | |||
+ | sub graph_err($$) | ||
+ | { | ||
+ | my ($range, $file) = @_; | ||
+ | my $step = $range*$points_per_sample/ | ||
+ | rrd_graph($range, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | ); | ||
+ | } | ||
+ | |||
+ | sub print_html() | ||
+ | { | ||
+ | print " | ||
+ | |||
+ | print << | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | <meta http-equiv=" | ||
+ | < | ||
+ | <meta http-equiv=" | ||
+ | <meta http-equiv=" | ||
+ | <link rel=" | ||
+ | </ | ||
+ | < | ||
+ | HEADER | ||
+ | |||
+ | print "< | ||
+ | |||
+ | print "< | ||
+ | for my $n (0..$# | ||
+ | print " | ||
+ | } | ||
+ | print "</ | ||
+ | |||
+ | for my $n (0..$# | ||
+ | print "< | ||
+ | print "< | ||
+ | print "< | ||
+ | } | ||
+ | |||
+ | print << | ||
+ | <hr/> | ||
+ | < | ||
+ | <a href=" | ||
+ | by <a href=" | ||
+ | <td align=" | ||
+ | <a href=" | ||
+ | </ | ||
+ | </ | ||
+ | FOOTER | ||
+ | } | ||
+ | |||
+ | sub send_image($) | ||
+ | { | ||
+ | my ($file)= @_; | ||
+ | |||
+ | -r $file or do { | ||
+ | print " | ||
+ | exit 1; | ||
+ | }; | ||
+ | |||
+ | print " | ||
+ | print " | ||
+ | print " | ||
+ | open(IMG, $file) or die; | ||
+ | my $data; | ||
+ | print $data while read(IMG, $data, 16384)> | ||
+ | } | ||
+ | |||
+ | sub main() | ||
+ | { | ||
+ | my $uri = $ENV{REQUEST_URI} || ''; | ||
+ | $uri =~ s/ | ||
+ | $uri =~ s/\//,/g; | ||
+ | $uri =~ s/ | ||
+ | mkdir $tmp_dir, 0777 unless -d $tmp_dir; | ||
+ | mkdir " | ||
+ | |||
+ | my $img = $ENV{QUERY_STRING}; | ||
+ | if(defined $img and $img =~ /\S/) { | ||
+ | if($img =~ / | ||
+ | my $file = " | ||
+ | graph($graphs[$1]{seconds}, | ||
+ | send_image($file); | ||
+ | } | ||
+ | elsif($img =~ / | ||
+ | my $file = " | ||
+ | graph_err($graphs[$1]{seconds}, | ||
+ | send_image($file); | ||
+ | } | ||
+ | else { | ||
+ | die " | ||
+ | } | ||
+ | } | ||
+ | else { | ||
+ | print_html; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | main; | ||
+ | </ | ||
+ | |||
+ | ==== Apache VHost anlegen ==== | ||
+ | Damit wir bequem von unserem Browser aus, die aktuellen Graphiken abfragen können, legen wir nun einen passenden VHost an. | ||
+ | # vim / | ||
+ | <file apache / | ||
+ | # | ||
+ | # mail-graph.nausch.org | ||
+ | # | ||
+ | < | ||
+ | ServerAdmin webmaster@nausch.org | ||
+ | ServerName mail-graph.nausch.org | ||
+ | ServerAlias www.mail-graph.nausch.org | ||
+ | ServerPath / | ||
+ | DocumentRoot "/ | ||
+ | AddHandler cgi-script .cgi | ||
+ | |||
+ | < | ||
+ | AllowOverride None | ||
+ | Options +ExecCGI | ||
+ | DirectoryIndex mailgraph.cgi | ||
+ | Order deny,allow | ||
+ | Deny from all | ||
+ | Allow from 127.0.0.1 | ||
+ | Allow from 10.0.0.0/24 | ||
+ | Allow from 10.0.10.0/ | ||
+ | </ | ||
+ | ErrorLog logs/ | ||
+ | CustomLog logs/ | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | Anschließend starten wir unseren Webserver einmal durch, damit er den weiteren VHost auch verwenden kann. | ||
+ | # service postfix restart | ||
+ | |||
+ | httpd beenden: | ||
+ | httpd starten: | ||
+ | |||
+ | ==== Programmaufruf ==== | ||
+ | === manueller Start des Dämon === | ||
+ | Damit das Mail-Logfile forlaufend ausgelesen wird, starten wir nun noch den Dämon mit Hilfe des mitgelieferten Init-Scriptes // | ||
+ | # service mailgraph start | ||
+ | |||
+ | | ||
+ | |||
+ | === automatischer Start des Dämon === | ||
+ | Damit beim Systemstart der mailgraph-Dämon richtig gestartet wird, setzen wir die nötigen symlinks automatisch mit: | ||
+ | # chkconfig mailgraph on | ||
+ | Das Ganze überprüfen wir dann noch mittels | ||
+ | # chkconfig --list | grep mailgraph | ||
+ | |||
+ | | ||
+ | |||
+ | ==== Webaufruf ==== | ||
+ | Über unseren [[https:// | ||
+ | |||
+ | {{ : | ||
+ | ===== queuegraph ===== | ||
+ | Möchte man einen graphischen Überblick über die Queues haben, so greifen wir auf das Programm [[http:// | ||
+ | |||
+ | Das aktuelle Programmpaket **queuegraph** installieren am einfachsten aus dem [[centos: | ||
+ | |||
+ | ==== Installation ==== | ||
+ | Mit Hilfe von **yum** holen wir uns als erstes das benötigte Paket auf unser System. | ||
+ | # yum install queuegraph -y | ||
+ | Den Inhalt des Paketes inspizieren wir bei Bedarf mit folgendem Aufruf. | ||
+ | # rpm -qil queuegraph | ||
+ | |||
+ | < | ||
+ | Version | ||
+ | Release | ||
+ | Install Date: Sat 23 Feb 2013 07:01:56 PM CET Build Host: x86-02.phx2.fedoraproject.org | ||
+ | Group : System Environment/ | ||
+ | Size : 6271 | ||
+ | Signature | ||
+ | Packager | ||
+ | URL : http:// | ||
+ | Summary | ||
+ | Description : | ||
+ | Queuegraph is a very simple mail statistics RRDtool frontend for Postfix that | ||
+ | produces daily, weekly, monthly and yearly graphs of Postfix' | ||
+ | deferred, incoming and bounce queues. | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | ==== Konfiguration ==== | ||
+ | Die Konfiguration von queuegraph selbst gestaltet sich sehr einfach, da es gar nichts großartrig zu konfigurieren gibt! | ||
+ | |||
+ | Will man die Sprache bei der Webseite, oder die Farben anpassen, so nimmt man die Änderungen direkt im CGI-Script vor. | ||
+ | # vim / | ||
+ | <file perl / | ||
+ | |||
+ | # queuegraph -- a postfix queue statistics rrdtool frontend | ||
+ | # based on mailgraph, which is | ||
+ | # copyright (c) 2000-2002 David Schweikert < | ||
+ | # released under the GNU General Public License | ||
+ | |||
+ | use RRDs; | ||
+ | use POSIX qw(uname); | ||
+ | |||
+ | my $VERSION = " | ||
+ | |||
+ | my $host = (POSIX:: | ||
+ | my $scriptname = ' | ||
+ | my $xpoints = 800; | ||
+ | my $points_per_sample = 3; | ||
+ | my $ypoints = 160; | ||
+ | my $ypoints_err = 80; | ||
+ | my $rrd = '/ | ||
+ | my $tmp_dir = '/ | ||
+ | my $rrdtool_1_0 = ($RRDs:: | ||
+ | |||
+ | my @graphs = ( | ||
+ | { title => 'Day Graph', | ||
+ | { title => 'Week Graph', | ||
+ | { title => 'Month Graph', | ||
+ | { title => 'Year Graph', | ||
+ | ); | ||
+ | |||
+ | my %color = ( | ||
+ | sent => ' | ||
+ | received => ' | ||
+ | rejected => ' | ||
+ | bounced | ||
+ | virus | ||
+ | spam => ' | ||
+ | ); | ||
+ | |||
+ | sub graph($$$) | ||
+ | { | ||
+ | my $range = shift; | ||
+ | my $file = shift; | ||
+ | my $title = shift; | ||
+ | my $step = $range*$points_per_sample/ | ||
+ | my $date = localtime(time); | ||
+ | $date =~ s|:|\\:|g unless $rrdtool_1_0; | ||
+ | |||
+ | my ($graphret, | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | | ||
+ | | ||
+ | ), | ||
+ | |||
+ | " | ||
+ | " | ||
+ | |||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | ' | ||
+ | ' | ||
+ | | ||
+ | ); | ||
+ | my $ERR=RRDs:: | ||
+ | die " | ||
+ | } | ||
+ | |||
+ | sub print_html() | ||
+ | { | ||
+ | print " | ||
+ | |||
+ | print << | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | <BODY BGCOLOR="# | ||
+ | HEADER | ||
+ | |||
+ | print "< | ||
+ | for my $n (0..$# | ||
+ | print "< | ||
+ | print "< | ||
+ | } | ||
+ | |||
+ | print << | ||
+ | <table border=" | ||
+ | <A href=" | ||
+ | by <A href=" | ||
+ | based on <A href=" | ||
+ | by <A href=" | ||
+ | <td ALIGN=" | ||
+ | <a HREF=" | ||
+ | </ | ||
+ | </ | ||
+ | FOOTER | ||
+ | } | ||
+ | |||
+ | sub send_image($) | ||
+ | { | ||
+ | my $file = shift; | ||
+ | -r $file or do { | ||
+ | print " | ||
+ | exit 1; | ||
+ | }; | ||
+ | |||
+ | print " | ||
+ | print " | ||
+ | print " | ||
+ | open(IMG, $file) or die; | ||
+ | my $data; | ||
+ | print $data while read IMG, $data, 1; | ||
+ | } | ||
+ | |||
+ | sub main() | ||
+ | { | ||
+ | if($ENV{PATH_INFO}) { | ||
+ | my $uri = $ENV{REQUEST_URI}; | ||
+ | $uri =~ s/ | ||
+ | $uri =~ s/\//,/g; | ||
+ | $uri =~ s/ | ||
+ | mkdir " | ||
+ | my $file = " | ||
+ | if($ENV{PATH_INFO} =~ / | ||
+ | graph($graphs[$1]{seconds}, | ||
+ | } | ||
+ | else { | ||
+ | print " | ||
+ | exit 1; | ||
+ | } | ||
+ | send_image($file); | ||
+ | } | ||
+ | else { | ||
+ | print_html; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | main; | ||
+ | </ | ||
+ | ==== Apache VHost anlegen ==== | ||
+ | Damit wir bequem von unserem Browser aus, die aktuellen Graphiken abfragen können, legen wir nun einen passenden VHost an. | ||
+ | # vim / | ||
+ | <file apache / | ||
+ | # | ||
+ | # queue-graph.nausch.org | ||
+ | # | ||
+ | < | ||
+ | ServerAdmin webmaster@nausch.org | ||
+ | ServerName queue-graph.nausch.org | ||
+ | ServerAlias www.queue-graph.nausch.org | ||
+ | ServerPath / | ||
+ | DocumentRoot "/ | ||
+ | AddHandler cgi-script .cgi | ||
+ | |||
+ | < | ||
+ | AllowOverride None | ||
+ | Options +ExecCGI | ||
+ | DirectoryIndex queuegraph.cgi | ||
+ | Order deny,allow | ||
+ | Deny from all | ||
+ | Allow from 127.0.0.1 | ||
+ | Allow from 10.0.0.0/24 | ||
+ | Allow from 10.0.10.0/ | ||
+ | </ | ||
+ | ErrorLog logs/ | ||
+ | CustomLog logs/ | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | Anschließend starten wir unseren Webserver einmal durch, damit er den weiteren VHost auch verwenden kann. | ||
+ | # service postfix restart | ||
+ | |||
+ | httpd beenden: | ||
+ | httpd starten: | ||
+ | |||
+ | Alternativ dazu können wir natürlich auch die mitgelieferte Apache-Datei // | ||
+ | |||
+ | <file http / | ||
+ | # Queuegraph: An postfix/ | ||
+ | # | ||
+ | Alias / | ||
+ | |||
+ | AddHandler cgi-script .cgi | ||
+ | |||
+ | < | ||
+ | AllowOverride None | ||
+ | Options +ExecCGI | ||
+ | DirectoryIndex queuegraph.cgi | ||
+ | |||
+ | Order Deny,Allow | ||
+ | Deny from all | ||
+ | Allow from 127.0.0.1 | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ==== Programmaufruf ==== | ||
+ | Die automatische Befüllung der **rrd**-files übernimmt ein cronjob, der jede Minute das Script **queuegraph-rrd.sh** startet. | ||
+ | # cat / | ||
+ | |||
+ | <file bash / | ||
+ | # | ||
+ | # This will run every one minute | ||
+ | * * * * * root / | ||
+ | </ | ||
+ | |||
+ | # less / | ||
+ | <file bash / | ||
+ | |||
+ | # output the number of messages in the incoming, active, and deferred | ||
+ | # queues of postfix one per line suitable for use with snmpd/ | ||
+ | # | ||
+ | # 2003/01/24 Mike Saunders <method at method DOT cx> | ||
+ | # mailqsize was originally written by Vivek Khera. | ||
+ | # make it update an rrd. | ||
+ | # 2003/04/14 Ralf Hildebrandt < | ||
+ | # I bundled this with a modified mailgraph | ||
+ | # 2007/07/28 Ralf Hildebrandt < | ||
+ | # find rrdtool using " | ||
+ | |||
+ | # change this to the location of rrdtool | ||
+ | RRDTOOL=`which rrdtool` | ||
+ | |||
+ | # change this to the location you want to store the rrd | ||
+ | RRDFILE=/ | ||
+ | |||
+ | if test ! -x $RRDTOOL ; then | ||
+ | echo " | ||
+ | exit | ||
+ | fi | ||
+ | |||
+ | if test ! -f $RRDFILE ; then | ||
+ | echo " | ||
+ | |||
+ | $RRDTOOL create $RRDFILE --step 60 \ | ||
+ | DS: | ||
+ | DS: | ||
+ | RRA: | ||
+ | RRA: | ||
+ | RRA: | ||
+ | RRA: | ||
+ | RRA: | ||
+ | RRA: | ||
+ | fi | ||
+ | |||
+ | #set -x | ||
+ | qdir=`/ | ||
+ | active=`find $qdir/ | ||
+ | deferred=`find $qdir/ | ||
+ | #printf " | ||
+ | |||
+ | $RRDTOOL update $RRDFILE " | ||
+ | </ | ||
+ | |||
+ | ==== Webaufruf ==== | ||
+ | Über unseren [[https:// | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | ===== greygraph ===== | ||
+ | Möchte man einen graphischen Überblick über das Verhalten rund um unseren Greylisting-Daemon **postgrey** haben, dann greifen wir auf das Programm [[http:// | ||
+ | |||
+ | Das uns hierzu (Stand Februar 2013) noch kein RPM für CentOS 6.x zur Verfügung steht, müssen wir hier ein wenig Hand anlegen. | ||
+ | |||
+ | ==== Download ==== | ||
+ | Als erstes holen wir uns das [[http:// | ||
+ | |||
+ | Hierzu wechseln wir erst einmal in unser lokales Installationsverzeichnis. | ||
+ | # cd / | ||
+ | |||
+ | Dann laden wir uns das Paket herunter. | ||
+ | # wget http:// | ||
+ | |||
+ | |||
+ | ==== Installation ==== | ||
+ | Nun entpacken wir das heruntergeladene **tar.gz**-Archiv. | ||
+ | # tar xfv greygraph_r0.9.4.tar.gz | ||
+ | |||
+ | Als Ergebnis haben wir dann folgendes auf die Platte bekommen. | ||
+ | < | ||
+ | ├── etc | ||
+ | │ ├── default | ||
+ | │ │ └── greygraph | ||
+ | │ └── init.d | ||
+ | │ | ||
+ | ├── README-greygraph | ||
+ | ├── usr | ||
+ | │ ├── lib | ||
+ | │ │ └── cgi-bin | ||
+ | │ │ | ||
+ | │ └── sbin | ||
+ | │ | ||
+ | └── var | ||
+ | ├── cache | ||
+ | │ └── greygraph | ||
+ | ├── lib | ||
+ | │ └── greygraph | ||
+ | └── www | ||
+ | └── css | ||
+ | └── greygraph.css | ||
+ | </ | ||
+ | |||
+ | |||
+ | In der Datei **README-greygraph** finden wir ein paar Informationen, | ||
+ | # less README-greygraph | ||
+ | < | ||
+ | |||
+ | postgrey/ | ||
+ | ================================================= | ||
+ | |||
+ | Die Installation auf Debian/ | ||
+ | |||
+ | mkdir -p / | ||
+ | # Das Verzeichnis / | ||
+ | chgrp www-data / | ||
+ | chmod g+w / | ||
+ | |||
+ | # Evtl. anpassen der Konfiguration | ||
+ | vi / | ||
+ | # evtl anpassen der Pfade im cgi script: | ||
+ | # vi / | ||
+ | |||
+ | # starten der Datensammlung | ||
+ | update-rc.d greygraph defaults | ||
+ | / | ||
+ | |||
+ | mkdir -p / | ||
+ | # das Verzeichnis / | ||
+ | # welche von dem Systemtask in / | ||
+ | |||
+ | # Jetzt muss nur noch der Browser Aufruf erfolgen mit: | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | |||
+ | Fertig! | ||
+ | </ | ||
+ | |||
+ | Wir werden daher nun als erstes die notwendigen Verzeichnissse anlegen, deren Rechte anpassen, Teile des entpackten Archivs an Ort und Stelle verschieben und die noch fehlenden Konfigurationsdateien hinterschieben. | ||
+ | |||
+ | - **Verzeichnisse anlegen und Rechte anpassen**: \\ < | ||
+ | - **vorhandene und nutzbare Dateien kopieren**: \\ < | ||
+ | - **Dateien anpassen**: \\ < | ||
+ | MAIL_LOG=/ | ||
+ | IGNORE_LOCALHOST=false | ||
+ | RRD_DIR=/ | ||
+ | </ | ||
+ | - **Startscript für CentOS anlegen**: \\ Damit der Daemondie relevanten Daten aus dem Maillog in die RRD-Datenbank automatisch schreiben kann, benötigen wir nun noch ein passendes Startscript. Dieses legen wir nun an.< | ||
+ | # | ||
+ | # Startup script for the greygraph service | ||
+ | # | ||
+ | # chkconfig: - 82 28 | ||
+ | # description: | ||
+ | # processname: | ||
+ | # pidfile: / | ||
+ | # config: | ||
+ | ### BEGIN INIT INFO | ||
+ | # Provides: | ||
+ | # Required-Start: | ||
+ | # Should-Start: | ||
+ | # Required-Stop: | ||
+ | # Default-Stop: | ||
+ | # Short-Description: | ||
+ | # Description: | ||
+ | # frontend for Postfix and Sendmail that produces daily, \ | ||
+ | # weekly, monthly and yearly graphs of received/ | ||
+ | # bounced/ | ||
+ | ### END INIT INFO | ||
+ | |||
+ | MAILLOG=/ | ||
+ | PRIORITY=-19 | ||
+ | |||
+ | # Source function library. | ||
+ | . / | ||
+ | |||
+ | if [ -f / | ||
+ | . / | ||
+ | fi | ||
+ | |||
+ | # Path to the greygraph script. | ||
+ | exe=/ | ||
+ | prog=greygraph | ||
+ | RETVAL=0 | ||
+ | |||
+ | start() { | ||
+ | echo -n $" | ||
+ | daemon nice $PRIORITY $exe -l $MAILLOG -d \ | ||
+ | --daemon-pid=/ | ||
+ | --daemon-rrd=/ | ||
+ | |||
+ | RETVAL=$? | ||
+ | echo | ||
+ | [ $RETVAL -eq 0 ] && touch / | ||
+ | return $RETVAL | ||
+ | } | ||
+ | stop() { | ||
+ | echo -n $" | ||
+ | killproc $exe | ||
+ | RETVAL=$? | ||
+ | echo | ||
+ | [ $RETVAL -eq 0 ] && rm -f / | ||
+ | } | ||
+ | reload() { | ||
+ | echo -n $" | ||
+ | killproc $exe -HUP | ||
+ | RETVAL=$? | ||
+ | echo | ||
+ | } | ||
+ | |||
+ | # See how we were called. | ||
+ | case " | ||
+ | start) | ||
+ | start | ||
+ | ;; | ||
+ | stop) | ||
+ | stop | ||
+ | ;; | ||
+ | status) | ||
+ | status $exe | ||
+ | RETVAL=$? | ||
+ | ;; | ||
+ | restart) | ||
+ | stop | ||
+ | start | ||
+ | RETVAL=$? | ||
+ | ;; | ||
+ | condrestart) | ||
+ | if [ -f / | ||
+ | stop | ||
+ | start | ||
+ | RETVAL=$? | ||
+ | fi | ||
+ | ;; | ||
+ | reload) | ||
+ | reload | ||
+ | ;; | ||
+ | *) | ||
+ | echo $" | ||
+ | RETVAL=3 | ||
+ | esac | ||
+ | |||
+ | exit $RETVAL | ||
+ | </ | ||
+ | - **Apache Konfig**: \\ Möchte man später auf die Darstellungsseite nach dem Muster **http:// | ||
+ | # Greygraph: An postfix/ | ||
+ | # | ||
+ | Alias / | ||
+ | |||
+ | AddHandler cgi-script .cgi | ||
+ | |||
+ | < | ||
+ | AllowOverride None | ||
+ | Options +ExecCGI | ||
+ | DirectoryIndex greygraph.cgi | ||
+ | |||
+ | Order Deny,Allow | ||
+ | Deny from all | ||
+ | Allow from 127.0.0.1 | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ==== Apache VHost anlegen ==== | ||
+ | Damit wir bequem von unserem Browser aus, die aktuellen Graphiken abfragen können, legen wir nun einen passenden VHost an. | ||
+ | # vim / | ||
+ | <file apache / | ||
+ | # | ||
+ | # greygraph.nausch.org | ||
+ | # | ||
+ | < | ||
+ | ServerAdmin webmaster@nausch.org | ||
+ | ServerName greygraph.nausch.org | ||
+ | ServerAlias www.greygraph.nausch.org | ||
+ | ServerPath / | ||
+ | DocumentRoot "/ | ||
+ | AddHandler cgi-script .cgi | ||
+ | |||
+ | < | ||
+ | AllowOverride None | ||
+ | Options +ExecCGI | ||
+ | DirectoryIndex greygraph.cgi | ||
+ | Order deny,allow | ||
+ | Deny from all | ||
+ | Allow from 127.0.0.1 | ||
+ | </ | ||
+ | ErrorLog logs/ | ||
+ | CustomLog logs/ | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | Anschließend starten wir unseren Webserver einmal durch, damit er den weiteren VHost auch verwenden kann. | ||
+ | # service postfix restart | ||
+ | |||
+ | httpd beenden: | ||
+ | httpd starten: | ||
+ | |||
+ | ==== Programmaufruf ==== | ||
+ | === manueller Start des Dämon === | ||
+ | Damit das Mail-Logfile forlaufend ausgelesen wird, starten wir nun noch den Dämon mit Hilfe des mitgelieferten Init-Scriptes // | ||
+ | # service mailgraph start | ||
+ | |||
+ | | ||
+ | |||
+ | === automatischer Start des Dämon === | ||
+ | Damit beim Systemstart der mailgraph-Dämon richtig gestartet wird, setzen wir die nötigen symlinks automatisch mit: | ||
+ | # chkconfig greygraph on | ||
+ | Das Ganze überprüfen wir dann noch mittels | ||
+ | # chkconfig --list | grep greygraph | ||
+ | |||
+ | | ||
+ | |||
+ | ==== Webaufruf ==== | ||
+ | Über unseren [[https:// | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | ===== mxgraphs ===== | ||
+ | Im Gegensatz zu den drei vorgenannten graphischen Darstellungen, | ||
+ | |||
+ | ==== Installation ==== | ||
+ | Die Installation gestaltet sich nicht sonderlich schwer, da wir auf die drei vorgenannten Programme [[centos: | ||
+ | |||
+ | Wir werden nun als erstes die notwendigen Verzeichnisse anlegen, deren Rechte anpassen und die benötigen Dateien dort ablegen. | ||
+ | - **Verzeichnisse anlegen und Rechte anpassen**: \\ < | ||
+ | - **Konfigirationsdateien anlegen**: \\ Als erstes legen wir die benötigte **CSS**-Datei an. < | ||
+ | body { width: 900px; background-color: | ||
+ | font-family: | ||
+ | font-size: 12pt; | ||
+ | margin: 5px } | ||
+ | h1 { margin-top: 20px; margin-bottom: | ||
+ | text-align: center } | ||
+ | h2 { background-color: | ||
+ | padding: 2px 0 2px 4px } | ||
+ | hr { height: 1px; | ||
+ | border: 0; | ||
+ | border-top: | ||
+ | table { border: 0px; width: 100% } | ||
+ | img { border: 0 } | ||
+ | a { text-decoration: | ||
+ | a: | ||
+ | #jump { margin: 0 0 10px 4px } | ||
+ | #jump li { list-style: none; display: inline; | ||
+ | | ||
+ | #jump li: | ||
+ | #jump li: | ||
+ | </ | ||
+ | |||
+ | # mxgraphs -- detailed postfix mail traffic statistics | ||
+ | # copyright (c) 2000-2007 ETH Zurich | ||
+ | # copyright (c) 2000-2007 David Schweikert < | ||
+ | # modifed 2011 for grey Markus Neubauer < | ||
+ | # modified 2013 for mxgraphs by Django < | ||
+ | # released under the GNU General Public License | ||
+ | |||
+ | use RRDs; | ||
+ | use POSIX qw(uname); | ||
+ | |||
+ | my $VERSION = " | ||
+ | |||
+ | my $host = (POSIX:: | ||
+ | my $scriptname = ' | ||
+ | my $xpoints = 800; | ||
+ | my $points_per_sample = 3; | ||
+ | my $ypoints = 160; | ||
+ | my $ypoints_err = 160; | ||
+ | my $ypoints_grey = 160; | ||
+ | my $ypoints_greydetail = 160; | ||
+ | my $ypoints_queue = 160; | ||
+ | my $rrd = '/ | ||
+ | my $rrd_virus = '/ | ||
+ | my $rrd_queue = '/ | ||
+ | my $rrd_grey = '/ | ||
+ | my $rrd_spam = '/ | ||
+ | my $tmp_dir = '/ | ||
+ | |||
+ | my @graphs = ( | ||
+ | { title => ' | ||
+ | { title => ' | ||
+ | { title => ' | ||
+ | { title => ' | ||
+ | ); | ||
+ | |||
+ | my %color = ( | ||
+ | sent => ' | ||
+ | received | ||
+ | whitelist | ||
+ | new => ' | ||
+ | early | ||
+ | qspam | ||
+ | awl => ' | ||
+ | reconnectok => ' | ||
+ | rejected | ||
+ | bounced | ||
+ | virus | ||
+ | spam => ' | ||
+ | active | ||
+ | deferred | ||
+ | ); | ||
+ | |||
+ | sub rrd_graph(@) | ||
+ | { | ||
+ | my ($range, $file, $ypoints, @rrdargs) = @_; | ||
+ | my $step = $range*$points_per_sample/ | ||
+ | my $end = time; $end -= $end % $step; | ||
+ | my $date = localtime(time); | ||
+ | $date =~ s|:|\\:|g unless $RRDs:: | ||
+ | |||
+ | my ($graphret, | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | $RRDs:: | ||
+ | |||
+ | @rrdargs, | ||
+ | |||
+ | ' | ||
+ | ); | ||
+ | my $ERR=RRDs:: | ||
+ | die " | ||
+ | } | ||
+ | |||
+ | |||
+ | sub graph($$) | ||
+ | { | ||
+ | my ($range, $file) = @_; | ||
+ | my $step = $range*$points_per_sample/ | ||
+ | rrd_graph($range, | ||
+ | |||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ); | ||
+ | } | ||
+ | |||
+ | |||
+ | sub graph_err($$) | ||
+ | { | ||
+ | my ($range, $file) = @_; | ||
+ | my $step = $range*$points_per_sample/ | ||
+ | rrd_graph($range, | ||
+ | |||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | ); | ||
+ | } | ||
+ | |||
+ | |||
+ | sub graph_queue($$) | ||
+ | { | ||
+ | my ($range, $file) = @_; | ||
+ | my $step = $range*$points_per_sample/ | ||
+ | rrd_graph($range, | ||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ); | ||
+ | } | ||
+ | |||
+ | |||
+ | sub graph_grey($$) | ||
+ | { | ||
+ | my ($range, $file) = @_; | ||
+ | my $step = $range*$points_per_sample/ | ||
+ | rrd_graph($range, | ||
+ | |||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | ); | ||
+ | } | ||
+ | |||
+ | |||
+ | sub graph_greydetail($$) | ||
+ | { | ||
+ | my ($range, $file) = @_; | ||
+ | my $step = $range*$points_per_sample/ | ||
+ | rrd_graph($range, | ||
+ | |||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | ); | ||
+ | } | ||
+ | |||
+ | |||
+ | sub print_html() | ||
+ | { | ||
+ | print " | ||
+ | |||
+ | print << | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | <meta http-equiv=" | ||
+ | < | ||
+ | <meta http-equiv=" | ||
+ | <meta http-equiv=" | ||
+ | <link rel=" | ||
+ | </ | ||
+ | < | ||
+ | HEADER | ||
+ | |||
+ | print "< | ||
+ | |||
+ | print "< | ||
+ | for my $n (0..$# | ||
+ | print " | ||
+ | } | ||
+ | print "</ | ||
+ | |||
+ | for my $n (0..$# | ||
+ | print "< | ||
+ | print "< | ||
+ | print "< | ||
+ | print "< | ||
+ | print "< | ||
+ | print "< | ||
+ | } | ||
+ | |||
+ | print << | ||
+ | < | ||
+ | <table border=" | ||
+ | < | ||
+ | <col width=" | ||
+ | <col width=" | ||
+ | <col width=" | ||
+ | </ | ||
+ | < | ||
+ | <td class=" | ||
+ | <a href=" | ||
+ | <a href=" | ||
+ | </td> | ||
+ | <td> | ||
+ | <a href=" | ||
+ | </td> | ||
+ | <td class=" | ||
+ | <a href=" | ||
+ | </td> | ||
+ | </ | ||
+ | < | ||
+ | <td class=" | ||
+ | </td> | ||
+ | <td class=" | ||
+ | <a href=" | ||
+ | <a href=" | ||
+ | </td> | ||
+ | </ | ||
+ | < | ||
+ | <td class=" | ||
+ | </td> | ||
+ | <td class=" | ||
+ | <a href=" | ||
+ | </td> | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | FOOTER | ||
+ | } | ||
+ | |||
+ | sub send_image($) | ||
+ | { | ||
+ | my ($file)= @_; | ||
+ | |||
+ | -r $file or do { | ||
+ | print " | ||
+ | exit 1; | ||
+ | }; | ||
+ | |||
+ | print " | ||
+ | print " | ||
+ | print " | ||
+ | open(IMG, $file) or die; | ||
+ | my $data; | ||
+ | print $data while read(IMG, $data, 16384)> | ||
+ | } | ||
+ | |||
+ | sub main() | ||
+ | { | ||
+ | my $uri = $ENV{REQUEST_URI} || ''; | ||
+ | $uri =~ s/ | ||
+ | $uri =~ s/\//,/g; | ||
+ | $uri =~ s/ | ||
+ | mkdir $tmp_dir, 0777 unless -d $tmp_dir; | ||
+ | mkdir " | ||
+ | |||
+ | my $img = $ENV{QUERY_STRING}; | ||
+ | if(defined $img and $img =~ /\S/) { | ||
+ | if($img =~ / | ||
+ | my $file = " | ||
+ | graph($graphs[$1]{seconds}, | ||
+ | send_image($file); | ||
+ | } | ||
+ | elsif($img =~ / | ||
+ | my $file = " | ||
+ | graph_err($graphs[$1]{seconds}, | ||
+ | send_image($file); | ||
+ | } | ||
+ | elsif($img =~ / | ||
+ | my $file = " | ||
+ | graph_grey($graphs[$1]{seconds}, | ||
+ | send_image($file); | ||
+ | } | ||
+ | elsif($img =~ / | ||
+ | my $file = " | ||
+ | graph_greydetail($graphs[$1]{seconds}, | ||
+ | send_image($file); | ||
+ | } | ||
+ | elsif($img =~ / | ||
+ | my $file = " | ||
+ | graph_queue($graphs[$1]{seconds}, | ||
+ | send_image($file); | ||
+ | } | ||
+ | else { | ||
+ | die " | ||
+ | } | ||
+ | } | ||
+ | else { | ||
+ | print_html; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | main; | ||
+ | |||
+ | </ | ||
+ | - **Apache Konfig**: \\ Möchte man später auf die Darstellungsseite nach dem Muster **http:// | ||
+ | # MX-Graph: An postfix/ | ||
+ | # | ||
+ | Alias / | ||
+ | |||
+ | AddHandler cgi-script .cgi | ||
+ | |||
+ | < | ||
+ | AllowOverride None | ||
+ | Options +ExecCGI | ||
+ | DirectoryIndex mxgraphs.cgi | ||
+ | |||
+ | Order Deny,Allow | ||
+ | Deny from all | ||
+ | Allow from 127.0.0.1 | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ==== Apache VHost anlegen ==== | ||
+ | Damit wir bequem von unserem Browser aus, die aktuellen Graphiken abfragen können, legen wir nun einen passenden VHost an. | ||
+ | # vim / | ||
+ | <file apache / | ||
+ | # mxgraphs.nausch.org | ||
+ | # | ||
+ | < | ||
+ | ServerAdmin webmaster@nausch.org | ||
+ | ServerName mxgraphs.nausch.org | ||
+ | ServerAlias www.mxgraphs.nausch.org | ||
+ | ServerPath / | ||
+ | DocumentRoot "/ | ||
+ | AddHandler cgi-script .cgi | ||
+ | |||
+ | < | ||
+ | AllowOverride None | ||
+ | Options +ExecCGI | ||
+ | DirectoryIndex mxgraphs.cgi | ||
+ | Order deny,allow | ||
+ | Deny from all | ||
+ | Allow from 127.0.0.1 | ||
+ | </ | ||
+ | ErrorLog logs/ | ||
+ | CustomLog logs/ | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | Anschließend starten wir unseren Webserver einmal durch, damit er den weiteren VHost auch verwenden kann. | ||
+ | # service postfix restart | ||
+ | |||
+ | httpd beenden: | ||
+ | httpd starten: | ||
+ | |||
+ | ==== Webaufruf ==== | ||
+ | Über unseren [[https:// | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Eine aktuelle LIVE-Übersicht einer MXGraph-Seite findet man z.B. [[https:// | ||
+ | |||
+ | ===== mxgraphs und DMARC & Co ===== | ||
+ | Hat man bei seinem Mailserver [[centos: | ||
+ | |||
+ | ==== Installation ==== | ||
+ | Für die Einbindung der Übersichtsgraphiken für SPF, DKIM und DMARC benötigen wir das Paket **mailgraph**, | ||
+ | |||
+ | <WRAP round important> | ||
+ | |||
+ | Durch die Erweiterung, | ||
+ | \\ | ||
+ | \\ | ||
+ | Das hat zur Folge, dass ggf. vorhandenen Statistikdaten der **Letzten 31 Tage** und **Letzten 12 Monate** verloren gehen und die Daten vom Start des geänderten Daemon neu angelegt und angezeigt werden! | ||
+ | </ | ||
+ | |||
+ | Bevor wir jedoch die Änderungen an unserer Konfiguration durchführen, | ||
+ | # service mailgraph stop | ||
+ | |||
+ | | ||
+ | |||
+ | ==== Patchen von mailgraph ==== | ||
+ | Zum Anlegen der Statistikdaten müssen wir nun das Perl-Script aus dem Paket **mailgraph** erweitern. Hierzu verwenden wir den folgenden Patch **mailgraph-1.14-8_mxgraphs_patch**. | ||
+ | |||
+ | <file perl mailgraph-1.14-8_mxgraphs_patch> | ||
+ | +++ mailgraph | ||
+ | @@ -4,6 +4,7 @@ | ||
+ | # copyright (c) 2000-2007 ETH Zurich | ||
+ | # copyright (c) 2000-2007 David Schweikert < | ||
+ | # released under the GNU General Public License | ||
+ | +# with dkim-, dmarc, spf-patch Sebastian van de Meer < | ||
+ | |||
+ | ######## | ||
+ | | ||
+ | @@ -381,7 +382,7 @@ | ||
+ | my $rrd_virus = " | ||
+ | my $year; | ||
+ | my $this_minute; | ||
+ | -my %sum = ( sent => 0, received => 0, bounced => 0, rejected => 0, virus => 0, spam => 0 ); | ||
+ | +my %sum = ( sent => 0, received => 0, bounced => 0, rejected => 0, spfnone => 0, spffail => 0, spfpass => 0, dmarcnone => 0, dmarcfail => 0, dmarcpass => 0, dkimnone => 0, dkimfail => 0, dkimpass => 0, virus => 0, spam => 0, greylisted => 0, delayed => 0); | ||
+ | my $rrd_inited=0; | ||
+ | |||
+ | my %opt = (); | ||
+ | @@ -395,6 +396,15 @@ | ||
+ | sub event_rejected($); | ||
+ | sub event_virus($); | ||
+ | sub event_spam($); | ||
+ | +sub event_spfnone($); | ||
+ | +sub event_spffail($); | ||
+ | +sub event_spfpass($); | ||
+ | +sub event_dmarcnone($); | ||
+ | +sub event_dmarcfail($); | ||
+ | +sub event_dmarcpass($); | ||
+ | +sub event_dkimnone($); | ||
+ | +sub event_dkimfail($); | ||
+ | +sub event_dkimpass($); | ||
+ | sub init_rrd($); | ||
+ | sub update($); | ||
+ | |||
+ | @@ -528,6 +538,15 @@ | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | + ' | ||
+ | + ' | ||
+ | + ' | ||
+ | + ' | ||
+ | + ' | ||
+ | + ' | ||
+ | + ' | ||
+ | + ' | ||
+ | + ' | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | @@ -853,6 +872,45 @@ | ||
+ | event($time, | ||
+ | } | ||
+ | } | ||
+ | + elsif ($prog eq ' | ||
+ | + if ($text =~ /SPF pass:/) { | ||
+ | + event($time, | ||
+ | + } | ||
+ | + elsif($text =~ /SPF none:/) { | ||
+ | + event($time, | ||
+ | + } | ||
+ | + | ||
+ | + | ||
+ | + } | ||
+ | +# elsif($text =~ /SPF fail:\b/) { | ||
+ | +# event($time, | ||
+ | +# } | ||
+ | +# elsif($text =~ /SPF softfail: | ||
+ | +# event($time, | ||
+ | +# } | ||
+ | + } | ||
+ | + elsif ($prog eq ' | ||
+ | + if ($text =~ /DKIM verification successful/ | ||
+ | + event($time, | ||
+ | + } | ||
+ | + elsif($text =~ /no signature data/) { | ||
+ | + event($time, | ||
+ | + } | ||
+ | + elsif($text =~ /bad signature data/) { | ||
+ | + event($time, | ||
+ | + } | ||
+ | + } | ||
+ | + elsif ($prog eq ' | ||
+ | + if ($text =~ /pass/) { | ||
+ | + event($time, | ||
+ | + } | ||
+ | + elsif($text =~ /none/) { | ||
+ | + event($time, | ||
+ | + } | ||
+ | + elsif($text =~ /fail/) { | ||
+ | + event($time, | ||
+ | + } | ||
+ | + } | ||
+ | } | ||
+ | |||
+ | sub event($$) | ||
+ | @@ -870,13 +928,17 @@ | ||
+ | return 1 if $m == $this_minute; | ||
+ | return 0 if $m < $this_minute; | ||
+ | |||
+ | - print " | ||
+ | - | ||
+ | +# print " | ||
+ | + print " | ||
+ | +# RRDs:: | ||
+ | + | ||
+ | RRDs:: | ||
+ | if($m > $this_minute+$rrdstep) { | ||
+ | for(my $sm=$this_minute+$rrdstep; | ||
+ | - print " | ||
+ | - | ||
+ | +# print " | ||
+ | + print " | ||
+ | +# RRDs:: | ||
+ | + | ||
+ | RRDs:: | ||
+ | } | ||
+ | } | ||
+ | @@ -885,6 +947,15 @@ | ||
+ | $sum{received}=0; | ||
+ | $sum{bounced}=0; | ||
+ | $sum{rejected}=0; | ||
+ | + | ||
+ | + | ||
+ | + | ||
+ | + | ||
+ | + | ||
+ | + | ||
+ | + | ||
+ | + | ||
+ | + | ||
+ | $sum{virus}=0; | ||
+ | $sum{spam}=0; | ||
+ | return 1; | ||
+ | </ | ||
+ | |||
+ | Zunächst kopieren wir die vorhandene Datei **mailgraph** nach // | ||
+ | # cp / | ||
+ | |||
+ | Dann wechseln wir in das Zielverzeichnis. | ||
+ | # cd /tmp | ||
+ | |||
+ | Und laden uns den oben aufgeführten Patch zum Ändern der vorhandenen Datei auf unseren Rechner. | ||
+ | |||
+ | Anschließend wenden wir den Patch mit nachfolgendem Aufruf an. | ||
+ | # patch -p0 < mailgraph-1.14-8_mxgraphs_patch | ||
+ | |||
+ | | ||
+ | |||
+ | Zu guter letzt kopieren wir nun noch das geänderte perl-Script zurück an Ort und Stelle. | ||
+ | # mv mailgraph /usr/sbin/ -f | ||
+ | |||
+ | Nun können wir den Daemon **mailgraph** wieder starten. | ||
+ | # service mailgraph start | ||
+ | |||
+ | Starting mailgraph: | ||
+ | |||
+ | ==== Patchen von mxgraphs.cgi ==== | ||
+ | Damit die zusätzlichen Statistikdaten für die drei Milter **SPF**, **DKIM** und **DMARC** graphisch aufbereitet werden können, müssen wir unser vorhandenes // | ||
+ | Zum Anlegen der Statistikdaten müssen wir nun das Perl-Script aus dem Paket **mailgraph** erweitern. | ||
+ | |||
+ | Hierzu verwenden wir den folgenden Patch **mxgraphs_spf_dkim_dmarc.patch**. | ||
+ | |||
+ | <file perl mxgraphs_spf_dkim_dmarc.patch> | ||
+ | +++ mxgraphs.cgi | ||
+ | @@ -5,12 +5,14 @@ | ||
+ | # copyright (c) 2000-2007 David Schweikert < | ||
+ | # modifed 2011 for grey Markus Neubauer < | ||
+ | # modified 2013 for mxgraphs by Django < | ||
+ | +# modified 2014 for mxgraphs (v2) by Django < | ||
+ | +# patches from Sebastian van de Meer < | ||
+ | # released under the GNU General Public License | ||
+ | |||
+ | use RRDs; | ||
+ | use POSIX qw(uname); | ||
+ | |||
+ | -my $VERSION = " | ||
+ | +my $VERSION = " | ||
+ | |||
+ | my $host = (POSIX:: | ||
+ | my $scriptname = ' | ||
+ | @@ -21,6 +23,9 @@ | ||
+ | my $ypoints_grey = 160; | ||
+ | my $ypoints_greydetail = 160; | ||
+ | my $ypoints_queue = 160; | ||
+ | +my $ypoints_spf = 160; | ||
+ | +my $ypoints_dkim = 160; | ||
+ | +my $ypoints_dmarc = 160; | ||
+ | my $rrd = '/ | ||
+ | my $rrd_virus = '/ | ||
+ | my $rrd_queue = '/ | ||
+ | @@ -39,17 +44,26 @@ | ||
+ | sent => ' | ||
+ | received | ||
+ | whitelist | ||
+ | - | ||
+ | + | ||
+ | early => ' | ||
+ | qspam => ' | ||
+ | awl => ' | ||
+ | - | ||
+ | + | ||
+ | rejected | ||
+ | bounced | ||
+ | virus => ' | ||
+ | spam => ' | ||
+ | active | ||
+ | deferred | ||
+ | + | ||
+ | + | ||
+ | + | ||
+ | + dkimnone | ||
+ | + dkimfail | ||
+ | + | ||
+ | + | ||
+ | + | ||
+ | + | ||
+ | ); | ||
+ | |||
+ | sub rrd_graph(@) | ||
+ | @@ -276,6 +290,128 @@ | ||
+ | } | ||
+ | |||
+ | |||
+ | +sub graph_spf($$) | ||
+ | +{ | ||
+ | + my ($range, $file) = @_; | ||
+ | + my $step = $range*$points_per_sample/ | ||
+ | + | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + ' | ||
+ | + ' | ||
+ | + ' | ||
+ | + | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + ' | ||
+ | + ' | ||
+ | + ' | ||
+ | + | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + ' | ||
+ | + ' | ||
+ | + ' | ||
+ | + ); | ||
+ | +} | ||
+ | + | ||
+ | + | ||
+ | +sub graph_dkim($$) | ||
+ | +{ | ||
+ | + my ($range, $file) = @_; | ||
+ | + my $step = $range*$points_per_sample/ | ||
+ | + | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + ' | ||
+ | + ' | ||
+ | + ' | ||
+ | + | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + ' | ||
+ | + ' | ||
+ | + ' | ||
+ | + | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + ' | ||
+ | + ' | ||
+ | + ' | ||
+ | + ); | ||
+ | +} | ||
+ | + | ||
+ | + | ||
+ | +sub graph_dmarc($$) | ||
+ | +{ | ||
+ | + my ($range, $file) = @_; | ||
+ | + my $step = $range*$points_per_sample/ | ||
+ | + | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + ' | ||
+ | + ' | ||
+ | + ' | ||
+ | + | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + ' | ||
+ | + ' | ||
+ | + ' | ||
+ | + | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + " | ||
+ | + ' | ||
+ | + ' | ||
+ | + ' | ||
+ | + ); | ||
+ | +} | ||
+ | + | ||
+ | sub print_html() | ||
+ | { | ||
+ | print " | ||
+ | @@ -293,7 +429,7 @@ | ||
+ | < | ||
+ | | ||
+ | |||
+ | - print "< | ||
+ | + print "< | ||
+ | |||
+ | print "< | ||
+ | for my $n (0..$# | ||
+ | @@ -308,6 +444,9 @@ | ||
+ | print "< | ||
+ | print "< | ||
+ | print "< | ||
+ | + print "< | ||
+ | + print "< | ||
+ | + print "< | ||
+ | } | ||
+ | |||
+ | print << | ||
+ | @@ -321,10 +460,12 @@ | ||
+ | <tr class=" | ||
+ | < | ||
+ | <a href=" | ||
+ | - <a href=" | ||
+ | + <a href=" | ||
+ | </ | ||
+ | < | ||
+ | <a href=" | ||
+ | + <a href=" | ||
+ | + <a href=" | ||
+ | </ | ||
+ | < | ||
+ | <a href=" | ||
+ | @@ -334,15 +475,9 @@ | ||
+ | < | ||
+ | </ | ||
+ | < | ||
+ | - <a href=" | ||
+ | - <a href=" | ||
+ | - </td> | ||
+ | - </ | ||
+ | - < | ||
+ | - <td class=" | ||
+ | - </td> | ||
+ | - <td class=" | ||
+ | - <a href=" | ||
+ | + <a href=" | ||
+ | + <a href=" | ||
+ | + <a href=" | ||
+ | </ | ||
+ | </tr> | ||
+ | </ | ||
+ | @@ -404,6 +539,21 @@ | ||
+ | | ||
+ | | ||
+ | } | ||
+ | + | ||
+ | + my $file = " | ||
+ | + | ||
+ | + | ||
+ | + } | ||
+ | + elsif($img =~ / | ||
+ | + my $file = " | ||
+ | + graph_dkim($graphs[$1]{seconds}, | ||
+ | + send_image($file); | ||
+ | + } | ||
+ | + | ||
+ | + my $file = " | ||
+ | + | ||
+ | + | ||
+ | + } | ||
+ | else { | ||
+ | die " | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Wie auch schon zuvor bei unserem Daemon, kopieren wir zum Patchen das Perl-Script nach // | ||
+ | # cp / | ||
+ | |||
+ | Dann laden wir den obigen Patch auf unseren Rechner und legen diesen im Verzeichnis // | ||
+ | |||
+ | Anschließend wenden wir den Patch an. | ||
+ | # patch -p0 < mxgraphs_spf_dkim_dmarc.patch | ||
+ | |||
+ | Und kopieren zu guter Letzt das geänderte Script an Ort und Stelle. | ||
+ | # mv / | ||
+ | |||
+ | Alternativ können wir auch nachfolgendes CGI-sript, bei dem der Patch schon angewandt wurde, auf unseren Rechner laden und ins Verzeichnis // | ||
+ | |||
+ | <file perl / | ||
+ | |||
+ | # mxgraphs -- detailed postfix mail traffic statistics | ||
+ | # copyright (c) 2000-2007 ETH Zurich | ||
+ | # copyright (c) 2000-2007 David Schweikert < | ||
+ | # modifed 2011 for grey Markus Neubauer < | ||
+ | # modified 2013 for mxgraphs by Django < | ||
+ | # released under the GNU General Public License | ||
+ | |||
+ | use RRDs; | ||
+ | use POSIX qw(uname); | ||
+ | |||
+ | my $VERSION = " | ||
+ | |||
+ | my $host = (POSIX:: | ||
+ | my $scriptname = ' | ||
+ | my $xpoints = 800; | ||
+ | my $points_per_sample = 3; | ||
+ | my $ypoints = 160; | ||
+ | my $ypoints_err = 160; | ||
+ | my $ypoints_grey = 160; | ||
+ | my $ypoints_greydetail = 160; | ||
+ | my $ypoints_queue = 160; | ||
+ | my $rrd = '/ | ||
+ | my $rrd_virus = '/ | ||
+ | my $rrd_queue = '/ | ||
+ | my $rrd_grey = '/ | ||
+ | my $rrd_spam = '/ | ||
+ | my $tmp_dir = '/ | ||
+ | |||
+ | my @graphs = ( | ||
+ | { title => ' | ||
+ | { title => ' | ||
+ | { title => ' | ||
+ | { title => ' | ||
+ | ); | ||
+ | |||
+ | my %color = ( | ||
+ | sent => ' | ||
+ | received | ||
+ | whitelist | ||
+ | new => ' | ||
+ | early => ' | ||
+ | qspam => ' | ||
+ | awl => ' | ||
+ | reconnectok => ' | ||
+ | rejected | ||
+ | bounced | ||
+ | virus => ' | ||
+ | spam => ' | ||
+ | active | ||
+ | deferred | ||
+ | ); | ||
+ | |||
+ | sub rrd_graph(@) | ||
+ | { | ||
+ | my ($range, $file, $ypoints, @rrdargs) = @_; | ||
+ | my $step = $range*$points_per_sample/ | ||
+ | my $end = time; $end -= $end % $step; | ||
+ | my $date = localtime(time); | ||
+ | $date =~ s|:|\\:|g unless $RRDs:: | ||
+ | |||
+ | my ($graphret, | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | $RRDs:: | ||
+ | |||
+ | @rrdargs, | ||
+ | |||
+ | ' | ||
+ | ); | ||
+ | my $ERR=RRDs:: | ||
+ | die " | ||
+ | } | ||
+ | |||
+ | |||
+ | sub graph($$) | ||
+ | { | ||
+ | my ($range, $file) = @_; | ||
+ | my $step = $range*$points_per_sample/ | ||
+ | rrd_graph($range, | ||
+ | |||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ); | ||
+ | } | ||
+ | |||
+ | |||
+ | sub graph_err($$) | ||
+ | { | ||
+ | my ($range, $file) = @_; | ||
+ | my $step = $range*$points_per_sample/ | ||
+ | rrd_graph($range, | ||
+ | |||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | ); | ||
+ | } | ||
+ | |||
+ | |||
+ | sub graph_queue($$) | ||
+ | { | ||
+ | my ($range, $file) = @_; | ||
+ | my $step = $range*$points_per_sample/ | ||
+ | rrd_graph($range, | ||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ); | ||
+ | } | ||
+ | |||
+ | |||
+ | sub graph_grey($$) | ||
+ | { | ||
+ | my ($range, $file) = @_; | ||
+ | my $step = $range*$points_per_sample/ | ||
+ | rrd_graph($range, | ||
+ | |||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | ); | ||
+ | } | ||
+ | |||
+ | |||
+ | sub graph_greydetail($$) | ||
+ | { | ||
+ | my ($range, $file) = @_; | ||
+ | my $step = $range*$points_per_sample/ | ||
+ | rrd_graph($range, | ||
+ | |||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | ); | ||
+ | } | ||
+ | |||
+ | |||
+ | sub print_html() | ||
+ | { | ||
+ | print " | ||
+ | |||
+ | print << | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | <meta http-equiv=" | ||
+ | < | ||
+ | <meta http-equiv=" | ||
+ | <meta http-equiv=" | ||
+ | <link rel=" | ||
+ | </ | ||
+ | < | ||
+ | HEADER | ||
+ | |||
+ | print "< | ||
+ | |||
+ | print "< | ||
+ | for my $n (0..$# | ||
+ | print " | ||
+ | } | ||
+ | print "</ | ||
+ | |||
+ | for my $n (0..$# | ||
+ | print "< | ||
+ | print "< | ||
+ | print "< | ||
+ | print "< | ||
+ | print "< | ||
+ | print "< | ||
+ | } | ||
+ | |||
+ | print << | ||
+ | < | ||
+ | <table border=" | ||
+ | < | ||
+ | <col width=" | ||
+ | <col width=" | ||
+ | <col width=" | ||
+ | </ | ||
+ | < | ||
+ | <td class=" | ||
+ | <a href=" | ||
+ | <a href=" | ||
+ | </td> | ||
+ | <td> | ||
+ | <a href=" | ||
+ | </td> | ||
+ | <td class=" | ||
+ | <a href=" | ||
+ | </td> | ||
+ | </ | ||
+ | < | ||
+ | <td class=" | ||
+ | </td> | ||
+ | <td class=" | ||
+ | <a href=" | ||
+ | <a href=" | ||
+ | </td> | ||
+ | </ | ||
+ | < | ||
+ | <td class=" | ||
+ | </td> | ||
+ | <td class=" | ||
+ | <a href=" | ||
+ | </td> | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | FOOTER | ||
+ | } | ||
+ | |||
+ | sub send_image($) | ||
+ | { | ||
+ | my ($file)= @_; | ||
+ | |||
+ | -r $file or do { | ||
+ | print " | ||
+ | exit 1; | ||
+ | }; | ||
+ | |||
+ | print " | ||
+ | print " | ||
+ | print " | ||
+ | open(IMG, $file) or die; | ||
+ | my $data; | ||
+ | print $data while read(IMG, $data, 16384)> | ||
+ | } | ||
+ | |||
+ | sub main() | ||
+ | { | ||
+ | my $uri = $ENV{REQUEST_URI} || ''; | ||
+ | $uri =~ s/ | ||
+ | $uri =~ s/\//,/g; | ||
+ | $uri =~ s/ | ||
+ | mkdir $tmp_dir, 0777 unless -d $tmp_dir; | ||
+ | mkdir " | ||
+ | |||
+ | my $img = $ENV{QUERY_STRING}; | ||
+ | if(defined $img and $img =~ /\S/) { | ||
+ | if($img =~ / | ||
+ | my $file = " | ||
+ | graph($graphs[$1]{seconds}, | ||
+ | send_image($file); | ||
+ | } | ||
+ | elsif($img =~ / | ||
+ | my $file = " | ||
+ | graph_err($graphs[$1]{seconds}, | ||
+ | send_image($file); | ||
+ | } | ||
+ | elsif($img =~ / | ||
+ | my $file = " | ||
+ | graph_grey($graphs[$1]{seconds}, | ||
+ | send_image($file); | ||
+ | } | ||
+ | elsif($img =~ / | ||
+ | my $file = " | ||
+ | graph_greydetail($graphs[$1]{seconds}, | ||
+ | send_image($file); | ||
+ | } | ||
+ | elsif($img =~ / | ||
+ | my $file = " | ||
+ | graph_queue($graphs[$1]{seconds}, | ||
+ | send_image($file); | ||
+ | } | ||
+ | else { | ||
+ | die " | ||
+ | } | ||
+ | } | ||
+ | else { | ||
+ | print_html; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | main; | ||
+ | </ | ||
+ | |||
+ | ==== Webaufruf ==== | ||
+ | Über unseren [[https:// | ||
+ | |||
+ | {{ : | ||
+ | ===== 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/ | ||
+ | |||
+ | ==== Installation ==== | ||
+ | Die Grundinstallation von **// | ||
+ | |||
+ | <WRAP round important> | ||
+ | |||
+ | Damit eine erfolgreiche LOG-Datei-Auswertung mit Hilfe von AWStats durchgeführt werden kann, müssen auf die Dateien / | ||
+ | # chmod 644 / | ||
+ | </ | ||
+ | |||
+ | ==== Konfiguration ==== | ||
+ | Zur eigentlichen Logfileauswertung legen wir uns nun eine eigene Konfigurationdatei für // | ||
+ | # cp / | ||
+ | |||
+ | Darin passen wir nun alle Konfigurationsoptionen, | ||
+ | # vim / | ||
+ | <file bash / | ||
+ | # | ||
+ | # Copy this file into awstats.www.mydomain.conf and edit this new config file | ||
+ | # to setup AWStats (See documentation in docs/ directory). | ||
+ | # The config file must be in / | ||
+ | # Unix/Linux) or same directory than awstats.pl (Windows, Mac, Unix/ | ||
+ | # To include an environment variable in any parameter (AWStats will replace | ||
+ | # it with its value when reading it), follow the example: | ||
+ | # Parameter=" | ||
+ | # Note that environment variable AWSTATS_CURRENT_CONFIG is always defined with | ||
+ | # the config value in an AWStats running session and can be used like others. | ||
+ | # | ||
+ | # $Revision: 1.350 $ - $Author: eldy $ - $Date: 2010/09/29 19:16:21 $ | ||
+ | |||
+ | |||
+ | |||
+ | # | ||
+ | # MAIN SETUP SECTION (Required to make AWStats work) | ||
+ | # | ||
+ | |||
+ | # " | ||
+ | # Possible values: A full path, or a relative path from awstats.pl directory. | ||
+ | # Example: "/ | ||
+ | # Example: " | ||
+ | # You can also use tags in this filename if you need a dynamic file name | ||
+ | # depending on date or time (Replacement is made by AWStats at the beginning | ||
+ | # of its execution). This is available tags : | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # use n=24 if you need (1-7, 1=monday) | ||
+ | # | ||
+ | # use n=24 if you need (0-6, 0=monday) | ||
+ | # Use 0 for n if you need current year, month, day, hour... | ||
+ | # Example: "/ | ||
+ | # Example: " | ||
+ | # You can also use a pipe if log file come from a pipe : | ||
+ | # Example: "gzip -d </ | ||
+ | # If there are several log files from load balancing servers : | ||
+ | # Example: "/ | ||
+ | # | ||
+ | # Django : 2012-07-03 | ||
+ | # default: LogFile="/ | ||
+ | LogFile=" | ||
+ | |||
+ | # Enter the log file type you want to analyze. | ||
+ | # Possible values: | ||
+ | # W - For a web log file | ||
+ | # S - For a streaming log file | ||
+ | # M - For a mail log file | ||
+ | # F - For a ftp log file | ||
+ | # Example: W | ||
+ | # Default: W | ||
+ | # | ||
+ | # Django : 2012-07-03 | ||
+ | # default: LogType=W | ||
+ | LogType=M | ||
+ | |||
+ | # Enter here your log format (Must match your web server config. See setup | ||
+ | # instructions in documentation to know how to configure your web server to | ||
+ | # have the required log format). | ||
+ | # Possible values: 1,2,3,4 or " | ||
+ | # 1 - Apache or Lotus Notes/ | ||
+ | # 2 - IIS or ISA format (IIS W3C log format). See FAQ-COM115 For ISA. | ||
+ | # 3 - Webstar native log format. | ||
+ | # 4 - Apache or Squid native common log format (NCSA common/CLF log format) | ||
+ | # With LogFormat=4, | ||
+ | # " | ||
+ | # you must use following keys to define the log format string (See FAQ for | ||
+ | # ftp, mail or exotic web log format examples): | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # will discard records not in SiteDomain nor HostAliases | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # If your log format has some fields not included in this list, use: | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # Examples for Apache combined logs (following two examples are equivalent): | ||
+ | # LogFormat = 1 | ||
+ | # LogFormat = "%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot" | ||
+ | # | ||
+ | # Example for IIS: | ||
+ | # LogFormat = 2 | ||
+ | # | ||
+ | # Django : 2012-07-03 | ||
+ | # default: LogFormat=1 | ||
+ | LogFormat=" | ||
+ | |||
+ | |||
+ | # If your log field' | ||
+ | # This parameter is not used if LogFormat is a predefined value (1,2,3,4) | ||
+ | # Backslash can be used as escape character. | ||
+ | # Example: " " | ||
+ | # Example: " | ||
+ | # Example: " | ||
+ | # Example: "," | ||
+ | # Default: " " | ||
+ | # | ||
+ | LogSeparator=" | ||
+ | |||
+ | |||
+ | # " | ||
+ | # server name, used to reach the web site. | ||
+ | # If you share the same log file for several virtual web servers, this | ||
+ | # parameter is used to tell AWStats to filter record that contains records for | ||
+ | # this virtual host name only (So check that this virtual hostname can be | ||
+ | # found in your log file and use a personalized log format that include the | ||
+ | # %virtualname tag). | ||
+ | # But for multi hosting a better solution is to have one log file for each | ||
+ | # virtual web server. In this case, this parameter is only used to generate | ||
+ | # full URL's links when ShowLinksOnUrl option is set to 1. | ||
+ | # If analyzing mail log, enter here the domain name of mail server. | ||
+ | # Example: " | ||
+ | # Example: " | ||
+ | # Example: " | ||
+ | # Example: " | ||
+ | # | ||
+ | # Django : 2012-07-03 | ||
+ | # default: SiteDomain=" | ||
+ | SiteDomain=" | ||
+ | |||
+ | # Enter here all other possible domain names, addresses or virtual host | ||
+ | # aliases someone can use to access your site. Try to keep only the minimum | ||
+ | # number of possible names/ | ||
+ | # You can repeat the " | ||
+ | # This parameter is used to analyze referer field in log file and to help | ||
+ | # AWStats to know if a referer URL is a local URL of same site or an URL of | ||
+ | # another site. | ||
+ | # Note: Use space between each value. | ||
+ | # Note: You can use regular expression values writing value with REGEX[value]. | ||
+ | # Note: You can also use @/ | ||
+ | # Example: " | ||
+ | # | ||
+ | # Django : 2012-07-03 | ||
+ | # default: HostAliases=" | ||
+ | HostAliases=„localhost 127.0.0.1 REGEX[nausch\.org$] REGEX[www\.nausch\.org$]“ | ||
+ | |||
+ | |||
+ | # If you want to have hosts reported by name instead of ip address, AWStats | ||
+ | # need to make reverse DNS lookups (if not already done in your log file). | ||
+ | # With DNSLookup to 0, all hosts will be reported by their IP addresses and | ||
+ | # not by the full hostname of visitors (except if names are already available | ||
+ | # in log file). | ||
+ | # If you want/need to set DNSLookup to 1, don't forget that this will reduce | ||
+ | # dramatically AWStats update process speed. Do not use on large web sites. | ||
+ | # Note: Reverse DNS lookup is done on IPv4 only (Enable ipv6 plugin for IPv6). | ||
+ | # Note: Result of DNS Lookup can be used to build the Country report. However | ||
+ | # it is highly recommanded to enable the plugin ' | ||
+ | # have an accurate Country report with no need of DNS Lookup. | ||
+ | # Possible values: | ||
+ | # 0 - No DNS Lookup | ||
+ | # 1 - DNS Lookup is fully enabled | ||
+ | # 2 - DNS Lookup is made only from static DNS cache file (if it exists) | ||
+ | # Default: 2 | ||
+ | # | ||
+ | DNSLookup=2 | ||
+ | |||
+ | |||
+ | # When AWStats updates its statistics, it stores results of its analysis in | ||
+ | # files (AWStats database). All those files are written in the directory | ||
+ | # defined by the " | ||
+ | # you want AWStats to save its database and working files into. | ||
+ | # Warning: If you want to be able to use the " | ||
+ | # feature (see later), you need " | ||
+ | # directory (and " | ||
+ | # Example: "/ | ||
+ | # Example: " | ||
+ | # Example: " | ||
+ | # Default: " | ||
+ | # | ||
+ | DirData="/ | ||
+ | |||
+ | |||
+ | # Relative or absolute web URL of your awstats cgi-bin directory. | ||
+ | # This parameter is used only when AWStats is run from command line | ||
+ | # with -output option (to generate links in HTML reported page). | ||
+ | # Example: "/ | ||
+ | # Default: "/ | ||
+ | # | ||
+ | DirCgi="/ | ||
+ | |||
+ | |||
+ | # Relative or absolute web URL of your awstats icon directory. | ||
+ | # If you build static reports ("... -output > outputpath/ | ||
+ | # path of icon directory relative to the output directory ' | ||
+ | # Example: "/ | ||
+ | # Example: " | ||
+ | # Default: "/ | ||
+ | # | ||
+ | DirIcons="/ | ||
+ | |||
+ | |||
+ | # When this parameter is set to 1, AWStats adds a button on report page to | ||
+ | # allow to " | ||
+ | # made from a browser, AWStats is run as a CGI by the web server user defined | ||
+ | # in your web server (user " | ||
+ | # IIS), so the " | ||
+ | # awstatsMMYYYY[.xxx].txt must be writable by this user. Change permissions if | ||
+ | # necessary to " | ||
+ | # Warning: Update process can be long so you might experience "time out" | ||
+ | # browser errors if you don't launch AWStats frequently enough. | ||
+ | # When set to 0, update is only made when AWStats is run from the command | ||
+ | # line interface (or a task scheduler). | ||
+ | # Possible values: 0 or 1 | ||
+ | # Default: 0 | ||
+ | # | ||
+ | # Django : 2012-07-03 | ||
+ | # default: AllowToUpdateStatsFromBrowser=0 | ||
+ | AllowToUpdateStatsFromBrowser=1 | ||
+ | |||
+ | |||
+ | # AWStats saves and sorts its database on a month basis (except if using | ||
+ | # databasebreak option from command line). | ||
+ | # However, if you choose the -month=all from command line or | ||
+ | # value ' | ||
+ | # needs to reload all data for full year (each month), and sort them, | ||
+ | # requiring a large amount of time, memory and CPU. This might be a problem | ||
+ | # for web hosting providers that offer AWStats for large sites, on shared | ||
+ | # servers, to non CPU cautious customers. | ||
+ | # For this reason, the 'full year' is only enabled on Command Line by default. | ||
+ | # You can change this by setting this parameter to 0, 1, 2 or 3. | ||
+ | # Possible values: | ||
+ | # 0 - Never allowed | ||
+ | # 1 - Allowed on CLI only, -Year- value in combo is not visible | ||
+ | # 2 - Allowed on CLI only, -Year- value in combo is visible but not allowed | ||
+ | # 3 - Possible on CLI and CGI | ||
+ | # Default: 2 | ||
+ | # | ||
+ | AllowFullYearView=2 | ||
+ | |||
+ | |||
+ | |||
+ | # | ||
+ | # OPTIONAL SETUP SECTION (Not required but increase AWStats features) | ||
+ | # | ||
+ | |||
+ | # When the update process runs, AWStats can set a lock file in TEMP or TMP | ||
+ | # directory. This lock is to avoid to have 2 update processes running at the | ||
+ | # same time to prevent unknown conflicts problems and avoid DoS attacks when | ||
+ | # AllowToUpdateStatsFromBrowser is set to 1. | ||
+ | # Because, when you use lock file, you can experience sometimes problems in | ||
+ | # lock file not correctly removed (killed process for example requires that | ||
+ | # you remove the file manualy), this option is not enabled by default (Do | ||
+ | # not enable this option with no console server access). | ||
+ | # Change : Effective immediatly | ||
+ | # Possible values: 0 or 1 | ||
+ | # Default: 0 | ||
+ | # | ||
+ | EnableLockForUpdate=1 | ||
+ | |||
+ | |||
+ | # AWStats can do reverse DNS lookups through a static DNS cache file that was | ||
+ | # previously created manually. If no path is given in static DNS cache file | ||
+ | # name, AWStats will search DirData directory. This file is never changed. | ||
+ | # This option is not used if DNSLookup=0. | ||
+ | # Note: DNS cache file format is ' | ||
+ | # or just ' | ||
+ | # Change : Effective for new updates only | ||
+ | # Example: "/ | ||
+ | # Default: " | ||
+ | # | ||
+ | DNSStaticCacheFile=" | ||
+ | |||
+ | |||
+ | # AWStats can do reverse DNS lookups through a DNS cache file that was created | ||
+ | # by a previous run of AWStats. This file is erased and recreated after each | ||
+ | # statistics update process. You don't need to create and/or edit it. | ||
+ | # AWStats will read and save this file in DirData directory. | ||
+ | # This option is used only if DNSLookup=1. | ||
+ | # Note: If a DNSStaticCacheFile is available, AWStats will check for DNS | ||
+ | # lookup in DNSLastUpdateCacheFile after checking into DNSStaticCacheFile. | ||
+ | # Change : Effective for new updates only | ||
+ | # Example: "/ | ||
+ | # Default: " | ||
+ | # | ||
+ | DNSLastUpdateCacheFile=" | ||
+ | |||
+ | |||
+ | # You can specify specific IP addresses that should NOT be looked up in DNS. | ||
+ | # This option is used only if DNSLookup=1. | ||
+ | # Note: Use space between each value. | ||
+ | # Note: You can use regular expression values writing value with REGEX[value]. | ||
+ | # Change : Effective for new updates only | ||
+ | # Example: " | ||
+ | # Default: "" | ||
+ | # | ||
+ | SkipDNSLookupFor="" | ||
+ | |||
+ | |||
+ | # The following two parameters allow you to protect a config file from being | ||
+ | # read by AWStats when called from a browser if web user has not been | ||
+ | # authenticated. Your AWStats program must be in a web protected " | ||
+ | # Apache, you can use .htaccess files to do so. With other web servers, see | ||
+ | # your server setup manual). | ||
+ | # Change : Effective immediatly | ||
+ | # Possible values: 0 or 1 | ||
+ | # Default: 0 | ||
+ | # | ||
+ | # Django : 2012-07-03 | ||
+ | # default: AllowAccessFromWebToAuthenticatedUsersOnly=0 | ||
+ | # | ||
+ | AllowAccessFromWebToAuthenticatedUsersOnly=0 | ||
+ | |||
+ | |||
+ | # This parameter gives the list of all authorized authenticated users to view | ||
+ | # statistics for this domain/ | ||
+ | # AllowAccessFromWebToAuthenticatedUsersOnly is set to 1. | ||
+ | # Change : Effective immediatly | ||
+ | # Example: "user1 user2" | ||
+ | # Example: " | ||
+ | # Default: "" | ||
+ | # | ||
+ | # Django : 2012-07-03 | ||
+ | # default: AllowAccessFromWebToFollowingAuthenticatedUsers="" | ||
+ | # AllowAccessFromWebToFollowingAuthenticatedUsers=" | ||
+ | AllowAccessFromWebToFollowingAuthenticatedUsers="" | ||
+ | |||
+ | |||
+ | # When this parameter is defined to something, the IP address of the user that | ||
+ | # reads its statistics from a browser (when AWStats is used as a CGI) is | ||
+ | # checked and must match one of the IP address values or ranges. | ||
+ | # Change : Effective immediatly | ||
+ | # Example: " | ||
+ | # Default: "" | ||
+ | # | ||
+ | AllowAccessFromWebToFollowingIPAddresses="" | ||
+ | |||
+ | |||
+ | # If the " | ||
+ | # error. However, you can ask AWStats to create it. | ||
+ | # This option can be used by some Web Hosting Providers that has defined a | ||
+ | # dynamic value for DirData (for example DirData="/ | ||
+ | # don't want to have to create a new directory each time they add a new user. | ||
+ | # Change : Effective immediatly | ||
+ | # Possible values: 0 or 1 | ||
+ | # Default: 0 | ||
+ | # | ||
+ | CreateDirDataIfNotExists=0 | ||
+ | |||
+ | |||
+ | # You can choose in which format the Awstats history database is saved. | ||
+ | # Note: Using " | ||
+ | # larger than using " | ||
+ | # Change : Database format is switched after next update | ||
+ | # Possible values: text or xml | ||
+ | # Default: text | ||
+ | # | ||
+ | BuildHistoryFormat=text | ||
+ | |||
+ | |||
+ | # If you prefer having the report output pages be built as XML compliant pages | ||
+ | # instead of simple HTML pages, you can set this to ' | ||
+ | # properly with old browsers). | ||
+ | # Change : Effective immediatly | ||
+ | # Possible values: html or xhtml | ||
+ | # Default: html | ||
+ | # | ||
+ | BuildReportFormat=html | ||
+ | |||
+ | |||
+ | # AWStats databases can be updated from command line of from a browser (when | ||
+ | # used as a cgi program). So AWStats database files need write permission | ||
+ | # for both command line user and default web server user (nobody for Unix, | ||
+ | # IUSR_xxx for IIS/ | ||
+ | # To avoid permission problems between update process (run by an admin user) | ||
+ | # and CGI process (ran by a low level user), AWStats can save its database | ||
+ | # files with read and write permissions for everyone. | ||
+ | # By default, AWStats keeps default user permissions on updated files. If you | ||
+ | # set AllowToUpdateStatsFromBrowser to 1, you can change this parameter to 1. | ||
+ | # Change : Effective for new updates only | ||
+ | # Possible values: 0 or 1 | ||
+ | # Default: 0 | ||
+ | # | ||
+ | # Django : 2012-07-03 | ||
+ | # default: SaveDatabaseFilesWithPermissionsForEveryone=0 | ||
+ | SaveDatabaseFilesWithPermissionsForEveryone=1 | ||
+ | |||
+ | |||
+ | # AWStats can purge log file, after analyzing it. Note that AWStats is able | ||
+ | # to detect new lines in a log file, to process only them, so you can launch | ||
+ | # AWStats as often as you want, even with this parameter to 0. | ||
+ | # With 0, no purge is made, so you must use a scheduled task or a web server | ||
+ | # that make this purge frequently. | ||
+ | # With 1, the purge of the log file is made each time AWStats update is run. | ||
+ | # This parameter doesn' | ||
+ | # file to be purged). | ||
+ | # Change : Effective for new updates only | ||
+ | # Possible values: 0 or 1 | ||
+ | # Default: 0 | ||
+ | # | ||
+ | PurgeLogFile=0 | ||
+ | |||
+ | |||
+ | # When PurgeLogFile is setup to 1, AWStats will clean your log file after | ||
+ | # processing it. You can however keep an archive file of all processed log | ||
+ | # records by setting this parameter (For example if you want to use another | ||
+ | # log analyzer). The archived log file is saved in " | ||
+ | # awstats_archive.configname[.suffix].log | ||
+ | # This parameter is not used if PurgeLogFile=0 | ||
+ | # Change : Effective for new updates only | ||
+ | # Possible values: 0, 1, or tags (See LogFile parameter) for suffix | ||
+ | # Example: 1 | ||
+ | # Example: %YYYY%MM%DD | ||
+ | # Default: 0 | ||
+ | # | ||
+ | ArchiveLogRecords=0 | ||
+ | |||
+ | |||
+ | # Each time you run the update process, AWStats overwrites the ' | ||
+ | # for the month (awstatsMMYYYY[.*].txt) with the updated one. | ||
+ | # When write errors occurs (IO, disk full,...), this historic file can be | ||
+ | # corrupted and must be deleted. Because this file contains information of all | ||
+ | # past processed log files, you will loose old stats if removed. So you can | ||
+ | # ask AWStats to save last non corrupted file in a .bak file. This file is | ||
+ | # stored in " | ||
+ | # Change : Effective for new updates only | ||
+ | # Possible values: 0 or 1 | ||
+ | # Default: 0 | ||
+ | # | ||
+ | KeepBackupOfHistoricFiles=1 | ||
+ | |||
+ | |||
+ | # Default index page name for your web server. | ||
+ | # Change : Effective for new updates only | ||
+ | # Example: " | ||
+ | # Default: " | ||
+ | # | ||
+ | DefaultFile=" | ||
+ | |||
+ | |||
+ | # Do not include access from clients that match following criteria. | ||
+ | # If your log file contains IP addresses in host field, you must enter here | ||
+ | # matching IP addresses criteria. | ||
+ | # If DNS lookup is already done in your log file, you must enter here hostname | ||
+ | # criteria, else enter ip address criteria. | ||
+ | # The opposite parameter of " | ||
+ | # Note: Use space between each value. This parameter is not case sensitive. | ||
+ | # Note: You can use regular expression values writing value with REGEX[value]. | ||
+ | # Change : Effective for new updates only | ||
+ | # Example: " | ||
+ | # Example: " | ||
+ | # Default: "" | ||
+ | # | ||
+ | # Django : 2012-07-03 | ||
+ | # default: SkipHosts=" | ||
+ | SkipHosts="" | ||
+ | |||
+ | # Do not include access from clients with a user agent that match following | ||
+ | # criteria. If you want to exclude a robot, you should update the robots.pm | ||
+ | # file instead of this parameter. | ||
+ | # The opposite parameter of " | ||
+ | # Note: Use space between each value. This parameter is not case sensitive. | ||
+ | # Note: You can use regular expression values writing value with REGEX[value]. | ||
+ | # Change : Effective for new updates only | ||
+ | # Example: " | ||
+ | # Default: "" | ||
+ | # | ||
+ | SkipUserAgents="" | ||
+ | |||
+ | |||
+ | # Use SkipFiles to ignore access to URLs that match one of following entries. | ||
+ | # You can enter a list of not important URLs (like framed menus, hidden pages, | ||
+ | # etc...) to exclude them from statistics. You must enter here exact relative | ||
+ | # URL as found in log file, or a matching REGEX value. Check apply on URL with | ||
+ | # all its query paramaters. | ||
+ | # For example, to ignore / | ||
+ | # pages in a particular directory, add " | ||
+ | # The opposite parameter of " | ||
+ | # Note: Use space between each value. This parameter is or not case sensitive | ||
+ | # depending on URLNotCaseSensitive parameter. | ||
+ | # Note: You can use regular expression values writing value with REGEX[value]. | ||
+ | # Change : Effective for new updates only | ||
+ | # Example: "/ | ||
+ | # Default: "" | ||
+ | # | ||
+ | SkipFiles="" | ||
+ | |||
+ | |||
+ | # Use SkipReferrersBlackList if you want to exclude records coming from a SPAM | ||
+ | # referrer. Parameter must receive a local file name containing rules applied | ||
+ | # on referrer field. If parameter is empty, no filter is applied. | ||
+ | # An example of such a file is available in lib/ | ||
+ | # Change : Effective for new updates only | ||
+ | # Example: "/ | ||
+ | # Default: "" | ||
+ | # | ||
+ | # WARNING!! Using this feature make AWStats running very slower (5 times slower | ||
+ | # with black list file provided with AWStats ! | ||
+ | # | ||
+ | SkipReferrersBlackList="" | ||
+ | |||
+ | |||
+ | # Include in stats, only accesses from hosts that match one of following | ||
+ | # entries. For example, if you want AWStats to filter access to keep only | ||
+ | # stats for visits from particular hosts, you can add those host names in | ||
+ | # this parameter. | ||
+ | # If DNS lookup is already done in your log file, you must enter here hostname | ||
+ | # criteria, else enter ip address criteria. | ||
+ | # The opposite parameter of " | ||
+ | # Note: Use space between each value. This parameter is not case sensitive. | ||
+ | # Note: You can use regular expression values writing value with REGEX[value]. | ||
+ | # Change : Effective for new updates only | ||
+ | # Example: " | ||
+ | # Default: "" | ||
+ | # | ||
+ | OnlyHosts="" | ||
+ | |||
+ | |||
+ | # Include in stats, only accesses from user agent that match one of following | ||
+ | # entries. For example, if you want AWStats to filter access to keep only | ||
+ | # stats for visits from particular browsers, you can add their user agents | ||
+ | # string in this parameter. | ||
+ | # The opposite parameter of " | ||
+ | # Note: Use space between each value. This parameter is not case sensitive. | ||
+ | # Note: You can use regular expression values writing value with REGEX[value]. | ||
+ | # Change : Effective for new updates only | ||
+ | # Example: " | ||
+ | # Default: "" | ||
+ | # | ||
+ | OnlyUserAgents="" | ||
+ | |||
+ | |||
+ | # Include in stats, only accesses from authenticated users that match one of | ||
+ | # following entries. For example, if you want AWStats to filter access to keep | ||
+ | # only stats for authenticated users, you can add those users names in | ||
+ | # this parameter. Useful for statistics for per user ftp logs. | ||
+ | # Note: Use space between each value. This parameter is not case sensitive. | ||
+ | # Note: You can use regular expression values writing value with REGEX[value]. | ||
+ | # Change : Effective for new updates only | ||
+ | # Example: "john bob REGEX[^testusers]" | ||
+ | # Default: "" | ||
+ | # | ||
+ | OnlyUsers="" | ||
+ | |||
+ | |||
+ | # Include in stats, only accesses to URLs that match one of following entries. | ||
+ | # For example, if you want AWStats to filter access to keep only stats that | ||
+ | # match a particular string, like a particular directory, you can add this | ||
+ | # directory name in this parameter. | ||
+ | # The opposite parameter of " | ||
+ | # Note: Use space between each value. This parameter is or not case sensitive | ||
+ | # depending on URLNotCaseSensitive parameter. | ||
+ | # Note: You can use regular expression values writing value with REGEX[value]. | ||
+ | # Change : Effective for new updates only | ||
+ | # Example: " | ||
+ | # Default: "" | ||
+ | # | ||
+ | OnlyFiles="" | ||
+ | |||
+ | |||
+ | # Add here a list of kind of url (file extension) that must be counted as | ||
+ | # "Hit only" and not as a " | ||
+ | # image extensions as they are hit downloaded that must be counted but they | ||
+ | # are not viewed pages. URLs with such extensions are not included in the TOP | ||
+ | # Pages/URL report. | ||
+ | # Note: If you want to exclude particular URLs from stats (No Pages and no | ||
+ | # Hits reported), you must use SkipFiles parameter. | ||
+ | # Change : Effective for new updates only | ||
+ | # Example: "css js class gif jpg jpeg png bmp ico rss xml swf zip arj rar gz z bz2 wav mp3 wma mpg avi" | ||
+ | # Example: "" | ||
+ | # Default: "css js class gif jpg jpeg png bmp ico rss xml swf" | ||
+ | # | ||
+ | NotPageList=" | ||
+ | |||
+ | |||
+ | # By default, AWStats considers that records found in web log file are | ||
+ | # successful hits if HTTP code returned by server is a valid HTTP code (200 | ||
+ | # and 304). Any other code are reported in HTTP status chart. | ||
+ | # Note that HTTP ' | ||
+ | # default in this list as they are not pages seen by a visitor but are | ||
+ | # protocol exchange codes to tell the browser to ask another page. Because | ||
+ | # this other page will be counted and seen with a 200 or 304 code, if you | ||
+ | # add such codes, you will have 2 pages viewed reported for only one in facts. | ||
+ | # Change : Effective for new updates only | ||
+ | # Example: "200 304 302 305" | ||
+ | # Default: "200 304" | ||
+ | # | ||
+ | ValidHTTPCodes=" | ||
+ | |||
+ | |||
+ | # By default, AWStats considers that records found in mail log file are | ||
+ | # successful mail transfers if field that represent return code in analyzed | ||
+ | # log file match values defined by this parameter. | ||
+ | # Change : Effective for new updates only | ||
+ | # Example: "1 250 200" | ||
+ | # Default: "1 250" | ||
+ | # | ||
+ | ValidSMTPCodes=" | ||
+ | |||
+ | |||
+ | # Some web servers on some Operating systems (IIS-Windows) consider that a | ||
+ | # login with same value but different case are the same login. To tell AWStats | ||
+ | # to also consider them as one, set this parameter to 1. | ||
+ | # Change : Effective for new updates only | ||
+ | # Possible values: 0 or 1 | ||
+ | # Default: 0 | ||
+ | # | ||
+ | AuthenticatedUsersNotCaseSensitive=0 | ||
+ | |||
+ | |||
+ | # Some web servers on some Operating systems (IIS-Windows) considers that two | ||
+ | # URLs with same value but different case are the same URL. To tell AWStats to | ||
+ | # also considers them as one, set this parameter to 1. | ||
+ | # Change : Effective for new updates only | ||
+ | # Possible values: 0 or 1 | ||
+ | # Default: 0 | ||
+ | # | ||
+ | URLNotCaseSensitive=0 | ||
+ | |||
+ | |||
+ | # Keep or remove the anchor string you can find in some URLs. | ||
+ | # Change : Effective for new updates only | ||
+ | # Possible values: 0 or 1 | ||
+ | # Default: 0 | ||
+ | # | ||
+ | URLWithAnchor=0 | ||
+ | |||
+ | |||
+ | # In URL links, "?" | ||
+ | # / | ||
+ | # However, some servers/ | ||
+ | # their URLs. You can complete this list with all such characters. | ||
+ | # Change : Effective for new updates only | ||
+ | # Example: "?;," | ||
+ | # Default: "?;" | ||
+ | # | ||
+ | URLQuerySeparators="?;" | ||
+ | |||
+ | |||
+ | # Keep or remove the query string to the URL in the statistics for individual | ||
+ | # pages. This is primarily used to differentiate between the URLs of dynamic | ||
+ | # pages. If set to 1, mypage.html? | ||
+ | # different pages. | ||
+ | # Warning, when set to 1, memory required to run AWStats is dramatically | ||
+ | # increased if you have a lot of changing URLs (for example URLs with a random | ||
+ | # id inside). Such web sites should not set this option to 1 or use seriously | ||
+ | # the next parameter URLWithQueryWithOnlyFollowingParameters (or eventually | ||
+ | # URLWithQueryWithoutFollowingParameters). | ||
+ | # Change : Effective for new updates only | ||
+ | # Possible values: | ||
+ | # 0 - URLs are cleaned from the query string (ie: "/ | ||
+ | # 1 - Full URL with query string is used (ie: "/ | ||
+ | # Default: 0 | ||
+ | # | ||
+ | URLWithQuery=0 | ||
+ | |||
+ | |||
+ | # When URLWithQuery is on, you will get the full URL with all parameters in | ||
+ | # URL reports. But among thoose parameters, sometimes you don't need a | ||
+ | # particular parameter because it does not identify the page or because it's | ||
+ | # a random ID changing for each access even if URL points to same page. In | ||
+ | # such cases, it is higly recommanded to ask AWStats to keep only parameters | ||
+ | # you need (if you know them) before counting, manipulating and storing URL. | ||
+ | # Enter here list of wanted parameters. For example, with " | ||
+ | # / | ||
+ | # will be reported as 2 hits on / | ||
+ | # This parameter is not used when URLWithQuery is 0 and can't be used with | ||
+ | # URLWithQueryWithoutFollowingParameters. | ||
+ | # Change : Effective for new updates only | ||
+ | # Example: " | ||
+ | # Default: "" | ||
+ | # | ||
+ | URLWithQueryWithOnlyFollowingParameters="" | ||
+ | |||
+ | |||
+ | # When URLWithQuery is on, you will get the full URL with all parameters in | ||
+ | # URL reports. But among thoose parameters, sometimes you don't need a | ||
+ | # particular parameter because it does not identify the page or because it's | ||
+ | # a random ID changing for each access even if URL points to same page. In | ||
+ | # such cases, it is higly recommanded to ask AWStats to remove such parameters | ||
+ | # from the URL before counting, manipulating and storing URL. Enter here list | ||
+ | # of all non wanted parameters. For example if you enter " | ||
+ | # / | ||
+ | # will be reported as 2 hits on / | ||
+ | # This parameter is not used when URLWithQuery is 0 and can't be used with | ||
+ | # URLWithQueryWithOnlyFollowingParameters. | ||
+ | # Change : Effective for new updates only | ||
+ | # Example: " | ||
+ | # Default: "" | ||
+ | # | ||
+ | URLWithQueryWithoutFollowingParameters="" | ||
+ | |||
+ | |||
+ | # Keep or remove the query string to the referrer URL in the statistics for | ||
+ | # external referrer pages. This is used to differentiate between the URLs of | ||
+ | # dynamic referrer pages. If set to 1, mypage.html? | ||
+ | # are counted as two different referrer pages. | ||
+ | # Change : Effective for new updates only | ||
+ | # Possible values: | ||
+ | # 0 - Referrer URLs are cleaned from the query string (ie: "/ | ||
+ | # 1 - Full URL with query string is used (ie: "/ | ||
+ | # Default: 0 | ||
+ | # | ||
+ | URLReferrerWithQuery=0 | ||
+ | |||
+ | |||
+ | # AWStats can detect setup problems or show you important informations to have | ||
+ | # a better use. Keep this to 1, except if AWStats says you can change it. | ||
+ | # Change : Effective immediatly | ||
+ | # Possible values: 0 or 1 | ||
+ | # Default: 1 | ||
+ | # | ||
+ | WarningMessages=1 | ||
+ | |||
+ | |||
+ | # When an error occurs, AWStats outputs a message related to errors. If you | ||
+ | # want (in most cases for security reasons) to have no error messages, you | ||
+ | # can set this parameter to your personalized generic message. | ||
+ | # Change : Effective immediatly | ||
+ | # Example: "An error occurred. Contact your Administrator" | ||
+ | # Default: "" | ||
+ | # | ||
+ | ErrorMessages="" | ||
+ | |||
+ | |||
+ | # AWStat can be run with debug=x parameter to output various informations | ||
+ | # to help in debugging or solving troubles. If you want to allow this (not | ||
+ | # enabled by default for security reasons), set this parameter to 0. | ||
+ | # Change : Effective immediatly | ||
+ | # Possible values: 0 or 1 | ||
+ | # Default: 0 | ||
+ | # | ||
+ | DebugMessages=0 | ||
+ | |||
+ | |||
+ | # To help you to detect if your log format is good, AWStats reports an error | ||
+ | # if all the first NbOfLinesForCorruptedLog lines have a format that does not | ||
+ | # match the LogFormat parameter. | ||
+ | # However, some worm virus attack on your web server can result in a very high | ||
+ | # number of corrupted lines in your log. So if you experience awstats stop | ||
+ | # because of bad virus records at the beginning of your log file, you can | ||
+ | # increase this parameter (very rare). | ||
+ | # Change : Effective for new updates only | ||
+ | # Default: 50 | ||
+ | # | ||
+ | NbOfLinesForCorruptedLog=50 | ||
+ | |||
+ | |||
+ | # For some particular integration needs, you may want to have CGI links to | ||
+ | # point to another script than awstats.pl. | ||
+ | # Use the name of this script in WrapperScript parameter. | ||
+ | # Change : Effective immediatly | ||
+ | # Example: " | ||
+ | # Example: " | ||
+ | # Default: "" | ||
+ | # | ||
+ | WrapperScript="" | ||
+ | |||
+ | |||
+ | # DecodeUA must be set to 1 if you use Roxen web server. This server converts | ||
+ | # all spaces in user agent field into %20. This make the AWStats robots, OS | ||
+ | # and browsers detection fail in some cases. Just change it to 1 if and only | ||
+ | # if your web server is Roxen. | ||
+ | # Change : Effective for new updates only | ||
+ | # Possible values: 0 or 1 | ||
+ | # Default: 0 | ||
+ | # | ||
+ | DecodeUA=0 | ||
+ | |||
+ | |||
+ | # MiscTrackerUrl can be used to make AWStats able to detect some miscellaneous | ||
+ | # things, that can not be tracked on other way, like: | ||
+ | # - Javascript disabled | ||
+ | # - Java enabled | ||
+ | # - Screen size | ||
+ | # - Color depth | ||
+ | # - Macromedia Director plugin | ||
+ | # - Macromedia Shockwave plugin | ||
+ | # - Realplayer G2 plugin | ||
+ | # - QuickTime plugin | ||
+ | # - Mediaplayer plugin | ||
+ | # - Acrobat PDF plugin | ||
+ | # To enable all these features, you must copy the awstats_misc_tracker.js file | ||
+ | # into a /js/ directory stored in your web document root and add the following | ||
+ | # HTML code at the end of your index page (but before </ | ||
+ | # | ||
+ | # <script type=" | ||
+ | # < | ||
+ | # | ||
+ | # If code is not added in index page, all those detection capabilities will be | ||
+ | # disabled. You must also check that ShowScreenSizeStats and ShowMiscStats | ||
+ | # parameters are set to 1 to make results appear in AWStats report page. | ||
+ | # If you want to use another directory than /js/, you must also change the | ||
+ | # awstatsmisctrackerurl variable into the awstats_misc_tracker.js file. | ||
+ | # Change : Effective for new updates only. | ||
+ | # Possible value: URL of javascript tracker file added in your HTML code. | ||
+ | # Default: "/ | ||
+ | # | ||
+ | MiscTrackerUrl="/ | ||
+ | |||
+ | |||
+ | |||
+ | # | ||
+ | # OPTIONAL ACCURACY SETUP SECTION (Not required but increase AWStats features) | ||
+ | # | ||
+ | |||
+ | # The following values allow you to define accuracy of AWStats entities | ||
+ | # (robots, browsers, os, referers, file types) detection. | ||
+ | # It might be a good idea for large web sites or ISP that provides AWStats to | ||
+ | # high number of customers, to set this parameter to 1 (or 0), instead of 2. | ||
+ | # Possible values: | ||
+ | # 0 = No detection, | ||
+ | # 1 = Medium/ | ||
+ | # 2 = Full detection | ||
+ | # Change : Effective for new updates only | ||
+ | # Note : LevelForBrowsersDetection can also accept value " | ||
+ | # enable detailed detection of phone/pda browsers. | ||
+ | # Default: 2 (0 for LevelForWormsDetection) | ||
+ | # | ||
+ | # Django : 2012-07-03 | ||
+ | # default: LevelForBrowsersDetection=2 | ||
+ | LevelForBrowsersDetection=0 | ||
+ | # 2 reduces AWStats speed by 2% | ||
+ | # allphones reduces AWStats speed by 5% | ||
+ | # Django : 2012-07-03 | ||
+ | # default: LevelForOSDetection=2 | ||
+ | LevelForOSDetection=0 | ||
+ | # 2 reduces AWStats speed by 3% | ||
+ | # Django : 2012-07-03 | ||
+ | # default: LevelForRefererAnalyze=2 | ||
+ | LevelForRefererAnalyze=0 | ||
+ | # 2 reduces AWStats speed by 14% | ||
+ | # Django : 2012-07-03 | ||
+ | # default: LevelForRobotsDetection=2 | ||
+ | LevelForRobotsDetection=0 | ||
+ | # 2 reduces AWStats speed by 2.5% | ||
+ | # Django : 2012-07-03 | ||
+ | # default: LevelForSearchEnginesDetection=2 | ||
+ | LevelForSearchEnginesDetection=0 | ||
+ | # 2 reduces AWStats speed by 9% | ||
+ | # Django : 2012-07-03 | ||
+ | # default: LevelForKeywordsDetection=2 | ||
+ | LevelForKeywordsDetection=0 | ||
+ | # 2 reduces AWStats speed by 1% | ||
+ | # Django : 2012-07-03 | ||
+ | # default: LevelForFileTypesDetection=2 | ||
+ | LevelForFileTypesDetection=0 | ||
+ | # 2 reduces AWStats speed by 1% | ||
+ | LevelForWormsDetection=0 | ||
+ | # 2 reduces AWStats speed by 15% | ||
+ | |||
+ | |||
+ | |||
+ | # | ||
+ | # OPTIONAL APPEARANCE SETUP SECTION (Not required but increase AWStats features) | ||
+ | # | ||
+ | |||
+ | # When you use AWStats as a CGI, you can have the reports shown in HTML frames. | ||
+ | # Frames are only available for report viewed dynamically. When you build | ||
+ | # pages from command line, this option is not used and no frames are built. | ||
+ | # Possible values: 0 or 1 | ||
+ | # Default: 1 | ||
+ | # | ||
+ | UseFramesWhenCGI=1 | ||
+ | |||
+ | |||
+ | # This parameter asks your browser to open detailed reports into a different | ||
+ | # window than the main page. | ||
+ | # Possible values: | ||
+ | # 0 - Open all in same browser window | ||
+ | # 1 - Open detailed reports in another window except if using frames | ||
+ | # 2 - Open always in a different window even if reports are framed | ||
+ | # Default: 1 | ||
+ | # | ||
+ | DetailedReportsOnNewWindows=1 | ||
+ | |||
+ | |||
+ | # You can add, in the HTML report page, a cache lifetime (in seconds) that | ||
+ | # will be returned to the browser in HTTP header answer by server. | ||
+ | # This parameter is not used when reports are built with -staticlinks option. | ||
+ | # Example: 3600 | ||
+ | # Default: 0 | ||
+ | # | ||
+ | # Django : 2012-07-03 | ||
+ | # default: Expires=3600 | ||
+ | Expires=0 | ||
+ | |||
+ | |||
+ | # To avoid too large web pages, you can ask AWStats to limit number of rows of | ||
+ | # all reported charts to this number when no other limits apply. | ||
+ | # Default: 1000 | ||
+ | # | ||
+ | MaxRowsInHTMLOutput=1000 | ||
+ | |||
+ | |||
+ | # Set your primary language (ISO-639-1 language codes). | ||
+ | # Possible values: | ||
+ | # Albanian=al, | ||
+ | # Chinese (Taiwan)=tw, | ||
+ | # Danish=dk, Dutch=nl, English=en, Estonian=et, | ||
+ | # French=fr, Galician=gl, | ||
+ | # Icelandic=is, | ||
+ | # Latvian=lv, Norwegian (Nynorsk)=nn, | ||
+ | # Portuguese=pt, | ||
+ | # Serbian=sr, Slovak=sk, Slovenian=si, | ||
+ | # Ukrainian=ua, | ||
+ | # First available language accepted by browser=auto | ||
+ | # Default: " | ||
+ | # | ||
+ | # Django : 2012-07-03 | ||
+ | # default: Lang=" | ||
+ | Lang=" | ||
+ | |||
+ | |||
+ | # Set the location of language files. | ||
+ | # Example: "/ | ||
+ | # Default: " | ||
+ | # | ||
+ | DirLang=" | ||
+ | |||
+ | |||
+ | # Show menu header with reports' | ||
+ | # Possible values: 0 or 1 | ||
+ | # Default: 1 | ||
+ | # | ||
+ | ShowMenu=1 | ||
+ | |||
+ | |||
+ | # You choose here which reports you want to see in the main page and what you | ||
+ | # want to see in those reports. | ||
+ | # Possible values: | ||
+ | # 0 - Report is not shown at all | ||
+ | # 1 - Report is shown in main page with an entry in menu and default columns | ||
+ | # XYZ - Report shows column informations defined by code X,Y,Z... | ||
+ | # | ||
+ | # U = Unique visitors | ||
+ | # V = Visits | ||
+ | # P = Number of pages | ||
+ | # H = Number of hits (or mails) | ||
+ | # B = Bandwith (or total mail size for mail logs) | ||
+ | # L = Last access date | ||
+ | # E = Entry pages | ||
+ | # X = Exit pages | ||
+ | # C = Web compression (mod_gzip, | ||
+ | # M = Average mail size (mail logs) | ||
+ | # | ||
+ | |||
+ | # Show monthly summary | ||
+ | # Context: Web, Streaming, Mail, Ftp | ||
+ | # Default: UVPHB, Possible column codes: UVPHB | ||
+ | # Django : 2012-07-03 | ||
+ | # default: ShowSummary=UVPHB | ||
+ | ShowSummary=HB | ||
+ | |||
+ | # Show monthly chart | ||
+ | # Context: Web, Streaming, Mail, Ftp | ||
+ | # Default: UVPHB, Possible column codes: UVPHB | ||
+ | # Django : 2012-07-03 | ||
+ | # default: ShowMonthStats=UVPHB | ||
+ | ShowMonthStats=HB | ||
+ | |||
+ | # Show days of month chart | ||
+ | # Context: Web, Streaming, Mail, Ftp | ||
+ | # Default: VPHB, Possible column codes: VPHB | ||
+ | # Django : 2012-07-03 | ||
+ | # default: ShowDaysOfMonthStats=VPHB | ||
+ | ShowDaysOfMonthStats=HB | ||
+ | |||
+ | # Show days of week chart | ||
+ | # Context: Web, Streaming, Mail, Ftp | ||
+ | # Default: PHB, Possible column codes: PHB | ||
+ | # Default: VPHB, Possible column codes: VPHB | ||
+ | # Django : 2012-07-03 | ||
+ | # default: ShowDaysOfWeekStats=PHB | ||
+ | ShowDaysOfWeekStats=HB | ||
+ | |||
+ | # Show hourly chart | ||
+ | # Context: Web, Streaming, Mail, Ftp | ||
+ | # Default: PHB, Possible column codes: PHB | ||
+ | # Django : 2012-07-03 | ||
+ | # default: ShowHoursStats=PHB | ||
+ | ShowHoursStats=HB | ||
+ | |||
+ | # Show domains/ | ||
+ | # Context: Web, Streaming, Mail, Ftp | ||
+ | # Default: PHB, Possible column codes: PHB | ||
+ | # Django : 2012-07-03 | ||
+ | # default: ShowDomainsStats=PHB | ||
+ | ShowDomainsStats=0 | ||
+ | |||
+ | # Show hosts chart | ||
+ | # Context: Web, Streaming, Mail, Ftp | ||
+ | # Default: PHBL, Possible column codes: PHBL | ||
+ | # Django : 2012-07-03 | ||
+ | # default: ShowHostsStats=PHBL | ||
+ | ShowHostsStats=HBL | ||
+ | |||
+ | # Show authenticated users chart | ||
+ | # Context: Web, Streaming, Ftp | ||
+ | # Default: 0, Possible column codes: PHBL | ||
+ | ShowAuthenticatedUsers=0 | ||
+ | |||
+ | # Show robots chart | ||
+ | # Context: Web, Streaming | ||
+ | # Default: HBL, Possible column codes: HBL | ||
+ | # Django : 2012-07-03 | ||
+ | # default: ShowRobotsStats=HBL | ||
+ | ShowRobotsStats=0 | ||
+ | |||
+ | # Show worms chart | ||
+ | # Context: Web, Streaming | ||
+ | # Default: 0 (If set to other than 0, see also LevelForWormsDetection), | ||
+ | ShowWormsStats=0 | ||
+ | |||
+ | # Show email senders chart (For use when analyzing mail log files) | ||
+ | # Context: Mail | ||
+ | # Default: 0, Possible column codes: HBML | ||
+ | # Django : 2012-07-03 | ||
+ | # default: ShowEMailSenders=0 | ||
+ | ShowEMailSenders=HBML | ||
+ | |||
+ | # Show email receivers chart (For use when analyzing mail log files) | ||
+ | # Context: Mail | ||
+ | # Default: 0, Possible column codes: HBML | ||
+ | # Django : 2012-07-03 | ||
+ | # default: ShowEMailReceivers=0 | ||
+ | ShowEMailReceivers=HBML | ||
+ | |||
+ | # Show session chart | ||
+ | # Context: Web, Streaming, Ftp | ||
+ | # Default: 1, Possible column codes: None | ||
+ | # Django : 2012-07-03 | ||
+ | # default: ShowSessionsStats=1 | ||
+ | ShowSessionsStats=0 | ||
+ | |||
+ | # Show pages-url chart. | ||
+ | # Context: Web, Streaming, Ftp | ||
+ | # Default: PBEX, Possible column codes: PBEX | ||
+ | # Django : 2012-07-03 | ||
+ | # default: ShowPagesStats=PBEX | ||
+ | ShowPagesStats=0 | ||
+ | |||
+ | # Show file types chart. | ||
+ | # Context: Web, Streaming, Ftp | ||
+ | # Default: HB, Possible column codes: HBC | ||
+ | # Django : 2012-07-03 | ||
+ | # default: ShowFileTypesStats=HB | ||
+ | ShowFileTypesStats=0 | ||
+ | |||
+ | # Show file size chart (Not yet available) | ||
+ | # Context: Web, Streaming, Mail, Ftp | ||
+ | # Default: 1, Possible column codes: None | ||
+ | ShowFileSizesStats=0 | ||
+ | |||
+ | # Show downloads chart. | ||
+ | # Context: Web, Streaming, Ftp | ||
+ | # Default: HB, Possible column codes: HB | ||
+ | # Django : 2012-07-03 | ||
+ | # default: ShowDownloadsStats=HB | ||
+ | ShowDownloadsStats=0 | ||
+ | |||
+ | # Show operating systems chart | ||
+ | # Context: Web, Streaming, Ftp | ||
+ | # Default: 1, Possible column codes: None | ||
+ | # Django : 2012-07-03 | ||
+ | # default: ShowOSStats=1 | ||
+ | ShowOSStats=0 | ||
+ | |||
+ | # Show browsers chart | ||
+ | # Context: Web, Streaming | ||
+ | # Default: 1, Possible column codes: None | ||
+ | # Django : 2012-07-03 | ||
+ | # default: ShowBrowsersStats=1 | ||
+ | ShowBrowsersStats=0 | ||
+ | |||
+ | # Show screen size chart | ||
+ | # Context: Web, Streaming | ||
+ | # Default: 0 (If set to 1, see also MiscTrackerUrl), | ||
+ | ShowScreenSizeStats=0 | ||
+ | |||
+ | # Show origin chart | ||
+ | # Context: Web, Streaming | ||
+ | # Default: PH, Possible column codes: PH | ||
+ | # Django : 2012-07-03 | ||
+ | # default: ShowOriginStats=PH | ||
+ | ShowOriginStats=0 | ||
+ | |||
+ | # Show keyphrases chart | ||
+ | # Context: Web, Streaming | ||
+ | # Default: 1, Possible column codes: None | ||
+ | # Django : 2012-07-03 | ||
+ | # default: ShowKeyphrasesStats=1 | ||
+ | ShowKeyphrasesStats=0 | ||
+ | |||
+ | # Show keywords chart | ||
+ | # Context: Web, Streaming | ||
+ | # Default: 1, Possible column codes: None | ||
+ | # Django : 2012-07-03 | ||
+ | # default: ShowKeywordsStats=1 | ||
+ | ShowKeywordsStats=0 | ||
+ | |||
+ | # Show misc chart | ||
+ | # Context: Web, Streaming | ||
+ | # Default: a (See also MiscTrackerUrl parameter), Possible column codes: anjdfrqwp | ||
+ | # Django : 2012-07-03 | ||
+ | # default: ShowMiscStats=a | ||
+ | ShowMiscStats=0 | ||
+ | |||
+ | # Show http errors chart | ||
+ | # Context: Web, Streaming | ||
+ | # Default: 1, Possible column codes: None | ||
+ | # Django : 2012-07-03 | ||
+ | # default: ShowHTTPErrorsStats=1 | ||
+ | ShowHTTPErrorsStats=0 | ||
+ | |||
+ | # Show smtp errors chart (For use when analyzing mail log files) | ||
+ | # Context: Mail | ||
+ | # Default: 0, Possible column codes: None | ||
+ | # Django : 2012-07-03 | ||
+ | # default: ShowSMTPErrorsStats=0 | ||
+ | ShowSMTPErrorsStats=1 | ||
+ | |||
+ | # Show the cluster report (Your LogFormat must contains the %cluster tag) | ||
+ | # Context: Web, Streaming, Ftp | ||
+ | # Default: 0, Possible column codes: PHB | ||
+ | ShowClusterStats=0 | ||
+ | |||
+ | |||
+ | # Some graphical reports are followed by the data array of values. | ||
+ | # If you don't want this array (to reduce the report size for example), you | ||
+ | # can set thoose options to 0. | ||
+ | # Possible values: 0 or 1 | ||
+ | # Default: 1 | ||
+ | # | ||
+ | # Data array values for the ShowMonthStats report | ||
+ | AddDataArrayMonthStats=1 | ||
+ | # Data array values for the ShowDaysOfMonthStats report | ||
+ | AddDataArrayShowDaysOfMonthStats=1 | ||
+ | # Data array values for the ShowDaysOfWeekStats report | ||
+ | AddDataArrayShowDaysOfWeekStats=1 | ||
+ | # Data array values for the ShowHoursStats report | ||
+ | AddDataArrayShowHoursStats=1 | ||
+ | |||
+ | |||
+ | # In the Origin chart, you have stats on where your hits came from. You can | ||
+ | # include hits on pages that come from pages of same sites in this chart. | ||
+ | # Possible values: 0 or 1 | ||
+ | # Default: 0 | ||
+ | # | ||
+ | IncludeInternalLinksInOriginSection=0 | ||
+ | |||
+ | |||
+ | # The following parameters can be used to choose the maximum number of lines | ||
+ | # shown for the particular following reports. | ||
+ | # | ||
+ | # Stats by countries/ | ||
+ | MaxNbOfDomain = 10 | ||
+ | MinHitDomain | ||
+ | # Stats by hosts | ||
+ | MaxNbOfHostsShown = 10 | ||
+ | MinHitHost | ||
+ | # Stats by authenticated users | ||
+ | MaxNbOfLoginShown = 10 | ||
+ | MinHitLogin | ||
+ | # Stats by robots | ||
+ | MaxNbOfRobotShown = 10 | ||
+ | MinHitRobot | ||
+ | # Stats for Downloads | ||
+ | MaxNbOfDownloadsShown = 10 | ||
+ | MinHitDownloads = 1 | ||
+ | # Stats by pages | ||
+ | MaxNbOfPageShown = 10 | ||
+ | MinHitFile | ||
+ | # Stats by OS | ||
+ | MaxNbOfOsShown = 10 | ||
+ | MinHitOs | ||
+ | # Stats by browsers | ||
+ | MaxNbOfBrowsersShown = 10 | ||
+ | MinHitBrowser = 1 | ||
+ | # Stats by screen size | ||
+ | MaxNbOfScreenSizesShown = 5 | ||
+ | MinHitScreenSize = 1 | ||
+ | # Stats by window size (following 2 parameters are not yet used) | ||
+ | MaxNbOfWindowSizesShown = 5 | ||
+ | MinHitWindowSize = 1 | ||
+ | # Stats by referers | ||
+ | MaxNbOfRefererShown = 10 | ||
+ | MinHitRefer | ||
+ | # Stats for keyphrases | ||
+ | MaxNbOfKeyphrasesShown = 10 | ||
+ | MinHitKeyphrase = 1 | ||
+ | # Stats for keywords | ||
+ | MaxNbOfKeywordsShown = 10 | ||
+ | MinHitKeyword = 1 | ||
+ | # Stats for sender or receiver emails | ||
+ | MaxNbOfEMailsShown = 20 | ||
+ | MinHitEMail | ||
+ | |||
+ | |||
+ | # Choose if you want the week report to start on sunday or monday | ||
+ | # Possible values: | ||
+ | # 0 - Week starts on sunday | ||
+ | # 1 - Week starts on monday | ||
+ | # Default: 1 | ||
+ | # | ||
+ | # Django : 2012-07-03 | ||
+ | # default: FirstDayOfWeek=0 | ||
+ | FirstDayOfWeek=1 | ||
+ | |||
+ | |||
+ | # List of visible flags that link to other language translations. | ||
+ | # See Lang parameter for list of allowed flag/ | ||
+ | # If you don't want any flag link, set ShowFlagLinks to "" | ||
+ | # This parameter is used only if ShowMenu parameter is set to 1. | ||
+ | # Possible values: "" | ||
+ | # Example: "en es fr nl de" | ||
+ | # Default: "" | ||
+ | # | ||
+ | ShowFlagLinks="" | ||
+ | |||
+ | |||
+ | # Each URL, shown in stats report views, are links you can click. | ||
+ | # Possible values: 0 or 1 | ||
+ | # Default: 1 | ||
+ | # | ||
+ | ShowLinksOnUrl=1 | ||
+ | |||
+ | |||
+ | # When AWStats builds HTML links in its report pages, it starts those links | ||
+ | # with " | ||
+ | # here the root of all your HTTPS links. If all your site is a SSL web site, | ||
+ | # just enter "/" | ||
+ | # This parameter is not used if ShowLinksOnUrl is 0. | ||
+ | # Example: "/ | ||
+ | # Example: "/" | ||
+ | # Default: "" | ||
+ | # | ||
+ | UseHTTPSLinkForUrl="" | ||
+ | |||
+ | |||
+ | # Maximum length of URL part shown on stats page (number of characters). | ||
+ | # This affects only URL visible text, links still work. | ||
+ | # Default: 64 | ||
+ | # | ||
+ | MaxLengthOfShownURL=64 | ||
+ | |||
+ | |||
+ | # You can enter HTML code that will be added at the top of AWStats reports. | ||
+ | # Default: "" | ||
+ | # | ||
+ | HTMLHeadSection="" | ||
+ | |||
+ | |||
+ | # You can enter HTML code that will be added at the end of AWStats reports. | ||
+ | # Great to add advert ban. | ||
+ | # Default: "" | ||
+ | # | ||
+ | HTMLEndSection="" | ||
+ | |||
+ | |||
+ | # By default AWStats page contains meta tag robots=noindex, | ||
+ | # If you want to have your statistics to be indexed, set this option to 1. | ||
+ | # Default: 0 | ||
+ | # | ||
+ | MetaRobot=0 | ||
+ | |||
+ | |||
+ | # You can set Logo and LogoLink to use your own logo. | ||
+ | # Logo must be the name of image file (must be in $DirIcons/ | ||
+ | # LogoLink is the expected URL when clicking on Logo. | ||
+ | # Default: " | ||
+ | # | ||
+ | Logo=" | ||
+ | LogoLink=" | ||
+ | |||
+ | |||
+ | # Value of maximum bar width/ | ||
+ | # Default: 260/90 | ||
+ | # | ||
+ | BarWidth | ||
+ | BarHeight | ||
+ | |||
+ | |||
+ | # You can ask AWStats to use a particular CSS (Cascading Style Sheet) to | ||
+ | # change its look. To create a style sheet, you can use samples provided with | ||
+ | # AWStats in wwwroot/css directory. | ||
+ | # Example: "/ | ||
+ | # Example: "/ | ||
+ | # Default: "" | ||
+ | # | ||
+ | StyleSheet="" | ||
+ | |||
+ | |||
+ | # Those color parameters can be used (if StyleSheet parameter is not used) | ||
+ | # to change AWStats look. | ||
+ | # Example: color_name=" | ||
+ | # | ||
+ | color_Background=" | ||
+ | color_TableBGTitle=" | ||
+ | color_TableTitle=" | ||
+ | color_TableBG=" | ||
+ | color_TableRowTitle=" | ||
+ | color_TableBGRowTitle=" | ||
+ | color_TableBorder=" | ||
+ | color_text=" | ||
+ | color_textpercent=" | ||
+ | color_titletext=" | ||
+ | color_weekend=" | ||
+ | color_link=" | ||
+ | color_hover=" | ||
+ | color_u=" | ||
+ | color_v=" | ||
+ | color_p=" | ||
+ | color_h=" | ||
+ | color_k=" | ||
+ | color_s=" | ||
+ | color_e=" | ||
+ | color_x=" | ||
+ | |||
+ | |||
+ | |||
+ | # | ||
+ | # PLUGINS | ||
+ | # | ||
+ | |||
+ | # Add here all plugin files you want to load. | ||
+ | # Plugin files must be .pm files stored in ' | ||
+ | # Uncomment LoadPlugin lines to enable a plugin after checking that perl | ||
+ | # modules required by the plugin are installed. | ||
+ | |||
+ | # PLUGIN: Tooltips | ||
+ | # REQUIRED MODULES: None | ||
+ | # PARAMETERS: None | ||
+ | # DESCRIPTION: | ||
+ | # NOTE: This will increased HTML report pages size, thus server load and bandwidth. | ||
+ | # | ||
+ | # Django : 2012-07-03 | ||
+ | # default: # | ||
+ | LoadPlugin=" | ||
+ | |||
+ | # PLUGIN: DecodeUTFKeys | ||
+ | # REQUIRED MODULES: Encode and URI::Escape | ||
+ | # PARAMETERS: None | ||
+ | # DESCRIPTION: | ||
+ | # keywords/ | ||
+ | # referer search engine. | ||
+ | # | ||
+ | # | ||
+ | |||
+ | |||
+ | # PLUGIN: IPv6 | ||
+ | # PARAMETERS: None | ||
+ | # REQUIRED MODULES: Net::IP and Net::DNS | ||
+ | # DESCRIPTION: | ||
+ | # lookup on IPv6 addresses. | ||
+ | # | ||
+ | # | ||
+ | |||
+ | # PLUGIN: HashFiles | ||
+ | # REQUIRED MODULES: Storable | ||
+ | # PARAMETERS: None | ||
+ | # DESCRIPTION: | ||
+ | # This increases DNS cache files loading speed, above all for very large web sites. | ||
+ | # | ||
+ | # | ||
+ | |||
+ | |||
+ | # PLUGIN: UserInfo | ||
+ | # REQUIRED MODULES: None | ||
+ | # PARAMETERS: None | ||
+ | # DESCRIPTION: | ||
+ | # authenticated user reports for each login value. | ||
+ | # A text file called userinfo.myconfig.txt, | ||
+ | # second is text to show, separated by a tab char) must be created in DirData | ||
+ | # directory. | ||
+ | # | ||
+ | # | ||
+ | |||
+ | # PLUGIN: HostInfo | ||
+ | # REQUIRED MODULES: Net::XWhois | ||
+ | # PARAMETERS: None | ||
+ | # DESCRIPTION: | ||
+ | # info on host (like whois records). | ||
+ | # | ||
+ | # Django : 2012-07-03 | ||
+ | # default: # | ||
+ | LoadPlugin=" | ||
+ | |||
+ | # PLUGIN: ClusterInfo | ||
+ | # REQUIRED MODULES: None | ||
+ | # PARAMETERS: None | ||
+ | # DESCRIPTION: | ||
+ | # number. A text file called clusterinfo.myconfig.txt, | ||
+ | # cluster number, second is text to show) separated by a tab char. must be | ||
+ | # created into DirData directory. | ||
+ | # Note this plugin is useless if ShowClusterStats is set to 0 or if you don't | ||
+ | # use a personalized log format that contains %cluster tag. | ||
+ | # | ||
+ | # | ||
+ | |||
+ | # PLUGIN: UrlAliases | ||
+ | # REQUIRED MODULES: None | ||
+ | # PARAMETERS: None | ||
+ | # DESCRIPTION: | ||
+ | # A text file called urlalias.myconfig.txt, | ||
+ | # second is text to show, separated by a tab char) must be created into | ||
+ | # DirData directory. | ||
+ | # | ||
+ | # | ||
+ | |||
+ | # PLUGIN: TimeHiRes | ||
+ | # REQUIRED MODULES: Time::HiRes (if Perl < 5.8) | ||
+ | # PARAMETERS: None | ||
+ | # DESCRIPTION: | ||
+ | # | ||
+ | # | ||
+ | |||
+ | # PLUGIN: TimeZone | ||
+ | # REQUIRED MODULES: Time::Local | ||
+ | # PARAMETERS: [timezone offset] | ||
+ | # DESCRIPTION: | ||
+ | # This plugin reduces AWStats speed of 10% !!!!!!! | ||
+ | # LoadPlugin=" | ||
+ | # LoadPlugin=" | ||
+ | # LoadPlugin=" | ||
+ | # | ||
+ | # | ||
+ | |||
+ | # PLUGIN: Rawlog | ||
+ | # REQUIRED MODULES: None | ||
+ | # PARAMETERS: None | ||
+ | # DESCRIPTION: | ||
+ | # content of current log files. A filter is also available. | ||
+ | # | ||
+ | # | ||
+ | |||
+ | # PLUGIN: GraphApplet | ||
+ | # REQUIRED MODULES: None | ||
+ | # PARAMETERS: [CSS classes to override] | ||
+ | # DESCRIPTION: | ||
+ | # | ||
+ | # | ||
+ | |||
+ | # PLUGIN: GraphGoogleChartAPI | ||
+ | # REQUIRED MODULES: None | ||
+ | # PARAMETERS: None | ||
+ | # DESCRIPTION: | ||
+ | # in HTML reports. If country data is available and more than one country has hits, | ||
+ | # a map will be generated using Google Visualizations. | ||
+ | # Note: The machine where reports are displayed must have Internet access for the | ||
+ | # charts to be generated. The only data sent to Google includes the statistic numbers, | ||
+ | # legend names and country names. | ||
+ | # Warning: This plugin is not compatible with option BuildReportFormat=xhtml. | ||
+ | # | ||
+ | # Django : 2012-07-03 | ||
+ | # default: # | ||
+ | LoadPlugin=" | ||
+ | |||
+ | # PLUGIN: GeoIPfree | ||
+ | # REQUIRED MODULES: Geo::IPfree version 0.2+ (from Graciliano M.P.) | ||
+ | # PARAMETERS: None | ||
+ | # DESCRIPTION: | ||
+ | # This plugin is useless for intranet only log files. | ||
+ | # Note: You must choose between using this plugin (need Perl Geo::IPfree | ||
+ | # module, database is free but not up to date) or the GeoIP plugin (need | ||
+ | # Perl Geo::IP module from Maxmind, database is also free and up to date). | ||
+ | # Note: Activestate provide a corrupted version of Geo::IPfree 0.2 Perl | ||
+ | # module, so install it from elsewhere (from www.cpan.org for example). | ||
+ | # This plugin reduces AWStats speed by up to 10% ! | ||
+ | # | ||
+ | # | ||
+ | |||
+ | # MAXMIND GEO IP MODULES: Please see documentation for notes on all Maxmind modules | ||
+ | |||
+ | # PLUGIN: GeoIP | ||
+ | # REQUIRED MODULES: Geo::IP or Geo:: | ||
+ | # PARAMETERS: [GEOIP_STANDARD | GEOIP_MEMORY_CACHE] [/ | ||
+ | # DESCRIPTION: | ||
+ | # table with country name | ||
+ | # Replace spaces in the path of geoip data file with string " | ||
+ | # | ||
+ | # Django : 2012-07-03 | ||
+ | # default: # | ||
+ | LoadPlugin=" | ||
+ | |||
+ | # PLUGIN: GeoIP_City_Maxmind | ||
+ | # REQUIRED MODULES: Geo::IP or Geo:: | ||
+ | # PARAMETERS: [GEOIP_STANDARD | GEOIP_MEMORY_CACHE] [/ | ||
+ | # DESCRIPTION: | ||
+ | # and hits by city including regions. | ||
+ | # Replace spaces in the path of geoip data file with string " | ||
+ | # | ||
+ | # Django : 2012-07-03 | ||
+ | # default: # | ||
+ | LoadPlugin=" | ||
+ | |||
+ | # PLUGIN: GeoIP_ASN_Maxmind | ||
+ | # REQUIRED MODULES: Geo::IP or Geo:: | ||
+ | # PARAMETERS: [GEOIP_STANDARD | GEOIP_MEMORY_CACHE] [/ | ||
+ | # DESCRIPTION: | ||
+ | # This plugin can display some ISP information if included in the database. You can also provide | ||
+ | # a link that will be used to lookup additional registration data. Put the link at the end of | ||
+ | # the parameter string and the report page will include the link with the full AS number at the end. | ||
+ | # Replace spaces in the path of geoip data file with string " | ||
+ | # | ||
+ | # | ||
+ | |||
+ | # PLUGIN: GeoIP_Region_Maxmind | ||
+ | # REQUIRED MODULES: Geo::IP or Geo:: | ||
+ | # PARAMETERS: [GEOIP_STANDARD | GEOIP_MEMORY_CACHE] [/ | ||
+ | # DESCRIPTION: | ||
+ | # Canada can be detected. | ||
+ | # Replace spaces in the path of geoip data file with string " | ||
+ | # | ||
+ | # | ||
+ | |||
+ | # PLUGIN: GeoIP_ISP_Maxmind | ||
+ | # REQUIRED MODULES: Geo::IP or Geo:: | ||
+ | # PARAMETERS: [GEOIP_STANDARD | GEOIP_MEMORY_CACHE] [/ | ||
+ | # DESCRIPTION: | ||
+ | # Replace spaces in the path of geoip data file with string " | ||
+ | # | ||
+ | # | ||
+ | |||
+ | # PLUGIN: GeoIP_Org_Maxmind | ||
+ | # REQUIRED MODULES: Geo::IP or Geo:: | ||
+ | # PARAMETERS: [GEOIP_STANDARD | GEOIP_MEMORY_CACHE] [/ | ||
+ | # DESCRIPTION: | ||
+ | # Replace spaces in the path of geoip data file with string " | ||
+ | # | ||
+ | # | ||
+ | |||
+ | |||
+ | # | ||
+ | # EXTRA SECTIONS | ||
+ | # | ||
+ | |||
+ | # You can define your own charts, you choose here what are rows and columns | ||
+ | # keys. This feature is particularly useful for marketing purpose, tracking | ||
+ | # products orders for example. | ||
+ | # For this, edit all parameters of Extra section. Each set of parameter is a | ||
+ | # different chart. For several charts, duplicate section changing the number. | ||
+ | # Note: Each Extra section reduces AWStats speed by 8%. | ||
+ | # | ||
+ | # WARNING: A wrong setup of Extra section might result in too large arrays | ||
+ | # that will consume all your memory, making AWStats unusable after several | ||
+ | # updates, so be sure to setup it correctly. | ||
+ | # In most cases, you don't need this feature. | ||
+ | # | ||
+ | # ExtraSectionNameX is title of your personalized chart. | ||
+ | # ExtraSectionCodeFilterX is list of codes the record code field must match. | ||
+ | # Put an empty string for no test on code. | ||
+ | # ExtraSectionConditionX are conditions you can use to count or not the hit, | ||
+ | # Use one of the field condition | ||
+ | # | ||
+ | # and a regex to match, after a coma. Use " | ||
+ | # ExtraSectionFirstColumnTitleX is the first column title of the chart. | ||
+ | # ExtraSectionFirstColumnValuesX is a string to tell AWStats which field to | ||
+ | # | ||
+ | # | ||
+ | # and how to extract the value (using regex syntax). Each different value | ||
+ | # found will appear in first column of report on a different row. Be sure | ||
+ | # that list of different possible values will not grow indefinitely. | ||
+ | # ExtraSectionFirstColumnFormatX is the string used to write value. | ||
+ | # ExtraSectionStatTypesX are things you want to count. You can use standard | ||
+ | # code letters (P for pages,H for hits,B for bandwidth,L for last access). | ||
+ | # ExtraSectionAddAverageRowX add a row at bottom of chart with average values. | ||
+ | # ExtraSectionAddSumRowX add a row at bottom of chart with sum values. | ||
+ | # MaxNbOfExtraX is maximum number of rows shown in chart. | ||
+ | # MinHitExtraX is minimum number of hits required to be shown in chart. | ||
+ | # | ||
+ | |||
+ | # Example to report the 20 products the most ordered by " | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | |||
+ | |||
+ | # There is also a global parameter ExtraTrackedRowsLimit that limits the | ||
+ | # number of possible rows an ExtraSection can report. This parameter is | ||
+ | # here to protect too much memory use when you make a bad setup in your | ||
+ | # ExtraSection. It applies to all ExtraSection independently meaning that | ||
+ | # none ExtraSection can report more rows than value defined by ExtraTrackedRowsLimit. | ||
+ | # If you know an ExtraSection will report more rows than its value, you should | ||
+ | # increase this parameter or AWStats will stop with an error. | ||
+ | # Example: 2000 | ||
+ | # Default: 500 | ||
+ | # | ||
+ | ExtraTrackedRowsLimit=500 | ||
+ | |||
+ | |||
+ | # | ||
+ | # INCLUDES | ||
+ | # | ||
+ | |||
+ | # You can include other config files using the directive with the name of the | ||
+ | # config file. | ||
+ | # This is particularly useful for users who have a lot of virtual servers, so | ||
+ | # a lot of config files and want to maintain common values in only one file. | ||
+ | # Note that when a variable is defined both in a config file and in an | ||
+ | # included file, AWStats will use the last value read for parameters that | ||
+ | # contains one value and AWStats will concat all values from both files for | ||
+ | # parameters that are lists of values. | ||
+ | # | ||
+ | |||
+ | #Include "" | ||
+ | |||
+ | </ | ||
+ | |||
+ | Zusammengefasst sieht dann unsere Konfigurationdatei entsprechend wie folgt aus: | ||
+ | # egrep -v ' | ||
+ | |||
+ | <code bash> | ||
+ | LogFile=" | ||
+ | LogType=M | ||
+ | LogFormat=" | ||
+ | LogSeparator=" | ||
+ | SiteDomain=" | ||
+ | HostAliases=„localhost 127.0.0.1 REGEX[nausch\.org$] REGEX[www\.nausch\.org$]“ | ||
+ | DNSLookup=2 | ||
+ | DirData="/ | ||
+ | DirCgi="/ | ||
+ | DirIcons="/ | ||
+ | AllowToUpdateStatsFromBrowser=1 | ||
+ | AllowFullYearView=2 | ||
+ | EnableLockForUpdate=1 | ||
+ | DNSStaticCacheFile=" | ||
+ | DNSLastUpdateCacheFile=" | ||
+ | SkipDNSLookupFor="" | ||
+ | AllowAccessFromWebToAuthenticatedUsersOnly=0 | ||
+ | AllowAccessFromWebToFollowingAuthenticatedUsers="" | ||
+ | AllowAccessFromWebToFollowingIPAddresses="" | ||
+ | CreateDirDataIfNotExists=0 | ||
+ | BuildHistoryFormat=text | ||
+ | BuildReportFormat=html | ||
+ | SaveDatabaseFilesWithPermissionsForEveryone=1 | ||
+ | PurgeLogFile=0 | ||
+ | ArchiveLogRecords=0 | ||
+ | KeepBackupOfHistoricFiles=1 | ||
+ | DefaultFile=" | ||
+ | SkipHosts="" | ||
+ | SkipUserAgents="" | ||
+ | SkipFiles="" | ||
+ | SkipReferrersBlackList="" | ||
+ | OnlyHosts="" | ||
+ | OnlyUserAgents="" | ||
+ | OnlyUsers="" | ||
+ | OnlyFiles="" | ||
+ | NotPageList=" | ||
+ | ValidHTTPCodes=" | ||
+ | ValidSMTPCodes=" | ||
+ | AuthenticatedUsersNotCaseSensitive=0 | ||
+ | URLNotCaseSensitive=0 | ||
+ | URLWithAnchor=0 | ||
+ | URLQuerySeparators="?;" | ||
+ | URLWithQuery=0 | ||
+ | URLWithQueryWithOnlyFollowingParameters="" | ||
+ | URLWithQueryWithoutFollowingParameters="" | ||
+ | URLReferrerWithQuery=0 | ||
+ | WarningMessages=1 | ||
+ | ErrorMessages="" | ||
+ | DebugMessages=0 | ||
+ | NbOfLinesForCorruptedLog=50 | ||
+ | WrapperScript="" | ||
+ | DecodeUA=0 | ||
+ | MiscTrackerUrl="/ | ||
+ | LevelForBrowsersDetection=0 | ||
+ | # 2 reduces AWStats speed by 2% | ||
+ | # allphones reduces AWStats speed by 5% | ||
+ | LevelForOSDetection=0 | ||
+ | # 2 reduces AWStats speed by 3% | ||
+ | LevelForRefererAnalyze=0 | ||
+ | # 2 reduces AWStats speed by 14% | ||
+ | LevelForRobotsDetection=0 | ||
+ | # 2 reduces AWStats speed by 2.5% | ||
+ | LevelForSearchEnginesDetection=0 | ||
+ | # 2 reduces AWStats speed by 9% | ||
+ | LevelForKeywordsDetection=0 | ||
+ | # 2 reduces AWStats speed by 1% | ||
+ | LevelForFileTypesDetection=0 | ||
+ | # 2 reduces AWStats speed by 1% | ||
+ | LevelForWormsDetection=0 | ||
+ | # 2 reduces AWStats speed by 15% | ||
+ | UseFramesWhenCGI=1 | ||
+ | DetailedReportsOnNewWindows=1 | ||
+ | Expires=0 | ||
+ | MaxRowsInHTMLOutput=1000 | ||
+ | Lang=" | ||
+ | DirLang=" | ||
+ | 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 | ||
+ | ShowDownloadsStats=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 | ||
+ | MaxNbOfHostsShown = 10 | ||
+ | MinHitHost | ||
+ | MaxNbOfLoginShown = 10 | ||
+ | MinHitLogin | ||
+ | MaxNbOfRobotShown = 10 | ||
+ | MinHitRobot | ||
+ | MaxNbOfDownloadsShown = 10 | ||
+ | MinHitDownloads = 1 | ||
+ | MaxNbOfPageShown = 10 | ||
+ | MinHitFile | ||
+ | MaxNbOfOsShown = 10 | ||
+ | MinHitOs | ||
+ | MaxNbOfBrowsersShown = 10 | ||
+ | MinHitBrowser = 1 | ||
+ | MaxNbOfScreenSizesShown = 5 | ||
+ | MinHitScreenSize = 1 | ||
+ | MaxNbOfWindowSizesShown = 5 | ||
+ | MinHitWindowSize = 1 | ||
+ | MaxNbOfRefererShown = 10 | ||
+ | MinHitRefer | ||
+ | MaxNbOfKeyphrasesShown = 10 | ||
+ | MinHitKeyphrase = 1 | ||
+ | MaxNbOfKeywordsShown = 10 | ||
+ | MinHitKeyword = 1 | ||
+ | MaxNbOfEMailsShown = 20 | ||
+ | MinHitEMail | ||
+ | FirstDayOfWeek=1 | ||
+ | ShowFlagLinks="" | ||
+ | ShowLinksOnUrl=1 | ||
+ | UseHTTPSLinkForUrl="" | ||
+ | MaxLengthOfShownURL=64 | ||
+ | HTMLHeadSection="" | ||
+ | HTMLEndSection="" | ||
+ | MetaRobot=0 | ||
+ | Logo=" | ||
+ | LogoLink=" | ||
+ | BarWidth | ||
+ | BarHeight | ||
+ | StyleSheet="" | ||
+ | color_Background=" | ||
+ | color_TableBGTitle=" | ||
+ | color_TableTitle=" | ||
+ | color_TableBG=" | ||
+ | color_TableRowTitle=" | ||
+ | color_TableBGRowTitle=" | ||
+ | color_TableBorder=" | ||
+ | color_text=" | ||
+ | color_textpercent=" | ||
+ | color_titletext=" | ||
+ | color_weekend=" | ||
+ | color_link=" | ||
+ | color_hover=" | ||
+ | color_u=" | ||
+ | color_v=" | ||
+ | color_p=" | ||
+ | color_h=" | ||
+ | color_k=" | ||
+ | color_s=" | ||
+ | color_e=" | ||
+ | color_x=" | ||
+ | LoadPlugin=" | ||
+ | LoadPlugin=" | ||
+ | LoadPlugin=" | ||
+ | LoadPlugin=" | ||
+ | LoadPlugin=" | ||
+ | ExtraTrackedRowsLimit=500 | ||
+ | </ | ||
+ | |||
+ | Nach erfolgreicher Konfiguration steht dem ersten Aufruf nichts mehr im Wege. Der Aufruf erfolgt über folgende URL: | ||
+ | $ firefox http:// | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | ====== Links ====== | ||
+ | * **[[centos: | ||
+ | * **[[wiki: | ||
+ | * **[[http:// | ||
+ | |||
+ | |||
+ | |||