Audit Dateien in ASM 11gR2 Instanzen

von Reno Föllmer (OCM)

Eine ASM Instanz schreibt standardmäßig viele Audit Dateien, die lediglich informativen Charakter haben. Sie sind im Normalbetrieb, wenn alles reibungslos arbeitet eher uninteressant und daher entbehrlich. Das Problem: Es entstehen sehr viele Audit Dateien, die nichtautomatisch gelöscht werden und daher mit der Zeit enormen Speicherplatz einnehmen.

 

Das Speicherziel der Audit Dateien wird unter dem Initialisierungsparameter AUDIT_FILE_DEST der ASM Instanz festgelegt. Ein Initialisierungsparameter zum Abschalten des Auditing existiert – im Gegensatz zur Datenbank (in der DB Instanz ist es der Initialisierungsparameter  AUDIT_TRAIL) – nicht. Im Laufe der Zeit wird das Verzeichnis unter AUDIT_FILE_DEST gefüllt und kann – im Extremfall – das System zum Anhalten oder gar zum Absturz bringen. Es ist daher unabdingbar, das Audit-Verzeichnis regelmäßig zu leeren.

 

Das Leeren des Audit Verzeichnisses kann zweckmäßiger Weise mit zwei Möglichkeiten automatisch durchgeführt werden. Beide Varianten können einzeln oder kombiniert eingesetzt werden und müssen in jedem Fall manuell implementiert werden.

 

Die wohl eleganteste dabei ist die Nutzung der Rotation der Inhalte mittels SYSLOG. Dies hat zum einen den Vorteil, dass nur eine Audit Datei an Stelle vieler tausender kleiner geschrieben wird, zum anderen werden nur die ältesten Inhalte abgeschnitten. In SuSE Linux Enterprise Server 11 ist hierzu die Konfiguration der Datei /etc/syslog-ng/syslog-ng.conf folgendermaßen mit zusätzlichen Einträgen zu versehen:

 

#

 

# Oracle ASM Audit Settings

 

#

 

filter f_local1 { level(info) and facility(local0); };

 

destination local1 { file("/var/log/oracle/audit_asm.log"); };

 

log { source(src); filter(f_local1); destination(local1); };

 

Anschließend muss die eben referenzierte Datei /var/log/oracle/audit_asm.log angelegt werden:

 

# mkdir –p /var/log/oracle/

 

# touch /var/log/oracle/audit_asm.log

 

Damit unsere Mühe nicht umsonst war, muss nun noch an der ASM Instanz die Einstellung vorgenommen werden, dass unsere Arbeit auch berücksichtigt wird. Dazu muss in der ASM Instanz der statische Initialisierungsparameter AUDIT_SYSLOG_LEVEL entsprechend unserer Einstellung in der syslog-ng.conf Datei angepasst werden:

 

$ . oraenv

 

+ASM1

 

$ sqlplus / as sysasm

 

SQL> alter system set audit_syslog_level='local0.info' scope=spfile;
SQL> shutdown immediate;
SQL> startup;

 

Zu guter Letzt wird noch die für die Rotation verantwortliche Datei angelegt. Hintergrund ist der, dass die Datei nicht ständig geleert werden muss, sondern sich quasi selbst abschneidet und löscht. Dazu wird die Datei oracleasm.audit angelegt und mit den folgenden Inhalten editiert:

 

# vi /etc/logrotate.d/oracleasm.audit

 

 

 

Der Inhalt der Datei sieht damit folgendermaßen aus:

 

 

 

# /etc/logrotate.d/oracleasm.audit

 

#

 

 

 

/var/log/oracle/audit_asm.log {

 

daily

 

rotate 2

 

compress

 

create 0640 oracle oinstall

 

}

 

Sollten Sie in einem Oracle Real Application Cluster System arbeiten, vergessen Sie bitte nicht, dass die vorstehenden Einstellungen auf allen beteiligten Knoten durchgeführt werden müssen. Die entsprechenden ASM Instanzen müssen hier umgebungsgerecht angepasst werden.

 

Starten Sie nach getaner Arbeit die jeweiligen Knoten neu.

 

Und natürlich sollten Sie nach dem Neustart kontrollieren, ob auch Inhalte in die Datei /var/log/oracle/audit_asm.log geschrieben werden.

 

Wie Sie sicherlich feststellen werden, werden immer noch Audit Dateien  in das AUDIT_FILE_DEST geschrieben. nur ein einige wenige – aber immerhin. Und Kleinvieh … - naja, Sie wissen ja. Da auch diese Dateien entbehrlich sind und in aller Regel nur dann geschrieben werden, wenn die ASM Instanz gestartet wird (was in der Produktion wohl nicht allzu häufig vorkommt), sollten diese Dateien quartalsweise entfernt werden. Dazu ist ein cron Job sinnvoll. Fügen Sie Ihrer crontab Datei zu diesem Zweck die folgende Zeile hinzu:

 

crontab –e

 

# Löschen der ASM Audit Dateien
# quartalsweise (01.03., 01.06.,01.09,01.12.)
# um 20.00 Uhr
# unter Beibehaltung der letzten 10 Tage

00 20 01 3,6,9,12 * /usr/bin/find $CRS_HOME/rdbms/audit -iname "*\.aud" -daystart -atime 10 -exec rm {} \;

 

Und fertig.

 

Sie können die gleiche Vorgehensweise übrigens auch für die Datenbankinstanz anwenden (beachten Sie im RAC, dass die Arbeiten auch hier auf allen Knoten durchgeführt werden müssen).