Docker Error Logs via Push
Ihr könnt also jeden einzelnen Container mit “docker logs {ID}” abfragen, oder Ihr verwendet den alt bewährten ELK Stack. Für mich sind beide Lösungen nicht zufrieden stellend. Erstere ist einfach unpraktisch und der ELK Stack benötigt zu viele Resourcen und Wartungsaufwand. Die Lösung ist “Docker Logs via Pushover“!
Erst kürzlich habe ich auf dem DockerHub, für diesen Zweck, folgendes Image veröffentlicht: Berndinox/fluentd-pushover @ DockerHub
Das Prinzip ist einfach
Via nativen Docker Logging Treiber werden alle Logs die innerhalb eines Containers generiert werden an die Fluentd-Pushover Container weitergeleitet. Dieser analysiert die Log-Einträge und falls diese ein “Fail” oder “Error” beinhaltet wird dieser Log-Eintrag via Pushover weitergeleitet.
Klarer Vorteil
Es ist keine Datenbank notwendig, keine komplexe ELK Umgebung, welche Resourcen frisst, außerdem wird nur minimaler Speicherplatz benötigt.
Howt
Der empfohlene Weg ist der Einsatz via Docker-Compose. Ein beispiel findet Ihr auf meinem Github Repo, oder anbei:
version: '2'
services:
fluentd:
#build: .
image: berndinox/fluentd-pushover
hostname: fluentd
expose:
- "24224"
volumes:
- ./fluent.conf:/fluentd/etc/fluent.conf
restart: always
networks:
logs:
ipv4_address: 10.0.0.10
networks:
logs:
driver: bridge
ipam:
driver: default
config:
- subnet: 10.0.0.0/24
gateway: 10.0.0.1
Es wird ein Netzwerk mit Subnet 10.0.0.0/24 erstellt, der Fluentd Container macht sein Service via Port 24224 unter IP 10.0.0.10 für alle anderen Container verfügbar.
Diese müssen nur mehr die Logs an diese Adresse weiterleiten, dies geschieht wie folgt:
version: '2'
services:
ping:
image: dockercloud/hello-world
expose:
- "80/tcp"
logging:
driver: "fluentd"
options:
fluentd-address: "10.0.0.10:24224"
Sprich, bei allen anderen Container-Services muss lediglich der Logging Driver angepasst werden, sowie die IP.
Achtung
- Ihr müsst auf Pushover.net einen Account erstellen und euren User sowie Account Token in der fluent.conf Dateil hinterlegen.
- Verwendet Ihr meine Compose Vorlage wird die fluentd.conf via Volume in den Container gemappt. Alternativ kann man sein eigenes Image bauen lassen (Dockerfile) und via “ADD fluentd.conf /etc/fluentd/” die Configuration hinzufügen.