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)
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?
https://legacy.thomas-leister.de/ueber-mich-und-blog/
Hi,
ich habe ein bisschen herumexperimentiert bei der Installation. Kann deshalb sein dass die Fehler daher kommen ;)
Hab das jetzt mal so abgeändert wie du mir das beschrieben hast. Hoffentlich funktioniert es so jetzt auch bei allen anderen Usern.
Das Terminal brauche ich ja nicht offen zu lassen wegen screen ;) Ein Init-Script habe ich (noch?) nicht dazu… Da blicke ich nicht wirklich durch.
LG Thomas
Ich hab mal für Upstart zwei Skripte vorbereitet…
https://gitlab.auf-feindgebiet.de/snippets/1
https://gitlab.auf-feindgebiet.de/snippets/2
https://legacy.thomas-leister.de/ueber-mich-und-blog/
Thx, darf ich sie gleich so in meinen Post übernehmen?
LG Thomas
Natürlich
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
https://legacy.thomas-leister.de/ueber-mich-und-blog/
Hi,
für variable Logdateinamen kenne ich noch keine Lösung. Wenn jemand bescheid weiß – einfach melden ;)
Alternativ könnte man das Ding natürlich forken und das Feature „einfach“ implementieren.
LG Thomas
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
https://legacy.thomas-leister.de/ueber-mich-und-blog/
Hi,
nein, das ist nicht möglich. Du kannst pro Harvester nur einen „NodeName“ festlegen. Mehrere Harvester auf einem System sind so einfach nicht möglich, glaube ich. Hab es noch nicht ausprobiert. Du müsstest zu jeder Instanz dann auch die passende Config Datei angeben.
LG Thomas
http://thor77.org
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?
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