Zentraler Logserver mit Syslog-NG, MariaDB und lggr.io Webinterface

lggr.io ist ein schnelles und einfaches Webinterface für syslog-ng. Wer keinen ELK-Stack mit Java benötigt findet mit lggr.io eine gute Alternative.
Läuft bei mir in einer Debian 9 VM mit 2 GB RAM und ca. 15 loggenden hosts (Server, Router, Switche) ohne Probleme.

benötigte Software:

  • Apache, MariaDB, PHP, Redis, Syslog-NG

In der Anleitung der lggr.io howto wird noch stunnel installiert. Kommt bei mir aber nicht zum Einsatz.

30.04.2019 – Anleitung aktualisiert (Fehler beim Datenbanknamen in der db.conf)
15.07.2018 – Anleitung aktualisiert
28.06.2018 – Server Setup: Debian 9.4 / Apache 2.4 / MariaDB 10.1 / PHP 7.0 / syslog-ng 3.8

Apache

Die Apache Module headers und expires werden benötigt.

Apache neu starten.

PHP

PHP Zeitzone setzen.

Redis

Redis Server Status überprüfen.

Bug – Beim Aufruf des lggr.io Webinterfaces erscheint eventuell eine Redis Fehlermeldung.

Bug – Wenn es mit dem Redis Server Probleme gibt, können wir in der  lggr_class.php LggrCacheRedis auf File ändern.

lggr.io Webinterface

Das lggr Webinterface benutzt mehrere 3rd party libraries, wie jquery und bootstrap.
Die Pakete sind in den GIT Quellen nicht enthalten und müssen separat heruntergeladen werden.

In der inc/config_class.php wird auf den Ordner contrib verwiesen. Ggf. die Pfade anpassen.

Der Zugriff auf das Webinterface wird mit der basic authentication geschützt.
In der .htaccess Datei ist das authfile /var/www/webuser angegeben. Wir erstellen die Datei und legen den Zugriff für den Benutzer logger an.

Apache .htaccess aktivieren

Der webuser benötigt Schreibzugriff auf das logger cache Verzeichnis.

Bug – Archivieren funktioniert nicht. In der Datei js/lggr.js stimmen zwei Pfade zur do.php nicht!

Bug – Bei dem Relative Verteilung der Level Chart, ist die Farbe der Errors blau, sollte aber rot sein. In der Datei js/lggr_stat_data.php fehlt ein #.

MariaDB Server und Client

Datenbank logger erstellen.

Die user.sql anpassen.

Datenbanknamen in der db.sql anpassen.

Die Tabellen in der Datenbank logger anlegen.

Die angelegten Benutzer in der user.sql im Datenbankserver anlegen.

Die in der user.sql gesetzten Namen und Passwörter in den beiden config Dateien anpassen.

Bug – Die Tabellennamen in der db.sql sind alle lowercase, aber im PHP Code teilweise gemischt!. Fehlermeldung: Table ‚lggr.Today‘ doesn’t exist
In der /etc/mysql/mariadb.conf/50-server.cnf unter dem Abschnitt [mysqld] folgenden Eintrag hinzufügen:

syslog-ng Server

Im Konfigurationslayout von Syslog-NG werden alle .conf Dateien unter /etc/syslog-ng/conf.d/ verarbeitet.
Die Hauptkonfigurationsdatei muss also nicht mehr verändert werden. Konfigurationsdatei für lggr erstellen.

Noch eine Anpassung in der default syslog-ng Konfiguration.

Syslog-ng neu starten.

syslog-ng Clients

Dafür kann auch hier syslog-ng installiert und genutzt werden.

Wir erstellen die Datei /etc/syslog-ng/conf.d/10logger-client.conf mit folgendem Inhalt.

Es kann aber auch der schon vorhandene rsyslog genutzt werden! Dazu in der /etc/rsyslog.conf als ersten Eintrag hinzufügen.

Nach Änderungen der Konfiguration auch hier natürlich den entsprechenden Dienst neu starten.

syslog-ng debugging

Nach dem anlegen der zwei *.conf Dateien startete syslog-ng nicht mehr!
Um herauszubekommen wo genau der Fehler liegt lässt sich syslog-ng im debug Modus starten.

locales

Der Server muss die richtige Systemsprache installiert haben. Der Befehl locale -a sollte mindestens en_US.utf8 und ggf. de_DE.utf8 ausgeben.

cronjobs

Für die Wartungsarbeiten erstellen wir die Datei /etc/cron.d/lggr mit folgendem Inhalt:

Das Zeitintervall für die automatische Bereinigung alter Einträge finden wir in der Datei inc/lggr_class.php

Ich setze das bei mir auf 2 Wochen, mehr benötige ich nicht. Hält die Datenbank schlank und schont Ressourcen.

Fazit

