La configuration de Prometheus comprend plusieurs sections différentes, telles que global
, job_name
, scrape_configs
et rule_files
.
global
contient des configurations qui s'appliquent en général à l'ensemble de Prometheus.
Il y a deux configurations importantes dans cette sectio :
scrape_interval
: fréquence à laquelle Prometheus récupère les donnéesevaluation_interval
: réévalue les règles (alertes).scrape_timeout
qui détermine le temps d'attente maximal lors du scraping.job_name
contient des configurations spécifiques pour un bloc spécifique de Prometheus, comme le nom de ce bloc. Il y a également une configuration metrics_path
qui détermine la route utilisée pour le scraping des métriques, et une configuration static_config
qui contient des informations supplémentaires telles que les labels utilisés pour standardiser les données et les cibles (URL/IP:ports) pour le scraping.
La section scrape_configs
contient des configurations spécifiques pour le scraping. Il y a une configuration job_name
qui détermine le nom de ce bloc de scraping, et une configuration metrics_path
qui détermine la route utilisée pour récupérer les métriques. Il y a également une configuration static_config
qui contient des informations supplémentaires telles que les labels utilisés pour standardiser les données et les cibles (URL/IP:ports) pour le scraping.
rule_files
contient les configurations des alertes utilisées par Prometheus, y compris les fichiers de règles utilisés pour définir les alertes.
Voici un exemple de configuration prometheus.yaml
:
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_timeout: 10s
scrape_configs:
- job_name: "example_app"
metrics_path: "/metrics"
static_configs:
- targets: ["host1:9090", "host2:9090"]
rule_files:
- "/path/to/rules.yaml"
Dans cet exemple, Prometheus est configuré pour récupérer les données toutes les 15 secondes et pour réévaluer les règles toutes les 15 secondes. Le temps d'attente maximal pour la récupération des données est de 10 secondes. Il y a un seul bloc de scraping nommé example_app
qui utilise la route /metrics
pour récupérer les métriques. Il y a deux cibles définies pour ce bloc de scraping host1:9090
et host2:9090
. Enfin, il y a un fichier de règles /path/to/rules.yaml
qui est utilisé pour les alertes.
Dans Prometheus, il existe deux principales définitions: les jobs
et les instances
.
Les métriques sont des valeurs numériques qui sont récupérées par Prometheus à partir des instances. Les métriques ont une structure de nom unique qui comprend un préfixe de l'application, suivi de plusieurs champs de labellisation optionnels qui décrivent la métrique.
Par exemple :
# up{job="<job-name>", instance="<instance-id>"} <value>
node_cpu_seconds_total{cpu="0",mode="iowait"} 0.3
process_cpu{instance="192.168.1.10:9100",job="node_exporter",service="myapp"} 42
Le nom d'une métrique est en général : <prefix_app>_<nom>_<unit>_<calcul>{<label>="<valeur>", ...} <valeur_metric>
Concernant le naming, la doc prometheus comporte beaucoup d'exemples : https://prometheus.io/docs/practices/naming/
Depuis localhost:9090
nous pouvons directement faire des queries, par exemple :
prometheus_http_request_duration_seconds_count{instance="localhost:9090", handler="/metrics"}
prometheus_http_request_duration_seconds_count{instance="localhost:9090", handler="/metrics"}[5m]
On peut aussi afficher le résultat via un graph :
prometheus_http_request_duration_seconds_count{instance="localhost:9090", handler="/metrics"}
Globalement, l'interface prometheus peut servir à préparer les queries pour Grafana.