Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente |
technique:adminsys:monitoring:collect:service_metrics [2022/04/29 15:45] – ↷ Page déplacée de technique:adminsys:monitoring:metrologie:collect:service_metrics à technique:adminsys:monitoring:collect:service_metrics qduchemi | technique:adminsys:monitoring:collect:service_metrics [2023/12/29 17:45] (Version actuelle) – Ajout procédure mots de passe limaanto |
---|
| |
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. | 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 CodiMD. | Prenons l'exemple d'un service Web classique, ici Hedgedoc. |
| |
Dans notre cas, un exporter Prometheus écoute sous le chemin ''/metrics/codimd'' 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 : | 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 | ```yaml |
traefik.enable: true | traefik.enable: true |
traefik.http.routers.codimd-app.entrypoints: websecure | traefik.http.routers.hedgedoc-app.entrypoints: websecure |
traefik.http.routers.codimd-app.rule: Host(`md.picasoft.net`) | traefik.http.routers.hedgedoc-app.rule: Host(`md.picasoft.net`) |
traefik.http.routers.codimd-app.service: codimd-app | traefik.http.routers.hedgedoc-app.service: hedgedoc-app |
traefik.http.routers.codimd-metrics.entrypoints: websecure | traefik.http.routers.hedgedoc-metrics.entrypoints: websecure |
traefik.http.routers.codimd-metrics.rule: "Host(`md.picasoft.net`) && PathPrefix(`/metrics`)" | traefik.http.routers.hedgedoc-metrics.rule: "Host(`md.picasoft.net`) && PathPrefix(`/metrics`)" |
traefik.http.routers.codimd-metrics.service: codimd-app | traefik.http.routers.hedgedoc-metrics.service: hedgedoc-app |
traefik.http.routers.codimd-metrics.middlewares: "codimd-metrics-auth@docker" | traefik.http.routers.hedgedoc-metrics.middlewares: "hedgedoc-metrics-auth@docker" |
traefik.http.middlewares.codimd-metrics-auth.basicauth.users: "test:$$apr1$$waO5zvqJ$$jrty/RULcxryemeBmH3RU0" | traefik.http.middlewares.hedgedoc-metrics-auth.basicauth.users: "${METRICS_AUTH}" |
traefik.http.services.codimd-app.loadbalancer.server.port: 3000 | traefik.http.services.hedgedoc-app.loadbalancer.server.port: 3000 |
``` | ``` |
| |
| |
<bootnote critical> | <bootnote critical> |
Les identifiants générés pour `/metrics` sont placés dans le dossier `Tech/Prometheus-Exporters-Auth` du [[technique:adminsys:secu:password_store:start|pass]]. | Les identifiants générés pour `/metrics` sont placés dans le dossier `Tech/Prometheus-Exporters-Auth` du [[asso:tuto:vaultwarden|vaultwarden]]. |
</bootnote> | </bootnote> |
===== Configuration vmagent ===== | ===== Configuration vmagent ===== |
| |
Du côté de ''vmagent'' il faut préciser les identifiants en question dans [[https://gitlab.utc.fr/picasoft/projets/dockerfiles/-/blob/master/pica-metrologie/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) : | 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 | ```yaml |
- job_name: codimd | - job_name: hedgedoc |
metrics_path: "/metrics/codimd" | metrics_path: "/metrics/hedgedoc" |
scheme: "https" | scheme: "https" |
basic_auth: | basic_auth: |
username: codimd | username: hedgedoc |
password: monpassword | password: monpassword |
static_configs: | static_configs: |
| |
```yaml | ```yaml |
- job_name: codimd | - job_name: hedgedoc |
metrics_path: "/metrics/codimd" | metrics_path: "/metrics/hedgedoc" |
scheme: "https" | scheme: "https" |
basic_auth: | basic_auth: |
username: "%{CODIMD_METRICS_USER}" | username: "%{HEDGEDOC_METRICS_USER}" |
password: "%{CODIMD_METRICS_PASSWORD}" | password: "%{HEDGEDOC_METRICS_PASSWORD}" |
static_configs: | static_configs: |
- targets: | - targets: |
``` | ``` |
| |
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/dockerfiles/-/blob/master/pica-metrologie/secrets/exporters-auth.secrets.example|fichiers de secrets]] que l'on utilise dans notre //repository// [[https://gitlab.utc.fr/picasoft/projets/dockerfiles|dockerfiles]]. On charge ensuite [[https://gitlab.utc.fr/picasoft/projets/dockerfiles/-/blob/master/pica-metrologie/secrets/exporters-auth.secrets.example|le fichier de variables]] dans [[https://gitlab.utc.fr/picasoft/projets/dockerfiles/-/blob/5c3c81eece4dc0f3832d982ca23bdeeabab68cff/pica-metrologie/docker-compose.yml#L67|le conteneur vmagent]]. | 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` |