Site icon BLD Web Agency

Monitoring Web avec Grafana et Netdata

netdata-monitoring-nginx-web-server-wordpress

Bien surveiller son serveur permet de réagir en amont en cas de surconsommation mémoire par exemple, ou tout simplement vérifier que tout fonctionne correctement : les Pool PHP-FPM, le nombre de requêtes sur votre serveur Web… Nous allons voir dans cet articles les différences entre Monitoring, supervision et métrologie puis mettre en place notre première stack de monitoring.

Il peut être indispensable de surveiller ce qu’il se passe sur le serveur, pour adapter, optimiser ou modifier totalement la configuration. Ceci afin d’optimiser les performances de votre site, sachez qu’il existe d’autres types d’optimisation, comme l’utilisation d’un CDN.

Supervision, monitoring ou métrologie ?

La supervision vérifie l’état d’un hôte ou d’un service. Ce dernier remonte une alerte sur la détection d’un comportement anormal (temps de réponse trop long, statut NOK, etc..). Elle implique une action immédiate de la part des techniciens concernés. Une alerte signifie que l’hôte ou le service est dysfonctionnel (critical) ou risque de l’être (warning).

La métrologie, permet d’historier les données, éventuellement d’appliquer un traitement ou filtre dessus, avant de les présenter sous forme de graphiques ou de reporting. Ces données pourront apporter un correctif a postériori, sur le développement ou paramétrage des services, de manière à les optimiser. Les ressources pourront être attribuées plus justement aux services. On parle de «capacity planning ». La métrologie est importante car elle donne la possibilité d’améliorer la qualité de service et donc le rendu aux utilisateurs (internes ou clients finaux). Les résultats issus de la métrologie doivent mettre aisément en valeur les améliorations à apporter en corrélant les valeurs récupérées.

Le monitoring est le fait de superviser des équipements et d’arriver à prévoir l’évolution du système d’information dans le temps grâce à la lecture des courbes données par la métrologie.

Netdata + Prometheus + Grafana, le trio parfait !

Nous allons nous intéresser ici à ce trio gagnant : Netdata, prometheus et Grafana. Netdata est installé sur le serveur à superviser. Il va collecter les différentes métriques que l’on souhaite surveiller : CPU, mémoire, utilisation disque, i/O, métriques Nginx, PHP-FPM, Redis … Toutes ces données seront ensuite collectées et stockées dans Prometheus, qui fait donc office de “stockage des métriques”. Ensuite, il n’y a plus qu’a analyser ces données, et en sortir des graphiques dans Grafana, dont voici un exemple :

Nginx Requests Rate
Redis Operations / s

Par défaut, la configuration Prometheus permet de conserver un historique de 30 jours. Elle est donc à adapter en fonction du besoin. Tout ces graphiques vont ainsi nous permettre d’analyser le comportement du serveur en fonction des visites du / des sites. Faut-il allouer plus de mémoire PHP à notre Pool FPM ? Y a t’il un taux important d’erreur 404 sur une journée ? Le serveur est-il en train de subir de nombreuses attaques ? ou se fait-il crawl par des bots indésirables ?

Mettre en place une belle Stack de monitoring

Nous utiliserons ici un serveur dédié à la supervision, sur lequel est installé Docker. Nous ferons donc tourner Prometheus et Grafana sous Docker. Voici dans un premier temps le fichier docker-compose.yml pour la stack Prometheus Grafana :

version: '2.4'

services:
  grafana:
    restart: always
    image: grafana/grafana:latest
    container_name: grafana
    mem_limit: 1024M
    ports:
      - "3002:3000"
    links:
      - prometheus:prometheus
      - grafanarenderer:grafanarenderer
    volumes:
      - ${ROOT}/Dockers/grafana/data:/var/lib/grafana
      - ${ROOT}/Dockers/grafana/logs:/var/log/grafana
      - ${ROOT}/Dockers/grafana/plugins:/var/lib/grafana/plugins
    environment:
      - GF_INSTALL_PLUGINS=grafana-piechart-panel,grafana-clock-panel,grafana-simple-json-datasource,grafana-image-renderer
      - GF_SMTP_USER=${GRAFANA_SMTP_USER}
      - GF_SMTP_PASSWORD=${GRAFANA_SMTP_PASSWORD}
      - GF_SMTP_FROM_ADDRESS=${GRAFANA_SMTP_USER}
      - GF_SMTP_FROM_NAME=${GRAFANA_SMTP_NAME}
      - GF_SMTP_HOST=${GRAFANA_SMTP_HOST}
      - GF_SMTP_ENABLED=${GRAFANA_SMTP_ENABLED}
      - GF_SERVER_ROOT_URL=${GRAFANA_URL}
      - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD}
      - GF_RENDERING_SERVER_URL=${GRAFANA_RENDERER_URL}
      - GF_RENDERING_CALLBACK_URL=${GRAFANA_RENDERER_CALLBACK_URL}

  grafanarenderer:
    restart: always
    image: grafana/grafana-image-renderer:latest
    container_name: grafanarenderer
    mem_limit: 512M
    ports:
      - "4445:8081"

  prometheus:
    image: prom/prometheus:latest
    restart: always
    container_name: prometheus
    mem_limit: 512M
    ports:
      - "127.0.0.1:9090:9090"
    volumes:
      - ${ROOT}/Dockers/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
      - ${ROOT}/Dockers/prometheus:/prometheus

Puis, positionnez-vous à l’emplacement du fichier précédemment créé, et exécutez la commande suivante :

docker-compose up -d

Enfin, l’installation de Netdata, sur le serveur à monitorer se fait de la façon suivante :

bash <(curl -Ss https://my-netdata.io/kickstart.sh) all

Il ne reste plus qu’à éditer le fichier de configuration de prometheus prometheus.yml et à y placer les targets :

# my global config
global:
  scrape_interval:     10s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  scrape_timeout:      10s
  evaluation_interval: 10s # Evaluate rules every 15 seconds. The default is every 1 minute.

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

scrape_configs:
  - job_name: 'netdata'
    metrics_path: '/api/v1/allmetrics?format=prometheus'
    scheme: 'http'
    static_configs:
      - targets: ['%%IP_SERVER%%:19999']

Et relancer Prometheus pour sa bonne prise en compte :

docker restart prometheus

 

Quitter la version mobile