Verified Commit 18d4fa45 authored by Quentin Duchemin's avatar Quentin Duchemin
Browse files

Scrape DNS and HTTP metrics via Blackbox, automated with vmagent

parent 1dc730ee
......@@ -3,10 +3,13 @@
Ce dossier contient les ressources nécessaires pour déployer la partie serveur de la stack de métrologie de Picasoft, à savoir :
- Victoria Metrics pour le stockage de métriques
- BlackBox Exporter pour le probing des services webs et des serveurs DNS
- `vmagent` pour l'ingestion de métriques
- `vmalert` pour la génération d'alertes
- AlertManager pour la gestion et la transmission des alertes
- Grafana pour visualiser les métriques
Pour des raisons de simplicités mais aussi de sécurité, ces 4 services sont déployés sur la même machine, en partageant un même réseau Docker.
Pour des raisons de simplicités mais aussi de sécurité, ces services sont déployés sur la même machine, en partageant un même réseau Docker.
Il est fortement recommandé de consulter la [documentation associée](https://wiki.picasoft.net/doku.php?id=technique:adminsys:monitoring:metrologie:stack-picasoft) pour comprendre l'architecture de cette stack de métrologie.
......@@ -47,8 +50,6 @@ Pour une meilleure fiabilité, le dossier `/vmagent-remotewrite-data` qui stocke
Grafana est l'outil de visualisation de métriques [utilisé par Picasoft](https://wiki.picasoft.net/doku.php?id=technique:adminsys:monitoring:metrologie:grafana).
Attention : même si l'authentification LDAP est activée, elle semble ne pas fonctionner : la connexion ne fonctionne que grâce à l'utilisateur administrateur. Voir [cette page](https://grafana.com/docs/grafana/latest/auth/ldap/#ldap-debug-view) pour investiguer et régler le problème.
#### Emplacements
La configuration est réalisée :
......@@ -65,10 +66,6 @@ Il y a trois types d'utilisateurs :
- Les utilisateurs LDAP
- Les utilisateurs créés manuellement, non utilisés par Picasoft
#### TODO
Le `sed` utilisé pour injecter les secrets dans l'entrypoint est dégueulasse, si jamais il y a certains caractères dans les mots de passe ça marchera pas, il faut faire mieux, en Python par exemple.
## Mise à jour
Pour Victoria Metrics et `vmagent` il suffit de changer les tags utilisés dans le fichier `docker-compose.yml`. On fera attention à utilise la même version pour les deux outils.
......
modules:
http_2xx:
# Probe web services and give up after 10s of no response
prober: http
timeout: 10s
http:
valid_status_codes: 2xx
method: GET
# Because Traefik could redirect to
# HTTPS, we need to follow to see if service is up
follow_redirects: true
headers:
Origin: prober.picasoft.net
# Docker often blocks v6 without further configuration,
# prevent false failures using v4 by default
preferred_ip_protocol: ip4
# All our services must be HTTPS
fail_if_not_ssl: true
dns_soa:
# To detect DNS servers failures
prober: dns
dns:
query_name: picasoft.net
query_type: SOA
......@@ -118,4 +118,12 @@ services:
- ./blackbox.yml:/config/blackbox.yml
networks:
- metrics
labels:
traefik.http.routers.blackbox-exporter.entrypoints: websecure
traefik.http.routers.blackbox-exporter.rule: "Host(`blackbox.picasoft.net`)"
traefik.http.routers.blackbox-exporter.service: blackbox-exporter
traefik.http.routers.blackbox-exporter.middlewares: "blackbox-exporter-auth@docker"
traefik.http.middlewares.blackbox-exporter-auth.basicauth.users: "${METRICS_AUTH}"
traefik.http.services.blackbox-exporter.loadbalancer.server.port: 8000
traefik.enable: true
restart: unless-stopped
......@@ -22,3 +22,5 @@ PEERTUBE_METRICS_USER=peertube
PEERTUBE_METRICS_PASSWORD=superpassword
POSTFIX_METRICS_USER=peertube
POSTFIX_METRICS_PASSWORD=superpassword
BLACKBOX_METRICS_USER=blackbox
BLACKBOX_METRICS_PASSWORD=superpassword
......@@ -131,6 +131,87 @@ scrape_configs:
static_configs:
- targets:
- "mail.picasoft.net"
# Srape metrics about Picasoft services
# via Blackbox Exporter
- job_name: blackbox-http
scheme: "https"
basic_auth:
username: "%{BLACKBOX_METRICS_USER}"
password: "%{BLACKBOX_METRICS_PASSWORD}"
# Blackbox servers metrics under /probe
metrics_path: /probe
# See blackbox.yml : `module` is passed as GET parameter
# Normally the target (i.e. team.picasoft.net) is also passed as a GET parameter
# so that the request looks like : https://probe.picasoft.net/probe?target=team.picasoft.net&module=http_2xx
# Problem is we would have to create as much jobs as targets, which is hard to read.
# So we use static_configs targets and relabelling to do so. Credits to https://prometheus.io/docs/guides/multi-target-exporter/
params:
module: [http_2xx]
static_configs:
targets:
- team.picasoft.net
- pad.picasoft.net
- wiki.picasoft.net
- kanban.picasoft.net
- cloudcet.picasoft.net
- uploads.picasoft.net
- www.picasoft.net
- week.pad.picasoft.net
- doc.picasoft.net
- school.picasoft.net
- radio.picasoft.net
- culture.picasoft.net
- blog.picasoft.net
- voice.picasoft.net
- mobilizon.picasoft.net
- board.picasoft.net
- md.picasoft.net
- impactometre.fr
- paste.picasoft.net
- mastogem.picasoft.net
- tube.picasoft.net
- drop.picasoft.net
- podcast.picasoft.net
- grafana.picasoft.net
- cloud.picasoft.net
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: blackbox.picasoft.net # The blackbox exporter’s real hostname:port.
# Srape metrics about Picasoft DNS servers
- job_name: blackbox-dns
scheme: "https"
basic_auth:
username: "%{BLACKBOX_METRICS_USER}"
password: "%{BLACKBOX_METRICS_PASSWORD}"
metrics_path: /probe
params:
module: [dns_soa]
static_configs:
targets:
- ns01.picasoft.net
- ns02.picasoft.net
- ns03.picasoft.net
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: blackbox.picasoft.net
# Scrape metrics about Blackbox itself
- job_name: blackbox
scheme: "https"
basic_auth:
username: "%{BLACKBOX_METRICS_USER}"
password: "%{BLACKBOX_METRICS_PASSWORD}"
metrics_path: /metrics
static_configs:
- targets:
- blackbox.picasoft.net
# Scrape Picasoft servers node-exporter
- job_name: "pica01"
static_configs:
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment