{{indexmenu_n>21}} # Métriques propres aux services Lorsque les métriques des services sont exposées via un exporter Prometheus, cela signifie simplement que, sur un chemin du domaine (généralement ''/metrics''), les métriques sont accessibles en HTTP. Pour des raisons de sécurité, nous préférons que ces métriques ne soient pas exposées publiquement, et que seul notre scraper [[technique:adminsys:monitoring:metrologie:victoriametrics|vmagent]] puisse y avoir accès. Comme l'exporter est exposé via HTTP, et donc derrière Traefik, on peut simplement activer de l'authentification Basic pour permettre uniquement à ''vmagent'' de récupérer les métriques. ===== Configuration Traefik ===== Du côté de Traefik, on va simplement se baser sur le middleware [[https://doc.traefik.io/traefik/middlewares/basicauth/|Basic Auth]]. Il permet d'activer une authentification Basic sur un //router// Traefik spécifique. Prenons l'exemple d'un service Web classique, ici Hedgedoc. Dans notre cas, un exporter Prometheus écoute sous le chemin ''/metrics/hedgedoc'' du service, et un autre sous ''/metrics/router''. On veut donc que tout le trafic vers ce service pour le chemin commençant par ''/metrics'' soit soumis à une authentification Basic de Traefik. Pour cela on créé un second //routeur//. Les labels appliqués sur le conteneur pour exposer le service sont ainsi les suivants : ```yaml traefik.enable: true traefik.http.routers.hedgedoc-app.entrypoints: websecure traefik.http.routers.hedgedoc-app.rule: Host(`md.picasoft.net`) traefik.http.routers.hedgedoc-app.service: hedgedoc-app traefik.http.routers.hedgedoc-metrics.entrypoints: websecure traefik.http.routers.hedgedoc-metrics.rule: "Host(`md.picasoft.net`) && PathPrefix(`/metrics`)" traefik.http.routers.hedgedoc-metrics.service: hedgedoc-app traefik.http.routers.hedgedoc-metrics.middlewares: "hedgedoc-metrics-auth@docker" traefik.http.middlewares.hedgedoc-metrics-auth.basicauth.users: "${METRICS_AUTH}" traefik.http.services.hedgedoc-app.loadbalancer.server.port: 3000 ``` Pour une explication détaillée des labels utilisés, voir [[technique:docker:good_practices:traefik|la documentation de Picasoft sur Traefik]]. Les identifiants générés pour `/metrics` sont placés dans le dossier `Tech/Prometheus-Exporters-Auth` du [[asso:tuto:vaultwarden|vaultwarden]]. ===== Configuration vmagent ===== Du côté de ''vmagent'' il faut préciser les identifiants en question dans [[https://gitlab.utc.fr/picasoft/projets/services/monitoring/-/blob/master/vmagent-prom.yml|le fichier de configuration Prometheus]]. Pour chaque configuration de service, l'objet ''basic_auth'' permet de spécifier que l'exporter nécessite une uathentification Basic. Par exemple pour notre cas (des champs ont été retirés pour se concentrer sur ce qui nous intéresse) : ```yaml - job_name: hedgedoc metrics_path: "/metrics/hedgedoc" scheme: "https" basic_auth: username: hedgedoc password: monpassword static_configs: - targets: - "md.picasoft.net" ``` L'inconvénient est que nos identifiants vont se retrouver dans le fichier de configuration, qui est versionné. Pour cela on va donc utiliser un mécanisme de ''vmagent'' qui permet de remplacer des valeurs dans le fichier de configuration à l'aide de variables d'environnement. On utilisera donc la configuration suivante : ```yaml - job_name: hedgedoc metrics_path: "/metrics/hedgedoc" scheme: "https" basic_auth: username: "%{HEDGEDOC_METRICS_USER}" password: "%{HEDGEDOC_METRICS_PASSWORD}" static_configs: - targets: - "md.picasoft.net" ``` Il ne reste plus que à fournir les 2 variables d'environnement en question à ''vmagent''. Pour cela on utilise le même mécanisme de [[https://gitlab.utc.fr/picasoft/projets/services/monitoring/-/blob/master/secrets/exporters-auth.secrets.example|fichiers de secrets]] que l'on utilise dans nos autres dépôts. On charge ensuite [[https://gitlab.utc.fr/picasoft/projets/services/monitoring/-/blob/master/secrets/exporters-auth.secrets.example|le fichier de variables]] dans [[https://gitlab.utc.fr/picasoft/projets/services/monitoring/-/blob/a502c35154b62f11da6e0a6bba544ccda295cc61/docker-compose.yml#L69|le conteneur vmagent]]. ## Génération du mot de passe Après avoir créé l'utilisateur pour le service (ici `hedgedoc` par exemple), on sauvegarde le mot de passe dans le dossier `Tech/Prometheus-Exporters-Auth` du [[asso:tuto:vaultwarden|vaultwarden]]. Ce mot de passe peut être donné en clair côté monitoring via la variable d’environnement `HEDGEDOC_METRICS_PASSWORD`. Cependant, traefik s'attendant à un [format particulier](https://doc.traefik.io/traefik/middlewares/http/basicauth/#configuration-examples) de la forme `hedgedoc:$$apr1$$waO5zvqJ$$jrty/RULcxryemeBmH3RU0`, il faut d'abord le transformer. Pour cela on exécutera la commande suivante ```sh htpasswd -nb $HEDGEDOC_METRICS_USER $HEDGEDOC_METRICS_PASSWORD ``` Dont la sortie peut être mise dans la variable d'environnement `METRICS_AUTH`