Wer viel mit Netzwerkgeräten wie z.B. Citrix NetScaler oder sonstigen Linux/Unix Systemen zu tun hat, benötigt mittelfristig auch eine zentrale Konsole um die Logfiles dieser Systeme zu sammeln und auszuwerten. In Enterprise Umgebungen würde ich hier uneingeschränkt Splunk empfehlen. In kleineren Umgebungen reicht allerdings oft nur ein relativ einfacher Syslog Server. In diesem Artikel beschreibe ich, wie man relativ schnell den Adiscon LogAnalyzer auf einer virtuellen Maschine mit CentOS 7 installiert und konfiguriert.
Bevor wir natürlich loslegen können, benötigen wir eine virtuelle Maschine und installieren dort CentOS 7. Die benötigten Sourcen können wir uns unter https://www.centos.org oder einem Mirror runterladen. Ich verwende hier eine virtuelle Maschine mit 1 vCPU und 2 GB RAM. Damit auch ein wenig Platz für die Logeinträge vorhanden ist, habe ich eine virtuelle Festplatte mit 60 GB an die Maschine gehängt. Dank grafischer Installationsroutine ist die Installation mit Next – Next schnell erledigt. Als Installationstyp reicht ein minimales System, alles was wir noch benötigen installieren wir schnell nach.
Sobald die Installation mit einem Reboot abgeschlossen ist, melden wir uns per SSH an der Maschine mit dem vorher vergebenen Root-User und dem dazugehörigen Passwort an. Als erstes bringen wir das System auf den aktuellen Stand und aktualisieren alle Komponenten mit dem nachfolgenden Kommando:
[root@centos7 ~]# yum update
Nicht wundern, das Update kann je nach installierter Version eine ganze Weile dauern. Ist alles auf dem aktuellen Stand, können wir mit der Installation von RSYSLOG v8 beginnen. CentOS 7 nutzt zwar bereits RSYSLOG, allerdings in einer älteren Version. Mit den nachfolgenden Kommandos installieren wir zuerst das offizielle Repository und dann die aktuelle Version von RSYSLOG.
[root@centos7 ~]# wget http://rpms.adiscon.com/v8-stable/rsyslog.repo
[root@centos7 ~]# mv rsyslog.repo /etc/yum.repos.d/rsyslog.repo
[root@centos7 ~]# yum install rsyslog* –skip-broken
In einigen Fällen ist wget auf dem System noch nicht vorhanden, das kann aber schnell noch installiert werden.
[root@centos7 ~]# yum install wget
Damit RSYSLOG auch nach einem Systemstart automatisch startet führen, wir noch das folgende Kommando aus:
[root@centos7 ~]# chkconfig rsyslog on
MySQL Datenbank installieren
Normalerweise schreibt RSYSLOG alle Einträge in eine Datei. Da das für unseren Zweck aber nicht sonderlich nützlich ist, installieren wir noch einen MySQL Datenbank Server und leiten alle Syslog-Meldungen in eine Datenbank. Auch hier installieren wir zuerst das offizielle Repository und danach den MySQL Server.
[root@centos7 ~]# wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
[root@centos7 ~]# rpm -ivh mysql-community-release-el7-5.noarch.rpm
[root@centos7 ~]# yum install mysql mysql-server
Abschließend starten wir den MySQL Server und sorgen dafür, dass er auch bei einem Neustart des System startet.
[root@centos7 ~]# systemctl start mysqld
[root@centos7 ~]# chkconfig mysqld on
Jetzt muss das ganze natürlich auch noch konfiguriert werden. Zuerst ändern wir das Passwort des Superusers.
[root@centos7 ~]# mysqladmin -u root password 'MeinPasswort'
Versuchen wir doch gleich, ob wir uns an unserem MySQL Server mit dem zuvor verwendeten Passwort anmelden können.
[root@centos7 ~]# mysql -u root -p
Die Ausgabe sollte dann wie folgt aussehen.
Hat alles funktioniert, verlassen wir die MySQL Shell wieder mit exit. Glücklicherweise bringt RSYSLOG ein Skript für das Anlegen der benötigten Datenbank gleich mit. Mit dem folgenden Kommando erstellen wir die Datenbank (Achtung: Version von RSYSLOG beachten):
[root@centos7 ~]# mysql -u root -p < /usr/share/doc/rsyslog-mysql-8.24.0/createDB.sql
Jetzt brauchen wir noch einen Benutzer für die Syslog Datenbank. Zuerst melden wir uns wieder mit dem Superuser an, erstellen einen neuen Benutzer und berechtigen diesen. Vorher benötigen wir jedoch noch den Hostnamen unseres Servers.
[root@centos7 ~]# hostname -f
[root@centos7 ~]# mysql -u root -p Syslog
mysql> GRANT ALL ON Syslog.* TO 'rsyslogdbadmin'@'localhost' IDENTIFIED BY 'MeinPasswort';
mysql> FLUSH PRIVILEGES;
mysql> exit
Testen wir doch gleich, ob sich der soeben erstellte Benutzer auch anmelden kann:
[root@centos7 ~]# mysql -u rsyslogdbadmin -p Syslog
Sollte hier ein „Access denied“ kommen, haben wir einen Fehler (meistens der Hostname) im vorherigen GRANT Kommando.
RSYSLOG konfigurieren
Damit RSYSLOG nun auch die Datenbank verwendet, müssen wir jetzt noch ein wenig die Konfiguration anpassen. Dazu öffnen wir den Config-File mit dem vi:
[root@centos7 ~]# vi /etc/rsyslog.conf
Wer mit dem Linux Editor vi nicht so viel anfangen kann, findet hier alle benötigten Informationen.
Unter dem Abschnitt #### MODULES #### fügen wir zunächst die folgende Zeile ein:
module(load="ommysql")
Danach aktivieren wir die folgenden auskommentierten Zeilen:
# Provides UDP syslog reception
# for parameters see http://www.rsyslog.com/doc/imudp.html
module(load="imudp") # needs to be done just once
input(type="imudp" port="514")
# Provides TCP syslog reception
# for parameters see http://www.rsyslog.com/doc/imtcp.html
module(load="imtcp") # needs to be done just once
input(type="imtcp" port="514")
Als vorletzte Zeile fügen wir dann noch eine Richtlinie ein:
*.* :ommysql:127.0.0.1,Syslog,rsyslogdbadmin,Password
# ### end of the forwarding rule ###
Das ganze sollte dann etwa wie folgt aussehen:
Jetzt noch den Service neu starten und der MySQL sowie der RSYSLOG Teil sind fertig.
[root@centos7 ~]# service rsyslog restart
LogAnalyzer Voraussetzungen installieren
Da der LogAnalyzer mit einer WebGUI verwendet wird, brauchen wir noch einen Webserver sowie PHP Unterstützung. Beginnen wir mit dem Webserver.
[root@centos7 ~]# yum install httpd
Nach der Installation noch den Autostart einrichten und den Webserver starten.
[root@centos7 ~]# service httpd start
[root@centos7 ~]# chkconfig httpd on
Bevor wir jetzt testen, ob unser neuer Webserver auch antwortet, müssen wir die Firewall noch öffnen. Wo wir auch schon dabei sind, öffnen wir nicht nur den Port 80, sondern auch gleich die Ports 514 UDP und TCP für RSYSLOG.
[root@centos7 ~]# firewall-cmd –zone=public –add-port=80/tcp –permanent
[root@centos7 ~]# firewall-cmd –zone=public –add-port=514/tcp –permanent
[root@centos7 ~]# firewall-cmd –zone=public –add-port=514/udp –permanent
[root@centos7 ~]# firewall-cmd –reload
Mit http://ip-adresse sollten wir jetzt auch die CentOS Testseite sehen.
Nachdem der Webserver nun läuft, benötigen wir nur noch die PHP Unterstützung.
[root@centos7 ~]# yum install php php-mysql php-gd
LogAnalyzer installieren
Alle Voraussetzungen sind nun installiert, jetzt können wir abschließend den LogAnalyzer installieren. Mit den folgenden Komandos laden wir den LogAnalyzer (aktuell in der Version 4.1.5) herunter, entpacken die Sourcen und kopieren alles in das Verzeichnis des Webservers.
[root@centos7 ~]# wget http://download.adiscon.com/loganalyzer/loganalyzer-4.1.5.tar.gz
[root@centos7 ~]# tar zxvf loganalyzer-4.1.5.tar.gz
[root@centos7 ~]# mkdir /var/www/html/loganalyzer
[root@centos7 ~]# cp -r loganalyzer-4.1.5/src/* /var/www/html/loganalyzer
[root@centos7 ~]# cp -r loganalyzer-4.1.5/contrib/* /var/www/html/loganalyzer/
Jetzt müssen wir noch in das Verzeichnis de Webservers wechseln, zwei Skripts ausführbar machen und mit dem ersten Skript eine leere Konfigurationsdatei anlegen. Zum Abschluss an der Konsole starten wir den Werbserver nochmal neu, damit auch die PHP Unterstützung funktioniert.
[root@centos7 ~]# cd /var/www/html/loganalyzer/
[root@centos7 loganalyzer]# chmod +x configure.sh secure.sh
[root@centos7 loganalyzer]# ./configure.sh
[root@centos7 loganalyzer]# service httpd restart
Loganalyzer WebGUI
Ein Problem bei der weiteren Konfiguration ist SELinux. Dies müssen wir vor der weiteren Konfiguration noch mit folgendem Kommando deaktivieren:
[root@centos7 loganalyzer]# setenforce 0
Da SELinux ein Sicherheitsfeature von Linux ist, sollten wir es nicht dauerhaft deaktivieren. Das vorherige Kommando deaktiviert SElinux nur bis zum nächsten Reboot. Wie man es dauerhaft deaktivieren kann ist hier zu finden.
An der Konsole sind wir nun erstmal fertig. Zeit uns der WebGUI zuzuwenden. Diese erreichen wir unter http://IP-Adresse/loganalyzer/install.php.
Sollte der Installer nicht geöffnet werden, haben wir in der Konfiguration zuvor nicht alles richtig ausgeführt. Wird er jedoch angezeigt kommen wir mit Next zum zweiten Schritt.
Ist die Datei Config.php vom Webserver beschreibbar, kommen wir mit Next zum dritten Schritt.
Zuerst sollten wir den Punkt Show message details popup (1) deaktivieren. In den meisten Browsern funktioniert das leider nicht richtig. Wir aktivieren dann noch die User Database (2) und geben die benötigten Informationen (3) ein. In diesem Schritt verlangen wir auch noch die Anmeldung der Benutzer(4). Mit Next kommen wir dann zum nächsten Schritt.
Im Schritt 4 werden nun lediglich mit einem Klick auf Next die Tabellen in der Datenbank angelegt.
Mit Schritt 5 überprüfen wir das Ergebnis. Hier sollten auch Failed Statements angezeigt werden, die im Idealfall leer sind.
Jetzt legen wir noch einen lokalen Benutzer an, der sich dann später an der WebGUI anmelden darf. Wir können später noch weitere Benutzer anlegen.
Mit Schritt 7 konfigurieren wir die erste Datenquelle. Hier wählen wir natürlich MySQL aus und geben die Zugangsdaten ein, die wir vorher auf der Konsole angelegt haben. Beim Feld Database Table Name müssen wir darauf achten, dass dieser Case-Sensitive ist. Die Tabelle heißt nicht systemevents sondern SystemEvents.
Und das war es auch schon.
Nach der Anmeldung mit dem im Schritt 6 angelegten Benutzer, sehen wir bereits alle lokalen Log Einträge.
Wollen wir, dass andere Geräte ihre Logs zu unserem LogAnalyzer schicken, müssen wir dort lediglich die IP-Adresse unseres Systems im Bereich „Externer Syslog Server“ konfigurieren.
Die vorangegangene Installation sollte natürlich so nur im Lab betrieben werden. Für einen produktiven Einsatz muss die Basisinstallation von CentOS natürlich noch etwas gehärtet werden. Weitere Information dazu sind hier zu finden.
Ganz zum Schluss sollten wir noch die Konfigurationsdatei schützen. An der Kommandozeile geben wir dazu noch folgendes ein:
[root@centos7 loganalyzer]# chmod 644 Config.php
[root@centos7 loganalyzer]# rm *.sh
Housekeeping
Abhängig von der Anzahl der Systeme, die ihre Logfiles zum LogAnalyzer schicken, kann schnell der Platz auf dem Server eng werden. Deshalb hier noch einige nützliche Kommandos um den Platz im Auge zu behalten.
[root@centos7 ~]# df -hT /var/lib/mysql
Das Kommando zeigt uns in lesbarer Form den verwendeten Platz (und den noch verbleibenden) des Verzeichnisses in dem die Datenbanken liegen.
Als Nächstes wollen wir auch Wissen, wie groß die Datenbank tatsächlich ist.
[root@centos7 ~]# mysql -u rsyslogadmin -p < querysize.sql
Mit desem Kommando fragen wir direkt die Größe der Syslog Datenbank ab. Allerdings benötigt das Kommando noch ein SQL Statement, dass wir hier als externe SQL Query einfügen. Die Datei querysize.sql sieht wie folgt aus:
SELECT sum(round(((data_length + index_length) / 1024 / 1024 / 1024), 2)) as "Size in GB"
FROM information_schema.TABLES
WHERE table_schema = "Syslog"
Wenn der Platz irgendwann mal etwas eng wird, können wir alte Einträge auch aus der Datenbank löschen. Das machen wir dann direkt mit der LogAnalyzer WebGUI.
Happy Syslogging.