| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente |
| serveurs:installation:web-srv:docker-grafana [2023/06/02 14:41] – [Configuration des alertes de Grafana] jpmilcent | serveurs:installation:web-srv:docker-grafana [2024/08/02 13:36] (Version actuelle) – [InfluxDB v2 : connection au shell et requête de config] jpmilcent |
|---|
| * Dans Influxdb v2, la politique de rétention est remplacée par les "buckets". La politique de rétention de "telegraf" est donc défini lors du setup d'Influxdb via des variables d'environnement : | * Dans Influxdb v2, la politique de rétention est remplacée par les "buckets". La politique de rétention de "telegraf" est donc défini lors du setup d'Influxdb via des variables d'environnement : |
| * ''INFLUXDB2_INIT_BUCKET=telegraf'' | * ''INFLUXDB2_INIT_BUCKET=telegraf'' |
| * ''INFLUXDB2_INIT_RETENTION=365d'' : 1 an. | * ''INFLUXDB2_INIT_RETENTION=90d'' : 3 mois. |
| |
| |
| * Pour définir la période de rétention du bucket telegraf : | * Pour définir la période de rétention du bucket telegraf : |
| * lister les buckets pour récupérer l'id du bucket "telegraf" : <code bash>influx bucket list</code> | * lister les buckets pour récupérer l'id du bucket "telegraf" : <code bash>influx bucket list</code> |
| * définir la période de rétention à 1 an : <code bash>influx bucket update -i <telgraf-bucket-id> -r 365d</code> | * définir la période de rétention à 7 jours : <code bash>influx bucket update -i <telgraf-bucket-id> -r 7d</code> |
| * Créer un mapping entre le bucket "telegraf" (v2) et la database/retention policy "telegraf" (v1) pour y accéder avec InfluxQL depuis Grafana : <code bash>influx v1 dbrp create --db telegraf --rp telegraf --bucket-id <telgraf-bucket-id> --default</code> | * Créer un mapping entre le bucket "telegraf" (v2) et la database/retention policy "telegraf" (v1) pour y accéder avec InfluxQL depuis Grafana : <code bash>influx v1 dbrp create --db telegraf --rp telegraf --bucket-id <telgraf-bucket-id> --default</code> |
| |
| ==== Monitorer InfluxDB v2 ==== | |
| * Pour monitorer InfluxDB, il est nécessaire de modifier le fichier de configuration du Telegraf présent sur le serveur hébergeant la base InfluxDB : <code properties> | |
| [[outputs.influxdb_v2]] | |
| urls = ["http://monitor-influxdb:8086"] | |
| ## Token for authentication. | |
| token = "${INFLUXDB2_TELEGRAF_TOKEN}" | |
| ## Organization is the name of the organization you wish to write to. | |
| organization = "${INFLUXDB2_INIT_ORG}" | |
| ## Destination bucket to write into. | |
| bucket = "${INFLUXDB2_INIT_BUCKET}" | |
| </code> | |
| * Il est aussi recommander de désactiver le monitoring dans la base //_internal// d'InfluxDB en modifiant comme suit le paramètre du fichier de configuration d'InfluxDB : <code properties> | |
| [monitor] | |
| store-enabled = false | |
| </code> | |
| |
| ===== Notes sur Telegraf ===== | |
| * Pour tester son fonctionnement : ''<nowiki> docker exec -it monitor-telegraf telegraf --test </nowiki>'' | |
| * Tester le plugin //Nginx// : ''<nowiki> docker exec -it monitor-telegraf telegraf --input-filter nginx --test </nowiki>'' | |
| ===== Configurer Grafana ===== | ===== Configurer Grafana ===== |
| * Se connecter à //Grafana// sur <nowiki>https://monitor.<domaine-sinp></nowiki> | * Se connecter à //Grafana// sur <nowiki>https://monitor.<domaine-sinp></nowiki> |
| * Sortir du container : ''exit'' | * Sortir du container : ''exit'' |
| * Se placer dans le dossier contenant le fichier docker-compose.yml contenant le service de Grafana : '' cd ~/docker/monitor/ '' | * Se placer dans le dossier contenant le fichier docker-compose.yml contenant le service de Grafana : '' cd ~/docker/monitor/ '' |
| * Relancer le de service : ''docker-compose restart monitor-grafana '' | * Relancer le de service : ''docker compose restart monitor-grafana '' |
| * Vérifier sur l'interface de Grafana la présence du plugin. | * Vérifier sur l'interface de Grafana la présence du plugin. |
| ===== Notes sur la sauvegarde/restauration de la configuration de Grafana ===== | ===== Notes sur la sauvegarde/restauration de la configuration de Grafana ===== |
| ===== Configuration des alertes de Grafana ===== | ===== Configuration des alertes de Grafana ===== |
| * Les requêtes a utiliser pour les alertes ne peuvent pas utiliser de variables utilisateurs, il est donc nécessaire de mettre des valeurs en dur... | * Les requêtes a utiliser pour les alertes ne peuvent pas utiliser de variables utilisateurs, il est donc nécessaire de mettre des valeurs en dur... |
| * Pour tester les requêtes, se connecter au shell d'InfluxDB comme indiqué ci-dessous. | * Remplacer ''<nowiki>$__interval</nowiki>'' par ''10s'' |
| * Exemple de requête dans Grafana qui peut être testé au préalable dans le shell d'InfluxDB: <code sql> | |
| SELECT mean(usage_user) as "user", mean(usage_system) as "system", mean(usage_softirq) as "softirq", mean(usage_steal) as "steal", mean(usage_nice) as "nice", mean(usage_irq) as "irq", mean(usage_iowait) as "iowait", mean(usage_guest) as "guest", mean(usage_guest_nice) as "guest_nice" FROM "cpu" WHERE "host" =~ /^sinp-paca-(db|web)$/ AND "cpu" = 'cpu-total' AND time > now() - 5m GROUP BY time($__interval), * | |
| </code> | |
| * Pour tester la requête précédente dans //InfluxDB//, remplacer ''<nowiki>$__interval</nowiki>'' par ''10s'' | |
| * A priori, il est conseillé de ne pas mettre la valeur ''NoData'' pour le champ "**If no data or all values are null**" qnd on utilise une règle d'alerte utilisant **For**. Vous pouvez utiliser la valeur ''Keep Last State''. | * A priori, il est conseillé de ne pas mettre la valeur ''NoData'' pour le champ "**If no data or all values are null**" qnd on utilise une règle d'alerte utilisant **For**. Vous pouvez utiliser la valeur ''Keep Last State''. |
| * Sur l'interface de //Grafana//, vous pouvez tester l'alerte en cliquant sur le bouton "Test rule" en bas de l'onglet "Alert" | * Sur l'interface de //Grafana//, vous pouvez construire les requêtes et tester l'alerte en cliquant sur le bouton "Preview". |
| * Si tout se passe correctement, vous devez obtenir un objet pour chaque entrée de la clause SELECT qui contient par exemple : <code json>{"message": "Condition[0]: Eval: false, Metric: Alert, Value: 4.287"}</code> | * Exemples de requêtes d'alertes : |
| * La valeur contient ''Eval: false'' qui indique que les condition ne sont pas réuni pour ce paramètre pour lancer l'alerte | |
| * Ici '' Value: 4.287" '' correspond à la moyenne de la propriété ''usage_user'' | |
| * Autres exemples de requêtes d'alertes : | |
| * **cpu** : <code sql> | * **cpu** : <code sql> |
| A : SELECT mean("usage_user") FROM "autogen"."cpu" WHERE $timeFilter GROUP BY time(10s), "host"::tag fill(null) | A : SELECT mean("usage_user") FROM "autogen"."cpu" WHERE $timeFilter GROUP BY time(10s), "host"::tag fill(null) |
| </code> | </code> |
| * **Memory** : <code sql> | * **Memory** : <code sql> |
| A query : SELECT mean("available_percent") AS "mean_available_percent" FROM "autogen"."mem" WHERE ("host"::tag = 'sinp-paca-web') AND $timeFilter GROUP BY time(10s) fill(null) | A query : SELECT mean("available_percent") AS "mean_available_percent" FROM "autogen"."mem" WHERE $timeFilter GROUP BY time(10s), "host"::tag fill(null) |
| B reduce : MEAN ; A ; DROP NON NUMERIC VALUE | B reduce : MEAN ; A ; DROP NON NUMERIC VALUE |
| C threshold : B IS BELOW 25 | C threshold : B IS BELOW 25 |