Nicht immer läuft alles reibungslos

Mittlerweile betreibe ich meine Applikationen fast nur noch als Docker Container. Jeder der bereits einmal mit Docker gearbeitet hat, weiss das Container plötzlich stoppen können oder schon gar nicht starten. Tritt dieser Fall ein, kommt meistens der Befehle docker logs zum Einsatz. Gerade wenn das Log grösser ist, kann sich die Analyse des Logs mühsam gestalten. Irgendeinmal bin ich über Loki gestolpert. Darüber will ich dir jetzt mehr erzählen.

Loki

Es gibt viele Log Aggregation Systeme: ELK, Graylog,Fluentd und dann gibt es eben noch Loki. Der grösste Vorteil ist wohl, dass sich Loki nahtlos in Grafana integrieren lässt. Loki ist zudem horizontal skalierbar, hochverfügbar und multi-tenant fähig. Auch die Installation ist echt easy:
docker run -d -v \
-v /dockerdata/loki/etc/config.yml:/etc/loki/config.yaml \
-v /dockerdata/loki/storage/index:/tmp/loki/index \
-v /dockerdata/loki/storage/chunks:/tmp/loki/chunks \
--restart=always \
--name=prod-loki \
--net prod-network --ip 172.18.0.131 \
grafana/loki:master
 
Der Inhalt der config.yaml Datei gibt es auf meinem Gist.

Danach ist der Loki Container bereit Daten zu empfangen. Loki besitzt kein Layer zur Authentifizierung, jedoch kann ein Reverse Proxy wie NGINX hier Abhilfe schaffen. Bei Verwendung in einer Produktivumgebung, empfehle ich dringlichst die Anwendung einer Authentifizierungsmethode. Die Übertragung der Daten sollte selbstverständlich über TLS erfolgen.

Grafana

Damit Logs aus Loki in Grafana angezeigt werden können, muss Loki als Datenquelle in Grafana konfiguriert werden.
Grafana - Loki Datenquelle
Grafana - Loki Datenquelle
Anmerkung: In meiner Docker Umgebung verwende ich ein internes Netzwerk, um die Container miteinander zu verbinden.

Loki Logging Driver

Mit dem logging Driver für Docker lassen sich Logs direkt zu Loki senden. Installiert wird dieser mit:
docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions
Docker gibt einem die Möglichkeit, ein default Logging Driver zu konfigurieren. In meinem Setup will ich jedoch nicht alle Container Logs direkt an Loki senden. Dafür konfiguriere ich den Logging Driver beim Start des Containers:
sudo docker run -d \
--name prod-koeniz-abfuhr \
--restart=always \
--net prod-network --ip 172.18.0.120 \
--log-driver=loki  \ --log-opt loki-url="http://loki.damn.li/loki/api/v1/push" \
--log-opt loki-retries=5 \
--log-opt loki-batch-size=400 \
koeniz-abfuhr

Anschliessend treffen die ersten Logs in Loki ein und somit auch in Grafana.
Grafana - Loki Beispiel
Grafana - Loki Beispiel

Promtail

Nicht nur Docker Logs lassen sich an Loki senden. Mit Promtail steht ein Agent bereit, der Logs findet, Labels hinzufügt und diese an Loki sendet. Promtail lässt sich unter anderem als Service unter Ubuntu installieren.  

In das Verzeichnis wechseln:
cd /usr/local/bin
Ordner erstellen:
sudo mkdir promtail
Promtail Binary herunterladen:
sudo curl -O -L https://github.com/grafana/loki/releases/download/v1.5.0/promtail-linux-amd64.zip
Unzippen:
sudo unzip loki-linux-amd64.zip
Ausführbar machen:
sudo chmod +x promtail-linux-amd64
  Service Datei erstellen:
sudo nano /etc/systemd/system/promtail.service

Der Inhalt dafür gibt es in meine Gist.


Promtail Konfigurationsdatei erstellen:
sudo nano /usr/local/bin/promtail/config.yaml

Der Inhalt dafür gibt es in meinem Gist.


Service  etablieren:
sudo systemctl enable promtail
  Service starten:
sudo service promtail start

Ausblick

Bald wird Loki die Extraktion von Metriken aus Logfiles unterstützen. Grafana Labs hat dazu vor kurzem ein Video veröffentlicht. Ich gehe stark davon aus, dass Loki in den nächsten Monaten an Beliebtheit gewinnen wird. 

Fazit

Die Einfachheit des Loki - Grafana Stacks hat es mir wohl angetan. Logfiles lassen sich schnell und unkompliziert in Grafana Dashboards einbinden. Die Analyse von Logfiles ist angenehmer und intuitiver. Ich wünsche mir nur noch eine Alerting Funktion, die auf Keywords wie Error oder Warning reagiert. Was haltet ihr von Loki?
Ressourcen
Titelbild: Unsplash - Erik Mclean

Tesla API Daten in Grafana

Es kommt bei mir nicht selten vor, dass Fancy Visualisierungen von Daten ein “Wow” auslösen. Ein Stück dieses Wow-Effektes will ich dir heute zeigen. In diesem Beitrag zeige ich…


0 8 Minuten

Blog Monitoring – worldPing und Grafana

Ein Blog ist schön und gut, doch was wenn der Blogger nicht bemerkt, dass sein Blog seit Tagen nicht mehr läuft. Die Hintergründe des Ausfalles interessieren den Blog Leser wenig.…


0 9 Minuten

Cloudflare Argo & Access – Kein VPN und Port Forwarding

Jahrelang habe ich die Applikationen in meinem Heimnetzwerk, via VPN oder Port Forwarding für die Aussenwelt erreichbar gemacht. Einmal war VPN die bevorzugte Lösung, das nächste…


0 15 Minuten