Dies ist die archivierte Version des Blogs vom 05.01.2017. Aktuelle Beiträge findest du unter thomas-leister.de
 

Log.io Webinterface

Mit der freien Node.js Anwendung Log.io könnt ihr eure Serverlogs in Echtzeit auslesen und auf einem Web-Frontend gesammelt anzeigen lassen. Einfache Filter sind ebenfalls verfügbar. Die Basisinstallation ist schnell erledigt und auch für Einsteiger kein Problem.

Log.io installieren

Für Log.io wird ein eigener Benutzer erstellt, unter dem die Anwendung laufen wird. Damit wird ausgeschlossen, dass ein Angreifer über Sicherheitslücken in der Anwendung direkt root-Rechte erlangen kann.

sudo adduser --disabled-password --disabled-login --ingroup adm logio

Außerdem wurde der neue Benutzer „logio“ der Gruppe „adm“ zugeordnet. Die Gruppe kann auf verschiedene Log-Dateien Zugreifen – das ist mit einem normalen Benutzer nicht möglich.

Node.js und NPM installieren:

sudo apt-get install nodejs nodejs-legacy npm

Log.io kann über den Node.js Paketmanager npm installiert werden.

sudo npm install -g log.io --user "logio"
Loggt euch als logio-User ein:

sudo -i -u logio

Konfiguration

Log.io besteht aus drei Komponenten:

  • Log Server (Nimmt Logzeilen von Harvester entgegen)
  • Web Server (Stellt Weboberfläche und Websocket zur Verfügung)
  • Harvester (Öffnet Logdateien und sendet neue Logzeilen an Log-Server)

Navigiert in das Konfigurationsverzeichnis:

cd ~/.log.io/

Log Server

Wir beginnen mit der Datei „log_server.conf“. Hier können Interface und Port eingestellt werden, über die der Log-Server erreichbar sein wird. Standardmäßig bindet sich der Server an die Adresse „0.0.0.0“, also jedes verfügbare Netzwerkinterface. Das bedeutet: Auch von außen (über die öffentliche Server-Schnittstelle) könnten Log-Inhalte an den Server geschickt werden. Um Missbrauch zu verhindern, setzt man die Einstellung auf den lokalen Port „127.0.0.1“. Jetzt ist der Log-Server nur noch über Harvester erreichbar, die sich auf demselben Server befinden.

Der Port wird auf der Standardeinstellung belassen.

Web Interface

Weiter geht es mit der Konfiguration der Weboberfläche und des Websockets (Datei: „web_server.conf“). Für den einfachen Betrieb können alle Einstellungen auf dem Standard bleiben. Wer neugierige, fremde Benutzer aussperren will, kann den Block unter „auth“ auskommentieren und eigene Zugangsdaten für die Weboberfläche festlegen. (Zum Auskommentieren „/*“ und „*/“  vor und nach dem Block entfernen.)

Außerdem können für eine verschlüsselte Verbindung die Dateipfade zu SSL-Zertifikat und -Key angegeben werden.

Harvester

Der Harvester greift auf die Logdateien zu und schickt neue Inhalte an den Log Server. Deshalb müssen in seiner Konfigurationsdatei „harvester.conf“ die Pfade zu den Log-Dateien und ihre Namen festgelegt werden.

Hier ein Beispiel für die Überwachung der Logs von Nginx Webserver, Mailserver und der Linux Authentifizierung:

exports.config = {
  nodeName: "meinserver.tld",
  logStreams: {
    nginx: [
      "/var/log/nginx/access.log",
      "/var/log/nginx/error.log"
    ],
    mailserver: [
      "/var/log/mail.log",
      "/var/log/mail.err"
    ],
    auth: [
      "/var/log/auth.log"
    ]
  },
  server: {
    host: '127.0.0.1',
    port: 28777
  }
}

