BSD Process Accounting
Process Accounting ist die Möglichkeit, alle Prozesse, die der Kernel startet, aufzuzeichnen.
Vorwort
Wer schon einmal durch die Kernel-Konfiguration gegangen ist, dem ist vielleicht schon einmal eine Option mit der Bezeichnung
[ ] BSD Process Accounting
aufgefallen (im Menü
). Was verbirgt sich dahinter und was hat BSD damit zu tun?Process Accounting ist die Möglichkeit, alle Prozesse, die der Kernel startet, aufzuzeichnen. Aufgezeichnet werden u.a. der Name des Prozesses, die Startzeit, die verbrauchte CPU-Zeit (User- und Systemzeit), die Laufzeit, der Besitzer des Prozesses, Anzahl der Disk I/O-Operationen, Anzahl der Page-Faults, der durchschnittliche Speicherverbrauch, der Exit-Code und anderes. Diese Daten werden in einer Datei gespeichert, deren Format in der struct acct
in /usr/include/linux/acct.h festgelegt ist. Es handelt sich um eine Binärdatei.
BSD Process Accounting heißt es deshalb, weil es in dieser Form zuerst in der BSD-Variante von UNIX implementiert wurde. In Linux ist es seit Kernel 2.0 verfügbar, oder sogar schon länger.
Verwendungszweck des Process Accounting
Process Accounting wurde ursprünglich eingeführt, um den Ressourcenverbrauch (CPU-Zeit, I/O usw.) der Benutzer messen und in Rechnung stellen zu können. Auf den Großrechnern seit den 50er/60er Jahren war dies gang und gäbe, auf Supercomputern ist es oft heute noch so.
Da die Abrechnung im Heimbereich eine eher untergeordnete Rolle spielt, wird man es hier eher für Performance-Tuning einsetzen (welcher Prozeß lief wie oft, welcher verbraucht die meisten Ressourcen), oder um ungewöhnliche Programmaufrufe zu entdecken. Sicher gibt es auch noch andere Anwendungen für das Accounting.
Die Accounting Tools
Um Process Accounting zu aktivieren, genügt es nicht, daß es in den Kernel eincompiliert ist. Man benötigt auch ein Tool, um es einzuschalten (oder auszuschalten). Dieses heißt accton und ist in dem Paket acct enthalten, das auf jedem GNU-Mirror unter acct/acct-6.3.2.tar.gz zu finden sein dürfte. Seit 1998 hat sich an dem Paket nichts mehr geändert. Praktischerweise enthält das Paket auch gleich noch ein paar andere Helfer, insbesondere zur statistischen Auswertung, so daß es einem meist erspart bleiben sollte, eigene Programme zum Lesen der Accounting-Daten zu schreiben.
Wer seine Accounting-Tools unter Kernel 2.2 oder 2.4 compiliert hat, kann damit keine Accounting-Daten von Kernel 2.0 bearbeiten und umgekehrt. Das liegt daran, daß Kernel 2.0 ein geringfügig anderes Dateiformat hatte als die neueren Kernel.
Ein- und Ausschalten von Accounting
accton /var/account/pacct
schaltet das Accounting ein. Statt /var/account/pacct kann man einen beliebigen anderen Dateinamen verwenden. Accounting-Daten werden von diesem Moment an an diese Datei angehängt (wenn nötig, wird sie neu erzeugt), alte Daten werden nie überschrieben. Mit dem wenig intuitiven Kommando
accton
schaltet man das Accounting ab.
Die Accounting-Datei
Ein gebräuchlicher Pfad für die Datei ist /var/account/acct. Das Verzeichnis /var/account muß man gegebenenfalls anlegen. Nur root sollte in dem Verzeichnis Schreibrechte haben, damit niemand die Datei manipulieren kann. Im Sinne von Sicherheit und Datenschutz wäre sogar zu überlegen, ob man allen Benutzern die Leserechte entzieht. Traditionell ist das Lesen der Datei aber meist zugelassen. Man verbietet den Benutzern ja auch nicht Kommandos wie who
oder ps ax
.
Die Accounting-Datei wird vom Kernel nie gelöscht. Wenn man nicht eingreift, wächst sie also stetig, was bei halbwegs beschäftigten Rechnern schnell zu Megabytes an Daten führen kann. SuSE hat offenbar vorgesehen, die Datei wie eine normale Logdatei zu rotieren, wie es bei anderen Distributionen aussieht, habe ich nicht nachgesehen. Man kann wohl davon ausgehen, daß es bei den führenden Distributionen keinen Disk-Überlauf geben wird, wenn man das Accounting einschaltet.
Auswertung der Daten
Ist das Accounting eingeschaltet, so kann man mit
lastcomm | less
jederzeit die letzten gestarteten Kommandos sehen (Prozesse, die noch nicht beendet sind, erscheinen in der Liste nicht). Ziemlich cool, aber noch nicht ganz ausreichend. Deshalb gibt es das Programm sa, das diese Liste nach verschiedenen Kriterien zusammenfassen und sortieren kann. Es kann auch dazu verwendet werden, solche Zusammenfassungen mit bereits bestehenden Zusammenfassungen zu vereinigen.
Es geht aber noch besser. Schon vor ca. fünf Jahren dachte ich mir, daß dieses Erfassen der Daten und Anlegen von Statistiken automatisch gehen sollte. Mit moderatem Aufwand schrieb ich daraufhin ein Shell-Skript, das genau dieses tut. Es legt tägliche, monatliche und jährliche Zusammenfassungen an, die jeden Tag aktualisiert werden, und erzeugt eine Index-Datei im HTML-Format. In Kombination mit einem kleinen CGI-Programm, ebenfalls ein Shell-Skript, lassen sich so auf simpelste Weise die Statistiken abrufen und nach verschiedenen Kriterien sortieren.
Dieses Tool heißt acctsum und ist auf meiner Homepage zu finden. Die Dokumentation ist weitgehend englisch. Die Installation sollte niemand vor Probleme stellen. Es gibt eine Konfigurationsdatei /etc/account.conf, die man wahrscheinlich sogar ohne Änderung übernehmen kann, wenn man die Accounting Utilities in /usr/local/sbin installiert hat.
Man benötigt einen Eintrag in crontab, um acctsum täglich automatisch auszuführen. Zum Ansehen der Daten ist ein Web-Server nötig, in dessen CGI-Verzeichnis das Programm showacct zu installieren ist. Alles in allem ist die Installation nicht so komfortabel wie ein rpm -i
, aber auch nicht kompliziert.
Die einzelnen Schritte der Installation (als Root) sind:
- Makefile durchsehen und
make install
aufrufen - das Programm showacct ins CGI-Verzeichnis kopieren
crontab -e
aufrufen und einen Eintrag hinzufügen:# At 00:00: Accounting summary 0 0 * * * /usr/local/sbin/account.daily
- /etc/account.conf editieren und an den eigenen Geschmack anpassen
Ab Mitternacht sollte dann die Auswertung der Daten laufen und eine Datei index.html irgendwo erzeugt werden. Diese kann man in seine Bookmarks aufnehmen, oder einen Link auf die Datei irgendwo einbauen, so daß man bequem darauf zugreifen kann.
Was in der Installationsanleitung fehlt, ist, daß man die Distribution daran hindern muß, sich an der Account-Datei zu vergreifen. Denn das erledigt das acctsum-Programm selbst. Bei SuSE würde das bedeuten, die Zeile mit /var/account/pacct aus /etc/logfiles zu entfernen. Bei Debian, Red Hat und Mandrake müßte es eine Datei im Verzeichnis /etc/logrotate.d sein, die zu bearbeiten oder einfach zu löschen ist.