GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

Überwachung von Docker-Containern mit Grafana mit Dockprom

Überwachung ist eine der wesentlichen Aktivitäten in der DevOps-Welt. und ich muss Sie nicht einmal davon überzeugen, warum Überwachung eine gute Idee ist. Das weißt du doch schon, oder?

Sie können sich natürlich an Befehlszeilentools halten, um Ihren Server und die darauf ausgeführten Docker-Container zu überwachen. Ein GUI-basierter Ansatz fügt den Komfort der Analyse von Leistungsmetriken mit einer intuitiven Erfahrung hinzu, um mehrere Parameter gleichzeitig auf dem Bildschirm zu beobachten Es ist einfacher, das Überwachungs-Dashboard mit weniger technisch versierten Personen zu teilen.

In diesem Tutorial zeige ich Ihnen, wie Sie mit Dockprom ein Monitoring für Docker-Container einrichten und dank Grafana optisch ansprechend präsentieren können.

Überwachung von Docker-Hosts und -Containern mit Dockprom

Dockprom ist ein solcher Stapel, der verschiedene Überwachungstools als kollektives Toolset für Ihre Serverüberwachungsanforderungen ausführt.

stefanprodan/dockpromÜberwachung von Docker-Hosts und -Containern mit Prometheus, Grafana, cAdvisor, NodeExporter und AlertManager – stefanprodan/dockprom GitHubstefanprodan

Denken Sie daran, dass das Beispiel hier auf der Nginx-Reverse-Proxy-Konfiguration basiert. Die offizielle Dockprom-Konfiguration basiert auf Caddy.

Bei Linux Handbook und High On Cloud verwenden wir standardmäßig Nginx. Also habe ich die Dockprom-Konfiguration so umgestaltet, dass sie auf Nginx statt auf Caddy basiert. Das Ergebnis sieht sehr einfach aus wie unsere vorherigen Nginx-Bereitstellungen.

Grundlagen für die Dockprom-Einrichtung

Dockprom verwendet die folgenden Tools zur Bereitstellung einer Überwachungslösung für Ihren Docker-Host und Ihre Container.

Grafana

Mit Grafana können Sie Metriken und Protokolle abfragen, visualisieren und warnen, unabhängig davon, wo sie gespeichert sind. Dies wird das primäre und einzige Web-Frontend sein, über das Sie alle verbleibenden Backend-Anwendungen nutzen werden, die in den Abschnitten der verbleibenden Tools geteilt werden.

Daher müssen Sie hier die beliebten Nginx-basierten Umgebungsvariablen hinzufügen, die Sie die ganze Zeit über für den Zugriff auf unsere Anwendungen von überall im Internet verwendet haben:

environment:
  - VIRTUAL_HOST=dockprom.domain.com
  - LETSENCRYPT_HOST=dockprom.domain.com

Stellen Sie sicher, dass Sie dies entsprechend Ihrer Domain oder Subdomain ändern.

Prometheus

Prometheus ist ein Open-Source-Systemüberwachungs- und Warn-Toolkit, das weltweit von Tausenden verwendet wird.

Pushgateway

Das Pushgateway ist ein Zwischendienst, der es Ihnen ermöglicht, Metriken von Jobs zu pushen, die nicht gescraped werden können. Vielleicht möchten Sie dies lesen, um wirklich zu wissen, ob Sie es wirklich brauchen. Dies liegt daran, dass es nur wenige Fälle gibt, in denen dies erforderlich wäre.

Alarmmanager

Der Alertmanager verarbeitet Warnungen, die von Clientanwendungen wie dem Prometheus-Server gesendet werden. Es kümmert sich um die Deduplizierung, Gruppierung und Weiterleitung an die richtige Empfängerintegration wie E-Mail, PagerDuty oder OpsGenie. Es kümmert sich auch um die Stummschaltung und Unterdrückung von Warnungen.

cAdvisor

cAdvisor ist ein Open-Source-Tool von Google, das Containerbenutzern einen Einblick in die Ressourcennutzung und die Leistungsmerkmale ihrer laufenden Container gibt.

In dieser speziellen Konfiguration hatte ich ein Problem mit dem Abrufen von zwei Metriken basierend auf zwei entsprechenden Fehlern nach dem Bereitstellen der offiziellen cAdvisor-Konfiguration, die im Dockprom-Stack angegeben ist:

Failed to get system UUID: open /etc/machine-id: no such file or directory
Could not configure a source for OOM detection, disabling OOM events: open /dev/kmsg: no such file or directory

Ich habe im offiziellen cAdvisor-Repository nachgeschlagen, wo Lösungen bereitgestellt wurden. Die erste funktionierte, aber die zweite war nicht ganz das, wonach ich gesucht hatte, da diese Lösung auf einem docker run basierte basierter Startbefehl.

