Ce dossier contient les ressources nécessaires pour lancer une instance de Grafana **et** de Prometheus, qui nous servent à collecter et visualiser les métriques des services (via [pica-metrics-bot](../pica-metrics-bot)) et des machines (via Prometheus).
Pour plus de facilité, ces deux services doivent communiquer via le même réseau, c'est pourquoi ils sont dans le même Docker Compose. Il n'y a pas de raisons de mettre ces deux services sur une machine différente, ce qui aurait pour seul effet de créer de la complexité supplémentaire.
## Configuration
Prometheus est un logiciel libre qui permet la collecte et le traitement de métriques, ainsi que le déclenchement d'alertes. Son fonctionnement est simple : un serveur va collecter régulièrement des métriques auprès de plusieurs *exporters*. Par exemple pour exporter des métriques systèmes, on utilise un *node_exporter* que l'on installe sur la machine, et on configure le serveur Prometheus (distant potentiellement) pour scraper cet exporter régulièrement.
### Prometheus
La configuration se fait dans [prometheus.yml](./prometheus.yml).
Pour collecter des métriques, il est nécessaire d'installer des *exporters* sur les machines cible : [voir la documentation](https://wiki.picasoft.net/doku.php?id=technique:monitoring:metrics:system_metrics).
### 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 :
* Par les variables d'environnement de [Compose](./docker-compose.yml), qui permettent d'accéder à tous les paramètres de la configuration (voir la [documentation](https://grafana.com/docs/grafana/latest/administration/configuration/#configure-with-environment-variables)) : cette méthode est utilisée pour tous les paramètres non-critiques.
* Par le fichier [ldap.toml](./ldap.toml) pour la configuration spécifique au LDAP. Ce fichier peut faire référence à des variables d'environnement avec [cette syntaxe](https://grafana.com/docs/grafana/latest/auth/ldap/#using-environment-variables), pour les données critiques (*e.g.* mot de passe)
* Par le fichier [grafana.secrets](./secrets/grafana.secrets.example), pour les secrets.
#### Utilisateurs
Il y a trois types d'utilisateurs :
* L'administrateur de l'instance, configuré via l'environnement (Compose et secret)
* Les utilisateurs LDAP
* Les utilisateurs créés manuellement, comme Rhizome
### Lancement
Copier `grafana.secrets.example` dans `grafana.secrets` et remplacer les valeurs. Le mot de passe LDAP de `grafana` se trouve dans le [pass](https://gitlab.utc.fr/picasoft/interne/pass).
Lancer :
```bash
docker-compose up -d
```
Attention, lors du lancement Prometheus doit pouvoir écrire dans le volume monté sur `/prometheus`, il est possible qu'il faille se rendre dans le conteneur en tant que `root` et faire un `chown nobody:nogroup /prometheus` si les logs indiquent des problèmes de permissions.
### Mise à jour
Il suffit de mettre à jour le tag dans Compose.
Il ne devrait pas y avoir de manipulation spécifiques pour mettre à jour une instance Docker : voir [la documentation de Grafana](https://grafana.com/docs/grafana/latest/installation/upgrading/#docker) et la [documentation de Prometheus](https://hub.docker.com/r/prom/prometheus) pour le vérifier.
Dans ce dossier se trouvent les éléments de configuration permettant de faire fonctionner [Picasoft Metrics Bot](https://gitlab.utc.fr/picasoft/projets/picasoft-metrics-bot).
Par rapport au projet original :
* La configuration en production est versionnée ici, et un Docker Compose adapté est proposé
* Un [entrypoint](./entrypoint.sh) modifié permet d'injecter des secrets sous forme de variables d'environnement
* Ajout d'InfluxDB directement adossé à Picasoft Metrics Bot, dans un seul Docker Compose
## Premier lancement
Copier les fichiers `.secrets.example` en `.secrets` et remplacez les valeurs.
L'utilisateur InfluxDB qui doit être utilisé dans Picasoft Metrics Bot est celui avec les droits d'écriture (mais pas d'administrateur). Dans le fichier d'exemple, c'est `picasoft-write`.
## Mise à jour
Il suffit de changer `METRICS_BOT_VERSION` du `Dockerfile` et d'ajuster le tag de l'image dans le fichier Compose.
Les releases sont disponibles ici : https://gitlab.utc.fr/picasoft/projets/picasoft-metrics-bot/-/releases
## 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.
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
-`vmagent` pour l'ingestion de métriques
- Grafana pour visualiser les métriques
-`pica-metrics-bot` pour la collecte des métriques de certains services
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.
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.
Victoria Metrics est la base de données orienté métriques (on parle de TSDB pour _time serie database_) [utilisée par Picasoft](https://wiki.picasoft.net/doku.php?id=technique:adminsys:monitoring:metrologie:victoriametrics).
Sa configuration est simple, et se fait entièrement à l'aide de paramètres en ligne de commande. Picasoft utilise les paramètres suivants :
-`-retentionPeriod=1200` : Configuration de la rétention des métriques pour 1200 mois, soit 100 ans, c'est à dire quasiment illimité
-`-storageDataPath=/victoria-metrics-data` : Dossier de stockage des métriques, ce dossier est monté dans un volume Docker pour persister les données
-`-selfScrapeInterval=10s` : Indique à Victoria Metrics d'auto-collecter des métriques sur son état de fonctionnement, toutes les 10 secondes
-`-selfScrapeInstance=vm-tsdb` : Indique le nom que l'on donne à cette instance de Victoria Metrics, qui sera inscrit en label sur les propres métriques de l'instance
### vmagent
`vmagent` est l'outil proposé par Victoria Metrics pour gérer l'ingestion de métriques, compatible avec plusieurs protocoles.
Sa principale utilisation à Picasoft est pour le scraping de métriques au format Prometheus. Pour cela `vmagent` prends en paramètre un fichier de configuration [identique à celui de Prometheus](https://prometheus.io/docs/prometheus/latest/configuration/configuration/), ici le fichier [`vmagent-prom.yml`](./vmagent-prom.yml), qui est monté dans le conteneur.
Le reste de la configuration de `vmagent` se fait entièrement à l'aide de paramètres en ligne de commandes :
-`-promscrape.config=/config/vmagent-prom.yml` : Indique le chemin vers le fichier de configuration Prometheus.
-`-promscrape.config.strictParse` : Indique que l'on veut une interprétation stricte du fichier de configuration Prometheus (retourner une erreur en cas de format invalide ou de paramètres non supportés dans le fichier)
-`-remoteWrite.url=http://victoria-metrics:8428/api/v1/write` : Adresse vers laquelle `vmagent` doit envoyer les métriques collectées (l'instance Victoria Metrics)
-`-remoteWrite.tmpDataPath=/vmagent-remotewrite-data` : Dossier temporaire dans lequel `vmagent` stocke les métriques avant envoie vers Victoria Metrics (ou en cas d'indisponibilité de l'instance)
Pour une meilleure fiabilité, le dossier `/vmagent-remotewrite-data` qui stocke les données temporaires de `vmagent` est un volume Docker dédié : `vmagent-buffer`.
### Grafana
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 :
- Par les variables d'environnement de [Compose](./docker-compose.yml), qui permettent d'accéder à tous les paramètres de la configuration (voir la [documentation](https://grafana.com/docs/grafana/latest/administration/configuration/#configure-with-environment-variables)) : cette méthode est utilisée pour tous les paramètres non-critiques.
- Par le fichier [ldap.toml](./ldap.toml) pour la configuration spécifique au LDAP. Ce fichier peut faire référence à des variables d'environnement avec [cette syntaxe](https://grafana.com/docs/grafana/latest/auth/ldap/#using-environment-variables), pour les données critiques (_e.g._ mot de passe)
- Par le fichier [grafana.secrets](./secrets/grafana.secrets.example), pour les secrets.
#### Utilisateurs
Il y a trois types d'utilisateurs :
- L'administrateur de l'instance, configuré via l'environnement (Compose et secret)
- Les utilisateurs LDAP
- Les utilisateurs créés manuellement, non utilisés par Picasoft
### Metrics bot
Le [`pica-metrics-bot`](https://gitlab.utc.fr/picasoft/projets/picasoft-metrics-bot) est un script qui permet de collecter et générer des métriques de certains services (Etherpad, Mattermost, Wekan) à partir des APIs de ces services, et de pousser les métriques dans `vmagent` (_via_ le réseau Docker commun) en utilisant le protocole de InfluxDB.
Le nécessaire pour déployer ce script avec Docker se trouve dans le dossier [`pica-metrics-bot`](./pica-metrics-bot). Cette image Docker permet :
- d'exécuter le script à intervalles réguliers, configuré avec la variable d'environnement `INTERVAL_SECONDS`
- d'injecter des secrets (identifiants d'accès aux APIs) dans le fichier de configuration JSON du script à l'aide de variables d'environnement
#### 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.
Pour Grafana il suffit aussi de changer le tag utilisé dans le fichier Docker Compose, on peut suivre les nouvelles version [sur la page des releases](https://github.com/grafana/grafana/releases).
Pour le `pica-metrics-bot` il suffit de changer `METRICS_BOT_VERSION` dans le `Dockerfile`, de build/push la nouvelle image et d'ajuster le tag de l'image dans le fichier Compose, on peut suivre les nouvelles version [sur la page des releases](https://gitlab.utc.fr/picasoft/projets/picasoft-metrics-bot/-/releases).