4312
Commentaire: ninja!
|
← Version 26 à la date du 2020-12-16 09:37:08 ⇥
6045
prometheus ...
|
Texte supprimé. | Texte ajouté. |
Ligne 5: | Ligne 5: |
<<TableOfContents>> |
|
Ligne 7: | Ligne 9: |
Il a été déployé sur {{{prometheus.adm.crans.org}}} et n'est accessible que vis Adm. On peut accéder à [[http://promethus.adm.crans.org:9090/|son interface Web]] en passant par un proxy Sock par exemple. | Il a été déployé sur {{{fyre.adm.crans.org}}} et n'est accessible que via Adm. On peut accéder à [[http://fyre.adm.crans.org:9090/|son interface Web]] en passant par un proxy SOCKS par exemple. |
Ligne 9: | Ligne 11: |
Pour plus d'information, je ne peux que vous conseillez [[https://prometheus.io/docs/introduction/overview/|la documentation officielle]]. | Pour plus d'information, je ne peux que vous conseiller [[https://prometheus.io/docs/introduction/overview/|la documentation officielle]]. |
Ligne 14: | Ligne 16: |
Il faut donc ajouter des services sur les autres serveurs qui vont lui envoyer les données à monitorer. De plus pour visualiser ces données, il est souhaitable de mettre en place une interface bien plus « humaine » comme '''Grafana''', bien que l'interface de base permette déjà de voir les données. | Il faut donc ajouter des services sur les autres serveurs qui vont lui envoyer les données à monitorer. Dans le jargon de pronetheus, c'est ce qu'on appelle des '''Exporters'''. De plus pour visualiser ces données, il est souhaitable de mettre en place une interface bien plus « humaine » comme '''Grafana''', bien que l'interface de base permette déjà de voir les données. |
Ligne 20: | Ligne 22: |
=== Faire des requêtes en PromQL === Le PromQL (Prometheus Query Language) est un langage de requêtes développé pour interroger les séries temporelles de Prometheus en temps réel. Avec une syntaxe semblable au SQL (Structured Query Language) classique, il permet à l'utilisateur de faire des aggrégations de séries temporelles. Les résultats peuvent être représentés dans des graphes, dans des tableaux, ou directement exposés via l'API HTTP. La [[https://prometheus.io/docs/prometheus/latest/querying/basics/ | documentation officielle]] et l'onglet [[https://grafana.crans.org/explore | Explorer]] de Grafana permettent de prendre en main cet outil. Puisqu'il est optimisé pour récupérer des séries temporelles, il peut être un peu perturbant de savoir comment récupérer d'autres types de données. Par exemple, la requête suivante récupère tous les noeuds (= les différents serveurs sur adm) ainsi que les versions du noyau, qui correspondent au noyau ```4.19```. {{{ sum by (nodename, release) (node_uname_info{release=~"4.19.*"}) }}} |
|
Ligne 22: | Ligne 38: |
Prometheus est en réalité un simple collecteur de données. Il va régulièrement (toutes les 60s) charger une page web (par exemple vulcain.adm.crans.org:9100) et récupérer le contenu. | Prometheus est en réalité un simple collecteur de données. Chaque exporteur va exposer les résultats sur un port particulier, et le serveur central va régulièrement (toutes les 60s) charger une page web (par exemple {{{ gateau.adm.crans.org:9100}}}) et récupérer le contenu. |
Ligne 31: | Ligne 47: |
=== Liste des exporteurs === Voici une liste (non exhaustive) des exporteurs disponnibles ainsi que les ports associés : [[https://github.com/prometheus/prometheus/wiki/Default-port-allocations#exporters-starting-at-9100 | Liste des exporteurs ]] |
|
Ligne 32: | Ligne 52: |
{{{#!wiki caution Attention, prometheus crashe silencieusement si ses cibles ne sont pas dans un format qu'il aime. En particulier pour le json, il peut être valide contre la RFC, mais s'il y a une ligne blanche à la fin du fichier, ou des tabs à la place des espaces par exemple (comme en YAML) il va rejeter la cible, mais ne pas se plaindre. }}} |
|
Ligne 37: | Ligne 61: |
L'avantage d'avoir un intermédiaire est de pouvoir regrouper les alertes par type ou par serveur, plutôt qu'envoyer 1000 mails d'un seul coup quand quelque chose casse. | On peut également configurer l'alertmanager pour envoyer des mails regroupant les alertes, mais il s'avère que l'on préfère être informé sur IRC. |
Ligne 39: | Ligne 63: |
L'autre avantage est que l'on reçoit également un mail quand Prometheus Alertmanager arrête de recevoir l'alerte. | L'alertmanager envoie également une notification lorsque l'alerte est résolue, c'est-à-dire quand Prometheus a arrêté d'envoyer l'alerte à l'alertmanager. |
Ligne 47: | Ligne 71: |
Il faut générer {{{/etc/prometheus/smnp.yml}}} à partir d'une configuration (à venir, ou demander à WikiErdnaxe) et à partir des MIBs installés sur le serveur. | Il faut générer {{{/etc/prometheus/smnp.yml}}} à partir d'une configuration (à venir, ou demander à Erdnaxe) et à partir des MIBs installés sur le serveur. (erdnaxe est en train de nettoyer cette configuration pour n'exporter que ce qui est pertinent des périphériques SMNP, puis ça finira dans un rôle Ansible) |
Ligne 51: | Ligne 75: |
=== Supprimer les données d'une node === | === Supprimer les données d'un noeud === |
Ligne 60: | Ligne 84: |
== Choses à tester dans le futur == * Intégrer avec les stats de GitLab (de base dans GitLab) ; * [[https://github.com/knyar/nginx-lua-prometheus|Exporter NGINX]] (pour monitorer les reverseproxy) ; * Ajouter la position géographique des serveurs (latitude, longitude) dans le node exporter pour pouvoir tracer des weather maps sur Grafana automatiquement. |
---- CatégorieCrans CatégoriePagePublique |
Prometheus
|
Sommaire
Prometheus est un outil de monitoring (gestion des alertes par exemple) et une base de donnée de stockage de séries de temps.
Il a été déployé sur fyre.adm.crans.org et n'est accessible que via Adm. On peut accéder à son interface Web en passant par un proxy SOCKS par exemple.
Pour plus d'information, je ne peux que vous conseiller la documentation officielle.
Fonctionnement
Prometheus représente la base de données de monitoring, mais ne récupère pas de données par lui-même. Il faut donc ajouter des services sur les autres serveurs qui vont lui envoyer les données à monitorer. Dans le jargon de pronetheus, c'est ce qu'on appelle des Exporters. De plus pour visualiser ces données, il est souhaitable de mettre en place une interface bien plus « humaine » comme Grafana, bien que l'interface de base permette déjà de voir les données.
Un de ses gros points forts est que l'on peut exporter à peu près tout ce que l'on souhaite vers Prometheus, par exemple les données collectées par le contrôleur Unifi.
Pour monitorer les informations de base d'un serveur, il suffit d'installer prometheus-node-exporter qui va exporter les informations réseaux, CPU, RAM… sans configuration nécessaire. Vous l'avez compris ça fait le café.
Faire des requêtes en PromQL
Le PromQL (Prometheus Query Language) est un langage de requêtes développé pour interroger les séries temporelles de Prometheus en temps réel. Avec une syntaxe semblable au SQL (Structured Query Language) classique, il permet à l'utilisateur de faire des aggrégations de séries temporelles. Les résultats peuvent être représentés dans des graphes, dans des tableaux, ou directement exposés via l'API HTTP.
La documentation officielle et l'onglet Explorer de Grafana permettent de prendre en main cet outil.
Puisqu'il est optimisé pour récupérer des séries temporelles, il peut être un peu perturbant de savoir comment récupérer d'autres types de données.
Par exemple, la requête suivante récupère tous les noeuds (= les différents serveurs sur adm) ainsi que les versions du noyau, qui correspondent au noyau 4.19.
sum by (nodename, release) (node_uname_info{release=~"4.19.*"})
Mais dis donc Jamy comment ça marche ?
Prometheus est en réalité un simple collecteur de données. Chaque exporteur va exposer les résultats sur un port particulier, et le serveur central va régulièrement (toutes les 60s) charger une page web (par exemple gateau.adm.crans.org:9100) et récupérer le contenu. C'est donc lui qui interroge les serveurs et pas l'inverse.
Du côté des serveurs à monitorer on va alors installer des services comme prometheus-node-exporter qui vont simplement répondre à cette requête HTTP en renvoyant les données à l'instant t.
Cela veut dire que Prometheus est très simple à déboguer lorsque un node est inaccessible ! Il suffit d'essayer d'y aller avec son navigateur web.
Cela veut également dire que vous pouvez très simplement créer votre service qui va répondre sur un autre port en envoyant d'autres données et que Prometheus les acceptera.
Liste des exporteurs
Voici une liste (non exhaustive) des exporteurs disponnibles ainsi que les ports associés : Liste des exporteurs
Système d'alerte
Attention, prometheus crashe silencieusement si ses cibles ne sont pas dans un format qu'il aime. En particulier pour le json, il peut être valide contre la RFC, mais s'il y a une ligne blanche à la fin du fichier, ou des tabs à la place des espaces par exemple (comme en YAML) il va rejeter la cible, mais ne pas se plaindre.
Toutes les 60s prometheus récupère les données et regarde si elles respectent des critères définis dans le fichier de règles /etc/prometheus/rules.conf.
Si quelque chose n'est pas conforme, alors Prometheus envoie une notification à Prometheus Alertmanager qui se charge ensuite d'envoyer un webhook à NinjaBot qui publie l'évènement sur le salon IRC #monitoring.
On peut également configurer l'alertmanager pour envoyer des mails regroupant les alertes, mais il s'avère que l'on préfère être informé sur IRC.
L'alertmanager envoie également une notification lorsque l'alerte est résolue, c'est-à-dire quand Prometheus a arrêté d'envoyer l'alerte à l'alertmanager.
Pour voir les alertes en court, on peut également se connecter sur Grafana et lire le tableau « Alertes actuelles ».
SNMP
Un exporteur SNMP est installé sur le serveur Prometheus et en écoute sur localhost. Il permet de discuter en SNMP avec les onduleurs, switchs et contrôleur Unifi.
Il faut générer /etc/prometheus/smnp.yml à partir d'une configuration (à venir, ou demander à Erdnaxe) et à partir des MIBs installés sur le serveur. (erdnaxe est en train de nettoyer cette configuration pour n'exporter que ce qui est pertinent des périphériques SMNP, puis ça finira dans un rôle Ansible)
Maintenance
Supprimer les données d'un noeud
Parfois après la suppression d'un serveur on veut drop les anciennes données. Pour cela sur le serveur Prometheus :
curl -X DELETE -g 'http://localhost:9090/api/v1/series?match[]={instance="ANCINNE_NODE:9100"}'
Sinon faut être patient et attendre la fin de la persistance (par défaut 25 jours ?).