Die Installation ist schon ein bisschen tricky und nicht mal eben in 5 Minuten erledigt.
Wer die Mühe aber nicht scheut wird mit einem stabilen zentralen Syslog Server und schönem Webinterface belohnt. :)

13 Gedanken zu “Zentraler Logserver mit Syslog-NG, MariaDB und lggr.io Webinterface”

  1. Hi

    bei mir sieht es aktuell aus als hätte es ein 3 Jähriger erstellt, das Contrib Paket habe ich heruntergeladen und extrahiert, sieht allerdings immer noch unschön aus. Muss da noch weiteres eingestellt werden? Alles Dienste laufen.

    Gruß

    • In der inc/config_class.php wird auf den Ordner contrib verwiesen. Stimmen die Pfade?

      /* local storage */
      $this->setUrlBootstrap(‚/contrib/bootstrap/‘);
      $this->setUrlJquery(‚/contrib/jquery/‘);
      $this->setUrlJqueryui(‚/contrib/jqueryui/‘);
      $this->setUrlJAtimepicker(‚/contrib/timepicker/‘);
      $this->setUrlChartjs(‚/contrib/chartjs/‘);
      $this->setUrlJQCloud(‚/contrib/jqcloud/‘);

  2. Hallo,
    ich muss mich hier Jörgs Aussage anschliessen, die Ansicht sieht sehr bescheiden aus und die Pfade sind bei mir richtg gesezt. In meinem Fall auf /var/www/contrib..
    Gibt es noch irgendwelche Module die für PHP zusätzlich benötigt werden?

    Vielen Dank im Voraus TBC

  3. Hallo zusammen,
    der Fehler ist jetzt gefunden, ich habe das Verzeichnis contrib nach /var/www/html/ verschoben. Also eine ebene tiefer und jetzt geht alles wie es soll.
    Wünschenswert ist auch noch eine Filterung nach „Hosts“ evtl. kann man dies auch noch einbauen.

    Merci für die Super Beschreibung, diese hat sehr geholfen!

    MfG TBC

  4. Hallo, Habe mir den lggr.io auf einen Raspberry installiert. Habe allerdings Probleme mit der Datenbank. Bekomme immerwieder Schwierigkeiten, dass die DB case-sensitive ist. Das heist ich benötige Tabellen mit z.Bsp. Archived und archived oder LastHour , Lasthour und lasthour. Ist das ein Problem welches nue ich habe?
    Gruß Wolfgang

    • Schau dir mal in der inc/lggr_class.php die SQL Statements an.
      Ich kann mich daran erinnern da auch schonmal Anpassungen an den Namen der Tabellen gemacht zu haben.

  5. Hallo Wolfgang,
    das Problem mit der case-sensitive MariaDB hatte ich auch unter Debian 9.
    Lässt sich in der MySQL-Konfiguration beheben. Bei mir unter „/etc/mysql/mariadb.conf.d“ in der Datei „50-server.cnf“ unterhalb der Sektion [mysqld] folgendes einfügen:
    lower_case_table_names = 1
    Funktionierte nach dem Reboot einwandfrei.
    Gruß Ralf

  6. Hey,
    nachdem ich mysql -u root -p < /var/www/html/logger/doc/user.sql ausgeführt habe bekomme ich folgenden Output: ERROR 1146 (42S02) at line 10: Table 'logger.servers' doesn't exist.
    Wie kann ich das beheben?
    Gruß N3x

    • Habs gerade mal ausprobiert, ich bekomme auch den Fehler! :(

      In der db.sql den Datenbanknamen anpassen (von lggr auf logger):

      CREATE DATABASE IF NOT EXISTS logger;
      USE logger;

      Die lggr und logger SQL Datenbanken löschen, logger neu erstellen und nochmal ausführen.
      Damit hats dann ohne Fehlermeldung funktioniert.

      Anleitung hab ich aktualsiert. ;)

  7. Hi alles soweit ok aber folgende fehler kommen bei dir auf :

    Beim Aufruf der Webseite:

    You must enable basic authentication

    Bei starten Restart vom:

    syslog-ng.service - System Logger Daemon
    Loaded: loaded (/lib/systemd/system/syslog-ng.service; enabled; vendor preset: enabled)
    Active: failed (Result: exit-code) since Wed 2019-05-22 10:45:23 CEST; 5s ago
    Docs: man:syslog-ng(8)
    Process: 12054 ExecStart=/usr/sbin/syslog-ng -F $SYSLOGNG_OPTS (code=exited, status=1/FAILURE)
    Main PID: 12054 (code=exited, status=1/FAILURE)
    Status: "Starting up... (Wed May 22 10:45:23 2019"

    Kannst du mir paar tipps geben?

    • Dann hast du beim Apache die basic authentication nicht aktiviert.

      Starte mal syslog-ng mit debugging, dann sollte er dir den Fehler ausgeben.
      $ syslog-ng -Fevd

      Steht alles in meiner Anleitung. ;)

Schreibe einen Kommentar