CodeGym /Kurse /Docker SELF /Einrichtung von Monitoring und Logging

Einrichtung von Monitoring und Logging

Docker SELF
Level 24 , Lektion 1
Verfügbar

7.1 Einrichtung des Monitorings mit Prometheus

In diesem Schritt schauen wir uns an, wie man Monitoring und Logging für unsere Multi-Container-Anwendung einrichtet. Das ermöglicht es, den Zustand und die Performance der Services zu verfolgen und Logs zu sammeln und zu analysieren, um Probleme zu diagnostizieren.

Ziel: Metriken von Services sammeln und visualisieren, um die Performance und den Zustand der Anwendung zu überwachen.

Installation und Einrichtung von Prometheus

In diesem Beispiel wird Prometheus mit Docker gestartet. Dadurch ist es plattformübergreifend und ermöglicht eine gleichermaßen effektive Bereitstellung des Monitorings auf jedem Betriebssystem, das Docker unterstützt.

1. Erstellen eines Verzeichnisses für die Konfiguration von Prometheus:

Terminal

mkdir prometheus
cd prometheus

2. Erstellen der Konfigurationsdatei prometheus.yml:

Yaml

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'flask-app'
    static_configs:
      - targets: ['backend:5000']
  - job_name: 'node-app'
    static_configs:
      - targets: ['frontend:3000']

3. Erstellen eines Dockerfiles für Prometheus:

dockerfile

FROM prom/prometheus
COPY prometheus.yml /etc/prometheus/prometheus.yml

4. Hinzufügen von Prometheus zu compose.yaml:

Yaml

version: '3'

services:
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    networks:
      - task-network

  backend:
    build: ./backend
    ports:
      - "5000:5000"
    depends_on:
      - database
    networks:
      - task-network
    environment:
      - DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb

  database:
    image: postgres:13
    environment:
      - POSTGRES_DB=taskdb
      - POSTGRES_USER=taskuser
      - POSTGRES_PASSWORD=taskpassword
    networks:
      - task-network
    volumes:
      - db-data:/var/lib/postgresql/data

  nginx:
    build: ./nginx
    ports:
      - "80:80"
    depends_on:
      - frontend
      - backend
    networks:
      - task-network

  prometheus:
    build: ./prometheus
    ports:
      - "9090:9090"
    networks:
      - task-network

networks:
  task-network:
    driver: bridge

volumes:
  db-data:

7.2 Installation und Einrichtung von Grafana

1. Erstellen eines Verzeichnisses für die Grafana-Konfiguration:

Terminal

mkdir grafana
cd grafana

2. Erstellen einer Dockerfile für Grafana:

dockerfile

FROM grafana/grafana

3. Hinzufügen von Grafana zu docker-compose.yml:

Yaml

  grafana:
    image: grafana/grafana
    ports:
      - "3033:3000"
    depends_on:
      - prometheus
    networks:
      - task-network

4. Einrichtung von Grafana für Prometheus:

  1. Starte die Container mit docker compose up.
  2. Öffne die Grafana-Oberfläche im Browser unter http://localhost:3033.
  3. Melde dich mit den Standard-Anmeldedaten (admin/admin) an.
  4. Gehe zu "Configuration" -> "Data Sources" und füge eine neue Datenquelle hinzu.
  5. Wähle "Prometheus" und gib die URL http://prometheus:9090 ein.
  6. Speichere die Einstellungen.

Erstellen von Dashboards in Grafana

  1. Ein neues Dashboard erstellen:
    • Gehe zu "Create" -> "Dashboard".
    • Klicke auf "Add new panel".
    • Wähle im "Query"-Bereich die Datenquelle Prometheus.
    • Gib eine PromQL-Abfrage ein, um die Metriken abzurufen. Zum Beispiel, um die Nutzung der CPU zu überwachen:
  2. Promql
    
    rate(container_cpu_usage_seconds_total[1m]) 
            
  3. Panel-Einstellungen:
    • Wähle den Diagrammtyp (z. B. "Graph").
    • Konfiguriere das Panel (z. B. Titel, Legende, Achsen usw.).
    • Klicke auf "Apply", um das Panel zu speichern.
  4. Zusätzliche Panels erstellen:
    • Wiederhole die Schritte, um zusätzliche Panels für andere Metriken wie Speicher, Netzwerk und Festplatte zu erstellen.

