Outils pour utilisateurs

Outils du site


gestion_configuration:monitoring

Monitoring

Monitoring Containerized Application Health with Docker

Niveaux de monitoring

  • Server
  • App
  • Hardware

Les applications nécessaires

Architecture

Prometheus

Utiliser un container pour rouler Prometheus.

L,avantage de rouler Promethus dans un container c'est d'utiliser le management de Docker, d'utiliser sa sécurité, sa containabilité et sa portabilité. De plus, les containers peuvent être privés (accessible que du réseau de Docker et non de l'extérieur) et seul Graphana par la suite sera public pour pouvoir le consulter.

Image officielle: prom/prometheus.

docker container run \
  --detach --publish-all \
  prom/prometheus:v2.29.2

Changer la version 2.29.2 par la version actuelle.

Prometheus Configuration

global:
  scrape_interval: 10s
  external_labels:
    monitor: 'local-monitor'

Scrape configs:

scrape_configs:
  - job_name: 'netfx-app'
    metrics_path: /metrics/
    static_configs:
      - targets: ['netfx:50506']

Pour Docker Servers:

  - job_name: 'docker-managers'
    scrape_interval: 15s
    metrics_path: /metrics
    static_configs:
      - targets: ['host.docker.internal:50501']

  - job_name: 'docker-workers'
    scrape_interval: 15s
    metrics_path: /metrics
    static_configs:
      - targets: ['host.docker.internal:50501']

Le host.docker.internal est résolvé par Docker comme étant le IP de la machine hôte.

Copie de la configuration avec un Dockerfile:

FROM prom/prometheus:v2.29.2
COPY prometheus.yml /etc/prometheus/prometheus.yml

Service discovery

Dynamic discovery of services (in context of swarm and production):

  - job_name: 'netfx-app'
    metrics_path: /metrics/
    dns_sd_configs:
      - names:
        - tasks.netfx
        type: A
        port: 50506

Data Types

  • Counter
    • Simple number
    • Always increases
  • Gauge
    • Simple number
    • Increase or decrease
  • Histograms and Summaries
    • Groups of samples
    • Record count of sample …….
docker container ls --all --filter status=exited --format "{{ .ID }}"

docker container rm $(docker container ls --all --filter status=exited --format "{{ .ID }}")

Queries

Utilise PromQL

Exemples de queries dans Prometheus:

engine_daemon_container_states_containers{job="docker-managers", state="running"}

Ici, les requêtes HTTP des services commençant par docker- depuis les 30 dernières secondes:

http_requests_total{job=~"docker-.*"}[30s]

Avec le bouton Add Graph, on peut ajouter une expression:

sum(irate(http_request_total[5m]))

Exposer des metrics d'exécution

Exposer des métriques:

  • Utiliser un utilitaire exportateur de métrique
  • Exporter dans le format de Prometheus

Exporters:

Applications .NET Framework:

NodeJS

Exposer des métriques de Docker

Docker Metrics:

  • Engine: CPU Count, Memory size, CPU Architecture, Operating system, Docker Version
  • Builds: Triggered count, Cancelled count, Failure count (Syntax error, Empty dockerfile, Command Error)
  • Containers: Container count (by state), Action duration (Create and start), Healthchecks (Fired and failed)

Activer les metrics dans Docker:

Documentation officielle

  1. Créer (voir Configure the Docker Daemon) ou éditer le fichier /etc/docker/daemon.json
{
  "metrics-addr" : "0.0.0.0:50501",
  "experimental" : true
}

Restart Docker:

$ sudo systemctl restart docker

Vérifier que le endpoint fonctionne:

$ sudo lsof -Pi TCP -a -c dockerd

et / ou

$ wget localhost:9323/metrics

Faire en sorte que le host accepte les connections du container:

$ sudo iptables -A INPUT -i docker0 -j ACCEPT

Dans le fichier prometheus.yml, configuration minimale pour le scrape_config de Docker:

  - job_name: 'docker'
    static_configs:
      - targets: ['172.17.0.1:50501']

Dockerfile:

FROM prom/prometheus:v2.29.2
COPY prometheus.yml /etc/prometheus/prometheus.yml
$ docker build -t prometheus-vps:0.4.2 .
$ docker container run --detach --publish published=49155,target=9090,protocol=tcp --add-host=host.docker.internal:host-gateway --name prometheus-vps prometheus-vps:0.4.2

Version non publiée:

$ docker container run -d --add-host=host.docker.internal:host-gateway --name prometheus-vps prometheus-vps:0.5.1
$ docker container run -d -p 49155:9090 --add-host=host.docker.internal:host-gateway --name prometheus prometheus-vps:0.5.2

Commandes de gestion du container prometheus:

$ docker logs prometheus-vps
$ docker container rm -f prometheus-vps

Metrics de la machine

Utiliser Node Explorer

$ docker container run -d -p 9100:9100 --net="host" --name node-exporter prom/node-exporter
$ docker container run -d --net="host" --name node-exporter prom/node-exporter

Config:

  - job_name: 'machine'
    static_configs:
      - targets: ['172.17.0.1:9100']

Autres

Prometheus Config Examples

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'docker'
    tls_config:
      insecure_skip_verify: true
    static_configs:
      - targets: ['host.docker.internal:9323']

Grafana

Construire des dashboards avec Grafana.

Image officielle sur Docker Hub: grafana/grafana et Grafana Dashboards.

$ docker container run -d -p 13000:3000 --network bridge grafana/grafana:8.1.3

Default image config for user:pass : admin:admin

Dashboards:

  • Prometheus 2.0 Stats (suggéré à même Grafana dans l'onglet Dashboards)
  • Node Exporter ID: 1860
  • Blackbox ID: 7587

Commit:

$ docker container commit 11sha vps/grafana:0.0.1
gestion_configuration/monitoring.txt · Dernière modification : 2022/02/02 00:42 de 127.0.0.1