Unter „server“ wird angegeben, an welchen Log-Server die Ergebnisse geschickt werden sollen bzw welchen Port. Es ist auch möglich, mehrere Harvester auf andere Linux-Server zu verteilen und sie so einzustellen, dass sie ihre Ergebnisse jeweils an einen zentralen Log-Server schicken. Dafür müsste die „host“-Adresse jedes Harvesters angepasst werden und die Host-IP des Log-Servers von „127.0.0.1“ zurück auf „0.0.0.0“ gestellt werden.

In dieser Anleitung soll jedoch ein Harvester genügen, sodass nur die Log-Quellen konfiguriert werden müssen.

Log.io starten

Log.io ist jetzt fertig konfiguriert und kann gestartet werden. Zuerst wird der Log-Server inkl. Webserver / Websocket-Server gestartet:

log.io-server

… danach folgt der Harvester:

log.io-harvester

Zum starten der beiden Komponenten empfehle ich screen. => Das Terminal wird dann nicht durch Ausgaben blockiert.

Die Weboberfläche wird über ip.des.ser.vers:28778 aufgerufen und sollte je nach Auslastung des Servers einige Log-Zeilen anzeigen. Gff. müssen die Log-Quellen auf der linken Seite zuerst aktiviert werden.

Log.io Dienste über Uptime starten

[Update am 03.12.2014:] Alex war so freundlich und hat zwei Scripte für Upstart bereitgestellt, über die der Log-Server und der Harvester automatisch beim Systemstart gestartet werden können.

Upstart Script für Log-Server (log.io-server):

# description "start and stop the logio-server"

start on runlevel [2345]
stop on runlevel [^2345]

console log
chdir /home/logio/
setuid logio
setgid logio

env HOME=/home/logio
respawn
respawn limit 20 5

exec log.io-server

Upstart Script für den Log Harvester:

# description "start and stop the logio-harvester"

start on runlevel [2345]
stop on runlevel [^2345]

console log
chdir /home/logio/
setuid logio
setgid logio

env HOME=/home/logio/
respawn
respawn limit 20 5

exec log.io-harvester

Die Upstart-Scripte werden in /etc/init/ als [name].conf Dateien abgelegt und neu eingelesen:

sudo initctl reload-configuration

Log.io mit Nginx-Proxy

Wer sowieso schon einen Nginx-Server laufen hat, kann Log.io damit verbinden. So kann dem Webinterface z.B. eine eigene Subdomain zugeteilt werden (=> Reverse Proxy). Leider ist es mit der Standard-HTTP-Proxy Konfiguration nicht getan. Da für erhöhte Effizient weiterhin WebSockets (ws:// – Protokoll) genutzt werden sollen, muss die Konfiguration erweitert werden.

Eine Nginx-Konfiguration könnte beispielsweise so aussehen:

server {
    listen 80;
    listen [::]:80;
    listen 443 ssl;
    listen [::]:443 ssl;
    
    server_name logio.domain.tld;

    ssl_certificate /etc/myssl/public-combined.pem;
    ssl_certificate_key /etc/myssl/privkey.pem;

    # Aufrufe der Logio Weboberfläche nicht loggen.
    access_log off;

    location / {
        access_log off;
        proxy_pass http://127.0.0.1:28778;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # WebSocket support (nginx 1.4)
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

Da nun auch über den Nginx-Proxy auf das Webinterface zugegriffen werden kann, kann die Erreichbarkeit des Log.io Webinterfaces auf die lokale Adresse beschränkt werden. („127.0.0.1“ statt „0.0.0.0“ in web_server.conf)

 


Post published on 2. Dezember 2014 | Last updated on 22. Dezember 2014
Tags:               

Diesen Blog unterstützen

Wenn Dir der Beitrag gefallen hat, freue ich mich über einen kleinen Obolus :-) Bitcoin QR Code

PayPal-Seite: https://www.paypal.me/ThomasLeister
Meine Bitcoin-Adresse: 15z8 QkNi dHsx q9WW d8nx W9XU hsdf Qe5B 4s

Siehe auch: Unterstützung

Informationen zum Autor

Thomas Leister

Geb. 1995, Kurzhaar-Metaller, Geek und Blogger. Nutzt seit Anfang 2013 ausschließlich Linux auf Desktop und Servern. Student der Automobilinformatik an der Hochschule für angewandte Wissenschaften in Landshut.

12 thoughts on “Ubuntu Server: Logs in Echtzeit auslesen mit Log.io

  • Wow, das ist tatsächlich ein großartiges Tool.

    Bei einer Testinstallation auf einem 14.04.1 Server gabs allerdings einen Fehler, Referenz: http://pastebin.com/wVa5U6D1
    Ein sudo apt-get install nodejs-legacy hat das Problem dann gelöst, solltest du vllt, noch aufnehmen.

    Wenn ich das Tool wie bei dir beschrieben installiere, bekomme ich beim Aufruf allerdings den Fehler og.io-server: command not found
    Das Problem besteht allerdings nicht, wenn man Log.io wie vom beschrieben mit einem nichtlogiouser@logio.test.host:~$ sudo npm install -g log.io --user "logio"
    installiert.

    Btw: Man kann Prozesse mit einem & in den Hintergrund schicken, also z.B.:
    log.io-server & , dann ist so etwas wie screen unnötig ;)

    Eine Frage in dem Kontext noch: Du beschreibst eine passende Rerverse-Proxy-Konfiguration. Hast du für log.io-Server|Harvester die ganze Zeit ein Terminal offen oder gibt es dafür ein passendes Initscript?

  • Hallo,

    tolel Sache. Danke!
    Habt Ihr schon eine Lösung für Datumsbasierte Logs? Gibt es da eine Config-Lösung direkt in log.io ?
    Oder müsste man einen Wrapper drumherum bauen?

    Beispiel:
    /var/log/20141201-application.log

    Eine DateVariable die der Harvester täglich anpasst? Oder einen wrapper der täglich per ln auf das korrekte file linkt?

    Danke
    VG
    Marc

  • Weiteres Problem auf das ich gestoßen bin und keine Lösung finde.

    Multiple nodeName ist nicht in ein und derselben Configdatei möglich, falls doch wie? (er nimmt sonst nur den letzten Node).
    Wenn das nicht gehen sollte, kann ich mehrere Harvester auf dem selben System starten aber alle mit einer anderen Config füttern?

    Hintergrund ist ich hab einen Linuxserver er sich die Log-verzeichnisse von einer Reihe Windowsserver mounted.

    Danke

  • Hi,
    erst einmal danke für das aufmerksam machen auf dieses Tool, das sieht wirklich super aus,
    aber ich habe leider ein Problem beim Folgen deiner Anleitung, nach der Installation mit npm existiert bei mir beim Nutzer „logio“ kein ~/.log.io/-Verzeichnis, dies existiert nur bei dem Nutzer, mit dem ich den npm-Befehl ausgeführt habe.
    Ist dies das normale Verhalten und ich kann das Verzeichnis + die Config-Files einfach manuell anlegen oder habe ich doch irgendwas falsch gemacht und übersehe da gerade was?

    • Jonas.bardroff@t-online.de

      Selbes Problem hier auserdem werden die Befehle log.io-server und log.io-harvester nicht erkannt. Command not found.

  • Hi,
    cooler Blog! Danke für Deine vielen Anleitungen. Die helfen mir echt weiter.

    Aber mal eine Frage zu den Upstart Skripten…
    Habe die beiden Skripte unter “/etc/init/” als “log.io-server.conf” und “log.io-harvester.conf” abgelegt, das ganze mit “initctl reload-configuration” neu geladen, aber die beiden Skripte werden nicht ausgeführt…
    Wenn ich das “log.io-server”-Skript manuell mit “initctl start log.io-server” aufrufe, bekomme ich nur einen “initctl: Job failed to start”…

    Kannst Du mir hier weiterhelfen?
    System Ubuntu 14.04…

    Danke und Gruß,
    Jens

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.