7.3 Einrichtung des ELK Stack

Einrichtung von Logging mit ELK Stack (Elasticsearch, Logstash, Kibana).

Ziel: Logs von unseren Services sammeln, speichern und analysieren.

Installation und Einrichtung von Elasticsearch

Hinzufügen von Elasticsearch in compose.yaml:

Yaml

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.15.0
    environment:
      - discovery.type=single-node
    ports:
      - "9200:9200"
    networks:
      - task-network

Installation und Einrichtung von Logstash

Schritt 1. Erstellen eines Verzeichnisses für die Logstash-Konfiguration:

Terminal

mkdir logstash
cd logstash

Schritt 2. Erstellung der Konfigurationsdatei logstash.conf:

Text

input {
  beats {
    port => 5044
  }
}
filter {
  json {
    source => "message"
  }
}
output {
  elasticsearch {
    hosts => ["elasticsearch:9200"]
    index => "docker-logs-%{+YYYY.MM.dd}"
  }
}

Schritt 3. Erstellen einer Dockerfile für Logstash:

dockerfile

FROM docker.elastic.co/logstash/logstash:8.15.0
COPY logstash.conf /usr/share/logstash/pipeline/logstash.conf

Schritt 4. Hinzufügen von Logstash in compose.yaml:

Yaml

  logstash:
    build: ./logstash
    ports:
      - "5044:5044"
    depends_on:
      - elasticsearch
    networks:
      - task-network

Installation und Einrichtung von Kibana

Hinzufügen von Kibana in compose.yaml:

Yaml

  kibana:
    image: docker.elastic.co/kibana/kibana:8.15.0
    ports:
      - "5601:5601"
    depends_on:
      - elasticsearch
    networks:
      - task-network

Installation von Filebeat für das Sammeln von Logs

Schritt 1. Erstellen eines Verzeichnisses für die Filebeat-Konfiguration:

Terminal

mkdir filebeat
cd filebeat

Schritt 2. Erstellung der Konfigurationsdatei filebeat.yml:

Yaml

filebeat.inputs:
- type: docker
  containers.ids:
    - '*'
processors:
  - add_docker_metadata: ~
output.logstash:
  hosts: ["logstash:5044"]

Schritt 3. Erstellen einer Dockerfile für Filebeat:

dockerfile

FROM docker.elastic.co/beats/filebeat:8.15.0
COPY filebeat.yml /usr/share/filebeat/filebeat.yml

Schritt 4. Hinzufügen von Filebeat in compose.yaml:

Yaml

filebeat:
    build: ./filebeat
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
    depends_on:
      - logstash
    networks:
      - task-network

7.4 Komplette Datei

Komplette Datei compose.yaml

Yaml

version: '3'

services:
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    networks:
      - task-network
        
  backend:
    build: ./backend
    ports:
      - "5000:5000"
    depends_on:
      - database
    networks:
      - task-network
    environment:
      - DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb
        
  database:
    image: postgres:13
    environment:
      - POSTGRES_DB=taskdb
      - POSTGRES_USER=taskuser
      - POSTGRES_PASSWORD=taskpassword
    networks:
      - task-network
    volumes:
      - db-data:/var/lib/postgresql/data
        
  nginx:
    build: ./nginx
    ports:
      - "80:80"
    depends_on:
      - frontend
      - backend
    networks:
      - task-network
        
  prometheus:
    build: ./prometheus
    ports:
      - "9090:9090"
    networks:
      - task-network
        
  grafana:
    image: grafana/grafana
    ports:
      - "3033:3000"
    depends_on:
      - prometheus
    networks:
      - task-network
        
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2
    environment:
      - discovery.type=single-node
    ports:
      - "9200:9200"
    networks:
      - task-network
        
  logstash:
    build: ./logstash
    ports:
      - "5044:5044"
    depends_on:
      - elasticsearch
    networks:
      - task-network
        
  kibana:
    image: docker.elastic.co/kibana/kibana:7.9.2
    ports:
      - "5601:5601"
    depends_on:
      - elasticsearch
    networks:
      - task-network
        
  filebeat:
    build: ./filebeat
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
    depends_on:
      - logstash
    networks:
      - task-network
        
networks:
  task-network:
    driver: bridge
        
volumes:
  db-data:
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION