From b91f1ec3d572d2232912cce11a1b31ada5f08470 Mon Sep 17 00:00:00 2001 From: Simon Rieger Date: Thu, 17 Jul 2025 03:22:57 +0200 Subject: [PATCH] add README --- README.md | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..deed610 --- /dev/null +++ b/README.md @@ -0,0 +1,79 @@ +# Docker Image Update Prometheus Exporter + +Dieser Exporter prüft für **alle laufenden Docker-Container auf dem Host**, ob das jeweils verwendete Image-Tag im zugehörigen Registry ein Update aufweist (Digest-Vergleich). Das Ergebnis wird als Metrik für Prometheus exportiert und parallel als Log ausgegeben. + +## Features + +- Prüft ausschließlich Images der aktiven (laufenden) Container +- Unterstützt beliebige Registries (inkl. private Registries mit Docker-Login) +- Exportiert Metrik: + `docker_image_update_available{container_name, image, tag}` + (1 = Update vorhanden, 0 = aktuell) +- Logging der Prüfungen im Terminal + +## Nutzung + +### Voraussetzungen + +- Docker läuft lokal +- Zugriff auf /var/run/docker.sock (bei Ausführung in einem Container: Volume mount!) +- Go 1.19+ (zum Selbst-Bauen) +- Abhängigkeiten: + - github.com/docker/docker + - github.com/regclient/regclient + - github.com/prometheus/client_golang + +### Build & Run (nativ) + +```bash +go build -o docker-image-exporter +./docker-image-exporter +``` + +### Oder via Docker + +```Dockerfile +FROM golang:1.21-alpine AS builder +WORKDIR /app +COPY . . +RUN go build -o exporter . + +FROM alpine +COPY --from=builder /app/exporter /usr/local/bin/exporter +ENTRYPOINT ["/usr/local/bin/exporter"] +``` + +```bash +docker build -t docker-image-exporter . +docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -p 9788:9788 docker-image-exporter +``` + +### Prometheus Konfiguration + +Job z.B. so eintragen: + +```yaml +scrape_configs: + - job_name: 'docker_image_update' + scrape_interval: 24h # oder beliebiges passendes Intervall + static_configs: + - targets: ['localhost:9788'] +``` + +## Metrik-Beispiel + +``` +docker_image_update_available{container_name="/mein_container",image="nginx",tag="latest"} 1 +docker_image_update_available{container_name="/db",image="postgres",tag="16"} 0 +``` +1 = Update verfügbar, 0 = kein Update nötig. + +## Hinweise + +- Für private Registries muss vorab ein `docker login` erfolgen. +- Der Exporter prüft parallelisiert, Logging erfolgt auf der Konsole. +- Es werden ausschließlich aktuell laufende Container betrachtet. +- Das Intervall für Prometheus sollte je nach Anwendungsfall gewählt werden; typischerweise genügt einmal täglich. + +Fragen, Bugs oder Feature-Wünsche? +Gerne im Issue-Tracker oder direkt anpassen!