Ein Docker Compose-Fix wurde benötigt. Ich habe zuerst versucht, /dev/kmsg zu mounten aber das würde nicht funktionieren. Schließlich basierend auf dem docker run basierte Lösung habe ich festgestellt, dass Docker Compose in ähnlicher Weise ein separates Flag namens devices bereitstellt die zum Mounten von /dev/kmsg verwendet werden kann als Gerät. Hier können Sie darüber lesen.

Die Lösung für das erste Problem bestand also darin, Folgendes zu den Zeilen im Abschnitt „Volumes“ hinzuzufügen:

	volumes:
  	  ---
      ---
      - /etc/machine-id:/etc/machine-id:ro
      - /var/lib/dbus/machine-id:/var/lib/dbus/machine-id:ro

Der zweite ist wie gerade besprochen:

    devices:
      - /dev/kmsg:/dev/kmsg

Beachten Sie, wie wichtig solche Metriken für das Mounten vom Host sind, da es der Host ist, den Sie über Docker überwachen möchten.

Knoten-Exporter

Der Prometheus Node Exporter stellt eine Vielzahl von Hardware- und Kernel-bezogenen Metriken bereit. Es ähnelt der Darstellung von Metriken in cAdvisor.

Wenn Sie alle oben genannten Punkte zusammenfassen, sieht Ihre vollständige Docker Compose-Datei so aus:

version: '3.7'

networks:
  net:
    external: true

volumes:
    prometheus_data: {}
    grafana_data: {}

services:

  prometheus:
    image: prom/prometheus:v2.24.0
    container_name: prometheus
    volumes:
      - ./prometheus:/etc/prometheus
      - prometheus_data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.console.libraries=/etc/prometheus/console_libraries'
      - '--web.console.templates=/etc/prometheus/consoles'
      - '--storage.tsdb.retention.time=200h'
      - '--web.enable-lifecycle'
    restart: on-failure
    networks:
      - net
    labels:
      org.label-schema.group: "monitoring"

  alertmanager:
    image: prom/alertmanager:v0.21.0
    container_name: alertmanager
    volumes:
      - ./alertmanager:/etc/alertmanager
    command:
      - '--config.file=/etc/alertmanager/config.yml'
      - '--storage.path=/alertmanager'
    restart: on-failure
    networks:
      - net
    labels:
      org.label-schema.group: "monitoring"

  nodeexporter:
    image: prom/node-exporter:v1.0.1
    container_name: nodeexporter
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
    command:
      - '--path.procfs=/host/proc'
      - '--path.rootfs=/rootfs'
      - '--path.sysfs=/host/sys'
      - '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)'
    restart: on-failure
    networks:
      - net
    labels:
      org.label-schema.group: "monitoring"

  cadvisor:
    image: gcr.io/cadvisor/cadvisor:v0.38.7
    container_name: cadvisor
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker:/var/lib/docker:ro
      - /etc/machine-id:/etc/machine-id:ro
      - /var/lib/dbus/machine-id:/var/lib/dbus/machine-id:ro
      #- /dev/kmsg:/dev/kmsg:rw
    #command: ["start", "--privileged"]
    restart: on-failure
    devices:
      - /dev/kmsg:/dev/kmsg
    networks:
      - net
    labels:
      org.label-schema.group: "monitoring"

  grafana:
    image: grafana/grafana:7.3.7
    container_name: grafana
    volumes:
      - grafana_data:/var/lib/grafana
      - ./grafana/provisioning:/etc/grafana/provisioning
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=admin
      - GF_USERS_ALLOW_SIGN_UP=false
    restart: on-failure
    networks:
      - net
    environment:
      - VIRTUAL_HOST=dockprom.domain.com
      - LETSENCRYPT_HOST=dockprom.domain.com

    labels:
      org.label-schema.group: "monitoring"

  pushgateway:
    image: prom/pushgateway:v1.3.1
    container_name: pushgateway
    restart: on-failure
    networks:
      - net
    labels:
      org.label-schema.group: "monitoring"

Wenn Sie neugierig sind, können Sie die obige Datei überprüfen und mit dem offiziellen Dockprom-Design vergleichen.

Bessere Betriebszeit – kostenlose Webüberwachung und StatusseiteRadikal bessere Plattform zur Überwachung der Betriebszeit mit Anrufbenachrichtigungen, Statusseiten und integriertem Störungsmanagement. Kostenloser Plan inklusive! Jipi von Metrics Watch

Docker-Host- und Containerüberwachung einrichten

Nachdem ich nun mitgeteilt habe, was der Dockprom-Stack mit den offiziellen Definitionen der Serverüberwachungstools implementiert, möchte ich nun den schrittweisen Prozess der Bereitstellung dieses Nginx-basierten Designs von Dockprom zusammen mit den wesentlichen cAdvisor-Korrekturen auflisten. P>

Zu Testzwecken können Sie eine 1-GB-Nanode auf Linode verwenden, um die Konfiguration auszuprobieren, aber für Produktionszwecke muss der Server mindestens 4 GB haben. Das liegt hauptsächlich an Prometheus.

Linode | Die unabhängige offene Cloud für EntwicklerUnsere Mission ist es, Innovationen zu beschleunigen, indem wir Cloud Computing einfach, erschwinglich und für alle zugänglich machen. Linode Ich gehe davon aus, dass Sie mit dem Konzept von Docker und Docker Compose vertraut sind. Beachten Sie auch, dass Sie nur Docker-Container überwachen können, die auf demselben Server ausgeführt werden.

Schritt 1:Rufen Sie die offizielle Dockprom-Konfiguration ab

Öffnen Sie ein Terminal auf dem Server und geben Sie den folgenden Befehl ein:

git clone https://github.com/stefanprodan/dockprom
cd dockprom

Schritt 2:Überarbeiten Sie die docker-compose.yml-Datei

Wie ich die Nginx-basierte docker-compose.yml-Datei vor einiger Zeit im Abschnitt Node Exporter besprochen und geteilt habe. Bitte bearbeiten Sie die Datei und überarbeiten Sie sie.

Schritt 3:Starten Sie die Konfiguration!

Angenommen, Sie befinden sich im selben Dockprom-Verzeichnis, führen Sie den Befehl Docker Compose aus, um den Dockprom-Stack zu starten:

docker-compose up -d

Schritt 4:Greifen Sie über Grafana auf den Dockprom-Stack zu

Denken Sie daran, dass Sie Ihre Zugriffs-URL zusätzlich in der Grafana-Konfiguration für den Webzugriff festgelegt haben? Jetzt können Sie es verwenden, um vollständigen Zugriff auf den Stack zu erhalten.

Sowohl der Benutzername als auch das Passwort wurden auf admin gesetzt . Es wird dringend empfohlen, es in ein starkes Passwort zu ändern. Ein typisches Web-Login-Panel sieht so aus:

Warten Sie eine Weile, bis die Schnittstelle geladen ist:

Bonus-Tipp

Nachdem Sie sich bei Grafana angemeldet haben, kann die schnelle Navigation zu den Metrikstatistiken zunächst überwältigend sein, weshalb ich den direkten Link zum Dashboard-Panel für den sofortigen Zugriff freigebe:https://dockprom.domain.com/dashboards

Wie Sie sehen, müssen Sie nur /dashboards hinzufügen zu Ihrer eigenen Domain oder Subdomain. Auf dieser Seite können Sie Metriken überwachen für:

  • Docker-Container
  • Hostsystem
  • Prometheus
  • Nginx

Bitte beachten Sie, dass Nginx (4. und letztes in der obigen Liste) leere Statistiken anzeigen würde, wenn es nicht direkt auf dem Host installiert wäre. Dies sollte nicht mit Jwilder Nginx verwechselt werden, da es auf Docker läuft. In einem solchen Fall müssten Sie den Nginx-Container speziell überwachen.

Hier ist der Grafana-Bildschirm für die Überwachung des Docker-Hosts:

Ich hatte den Containerüberwachungs-Screenshot bereits am Anfang dieses Artikels geteilt:

Ich hoffe, dieses kurze Tutorial hilft Ihnen beim Einrichten dieses einfallsreichen Stacks auf Ihrem Server. Auch dies ist für einen einzelnen Server nützlich. Wenn Sie Container auf mehreren Servern haben, können Sie Swarmprom vom selben Entwickler verwenden.

stefanprodan/swarmpromDocker Swarm-Instrumentierung mit Prometheus, Grafana, cAdvisor, Node Exporter und Alert Manager – stefanprodan/swarmprom GitHubstefanprodan

Wenn Sie Kommentare oder Vorschläge haben, zögern Sie bitte nicht, Ihre Meinung im Abschnitt unten mitzuteilen.


Docker
  1. Was ist Docker? Erfahren Sie, wie Sie Container verwenden – mit Beispielen erklärt

  2. Richten Sie Nextcloud mit Redis mit Docker ein

  3. Überwachung von Docker-Containern:Vorteile, Best Practices und unverzichtbare Tools

  4. 3 Strategien für automatisierte Produktionsbereitstellungen mit Docker

  5. Warum verwenden alle Docker?

So bearbeiten Sie Code in Docker-Containern mit Visual Studio-Code

So zentralisieren Sie die Protokollverwaltung mit Graylog mit Docker

So führen Sie Jenkins in Docker mit Docker Compose with Volumes aus

So entfernen Sie Docker-Container

Arbeiten mit Docker-Containern über die Befehlszeile

ctop – Top-ähnliche Schnittstelle zur Überwachung von Docker-Containern