Prometheus: Récupérer des métriques depuis Linux

Comment récupérer les métriques d'un serveur Linux dans Prometheus avec Node Exporter

👋 Bienvenue sur la documentation de Stackhero !

Stackhero propose une solution Prometheus cloud prête à l'emploi qui offre de nombreux avantages, notamment :

  • Alert Manager inclus pour envoyer des alertes vers Slack, Mattermost, PagerDuty, etc.
  • Serveur email dédié pour envoyer un nombre illimité d'alertes par e-mail.
  • Blackbox pour sonder HTTP, ICMP, TCP et bien plus.
  • Configuration simple grâce à l'éditeur de fichier de configuration en ligne.
  • Mises à jour faciles en un clic.
  • Performance optimale et sécurité renforcée grâce à une VM privée et dédiée.

Gagnez du temps et simplifiez-vous la vie : il suffit de 5 minutes pour essayer la solution Prometheus cloud hosting de Stackhero !

Node Exporter est un logiciel que vous pouvez installer sur les noyaux *NIX (Linux, OpenBSD, FreeBSD ou Darwin) pour exposer des métriques système à Prometheus. Il s'agit d'un composant essentiel pour surveiller les performances des serveurs et l'état de l'infrastructure.

Dans la terminologie Prometheus, Node Exporter agit comme un exporter et s'ajoute comme une cible dans votre configuration Prometheus. Prometheus se connecte à Node Exporter via le port TCP 9100 en HTTP à intervalles réguliers pour récupérer les métriques.

En résumé, Node Exporter vous permet de surveiller un système basé sur Linux. Pour les systèmes Windows, vous pouvez utiliser le Windows Exporter.

Vue d'ensemble de Stackhero pour PrometheusVue d'ensemble de Stackhero pour Prometheus

Vous pouvez télécharger Node Exporter depuis sa page de releases GitHub. Il est distribué sous forme de binaire à exécuter directement sur votre système. Comme il est conçu pour tourner en continu, il est recommandé de le configurer pour qu'il se lance automatiquement au démarrage du serveur.

Par défaut, Node Exporter ouvre le port 9100 à tout le monde, sans authentification ni chiffrement. Il est fortement conseillé d'ajouter à la fois une authentification et un chiffrement TLS (voir ci-dessous), et de configurer un firewall pour restreindre l'accès au port 9100 afin que seuls votre serveur Prometheus ou d'autres adresses IP autorisées puissent s'y connecter.

Vous pouvez suivre ces étapes sur Ubuntu :

# Rendez-vous sur https://github.com/prometheus/node_exporter/releases pour obtenir le dernier numéro de version.
node_exporter_version="1.2.0"
node_exporter_release="linux-amd64"

# Téléchargez et installez node_exporter
cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v${node_exporter_version}/node_exporter-${node_exporter_version}.${node_exporter_release}.tar.gz
tar xvfa node_exporter-${node_exporter_version}.${node_exporter_release}.tar.gz
sudo mv node_exporter-${node_exporter_version}.${node_exporter_release}/node_exporter /usr/local/bin/
rm -rf node_exporter-${node_exporter_version}.${node_exporter_release} node_exporter-${node_exporter_version}.${node_exporter_release}.tar.gz

# Créez un utilisateur "node_exporter"
sudo useradd -rs /bin/false node_exporter

# Créez un service systemd pour démarrer node_exporter automatiquement au démarrage
sudo bash -c 'cat << EOF > /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
After=network.target

[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter --web.config=/etc/prometheus_node_exporter/configuration.yml

[Install]
WantedBy=multi-user.target
EOF'

# Créez un dossier et un fichier de configuration
sudo mkdir -p /etc/prometheus_node_exporter/
sudo touch /etc/prometheus_node_exporter/configuration.yml
sudo chmod 700 /etc/prometheus_node_exporter
sudo chmod 600 /etc/prometheus_node_exporter/*
sudo chown -R node_exporter:node_exporter /etc/prometheus_node_exporter

sudo systemctl daemon-reload
sudo systemctl enable node_exporter

# Démarrez le service node_exporter et vérifiez son statut
sudo systemctl start node_exporter
sudo systemctl status node_exporter

À ce stade, le binaire node_exporter doit être en cours d'exécution sur votre serveur. Pour vérifier son fonctionnement, vous pouvez vous y connecter et vérifier qu'il retourne bien des métriques :

curl http://localhost:9100/metrics

Node Exporter ouvre le port 9100 sur le réseau public. Cela signifie que n'importe qui peut se connecter et récupérer les métriques de votre serveur ! Il est indispensable d'ajouter au minimum une authentification et un chiffrement TLS (voir ci-dessous), et il est fortement recommandé de configurer un firewall pour bloquer les requêtes sur le port 9100 provenant d'autres IP que votre serveur Prometheus.

L'installation de Node Exporter sur Debian est identique à celle sur Ubuntu. Il suffit de suivre les mêmes instructions.

Les étapes d'installation de Node Exporter dépendent du système utilisé. Même si une documentation détaillée pour chaque plateforme n'est pas fournie ici, la procédure de base consiste à télécharger le binaire adapté à votre système et à le configurer pour qu'il démarre automatiquement au boot.

Par défaut, Node Exporter ne propose aucune authentification, ce qui signifie que n'importe qui peut accéder aux métriques exposées. Pour sécuriser l'accès, vous pouvez ajouter une authentification basique pour un utilisateur.

Générez un mot de passe avec les commandes suivantes :

password=`openssl rand -base64 32`
passwordHashed=`echo ${password} | htpasswd -inBC 10 "" | tr -d ':'`
echo "Clear password to keep for Prometheus server: ${password}"

Si vous n'avez pas le binaire htpasswd, vous pouvez l'installer sur Debian/Ubuntu avec apt-get install --no-install-recommends apache2-utils.

Conservez le mot de passe en clair précieusement, car il sera nécessaire lors de la configuration de Prometheus.

Ajoutez les lignes suivantes au fichier de configuration pour créer un utilisateur "prometheus" avec le hash du mot de passe généré :

sudo cat << EOF >> /etc/prometheus_node_exporter/configuration.yml
basic_auth_users:
  prometheus: ${passwordHashed}

EOF

# Redémarrez Node Exporter
sudo systemctl restart node_exporter

Enfin, vérifiez que l'authentification fonctionne correctement :

  • L'exécution de curl http://localhost:9100/metrics doit retourner "Unauthorized".
  • L'exécution de curl -u prometheus:${password} http://localhost:9100/metrics doit retourner la liste des métriques.

Par défaut, Node Exporter ne chiffre pas les communications. Cela signifie que les identifiants, y compris le mot de passe défini précédemment, sont transmis en clair. Pour sécuriser les échanges, vous pouvez activer le chiffrement TLS comme suit.

Exécutez les commandes suivantes pour créer un certificat TLS et une clé :

# Créez le certificat TLS
cd /tmp
sudo openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 \
  -keyout /etc/prometheus_node_exporter/tlsCertificate.key \
  -out /etc/prometheus_node_exporter/tlsCertificate.crt \
  -subj "/CN=`hostname`" \
  -addext "subjectAltName = DNS:`hostname`"
sudo chmod 600 /etc/prometheus_node_exporter/*
sudo chown -R node_exporter:node_exporter /etc/prometheus_node_exporter

Ajoutez les lignes suivantes au fichier de configuration pour activer TLS, puis redémarrez Node Exporter :

sudo cat << 'EOF' >> /etc/prometheus_node_exporter/configuration.yml
tls_server_config:
  cert_file: /etc/prometheus_node_exporter/tlsCertificate.crt
  key_file: /etc/prometheus_node_exporter/tlsCertificate.key

EOF

# Redémarrez Prometheus Node Exporter
sudo systemctl restart node_exporter

Vous pouvez vérifier que TLS est actif en vous connectant en HTTPS avec la commande suivante :

curl -k -u prometheus:${password} https://localhost:9100/metrics

Notez que cette méthode n'utilise pas de certificat CA, il est donc nécessaire de passer l'option "-k" à cURL pour ignorer la vérification du certificat.

Après avoir installé et sécurisé Node Exporter, configurez votre serveur Prometheus pour collecter les métriques à intervalles réguliers.

Sur Stackhero, sélectionnez votre service Prometheus et rendez-vous sur l'URL "Prometheus configuration". Ajoutez ensuite ce bloc à la section scrape_configs :

scrape_configs:

  - job_name: "My servers pool"
    static_configs:
      - targets: [ "<yourLinuxServerDomain>:9100" ]
    basic_auth:
      username: "prometheus"
      password: "<password>"
    scheme: https
    tls_config:
      insecure_skip_verify: true
    # Relabeling "instance" pour supprimer la partie ":9100"
    relabel_configs:
      - source_labels: [__address__]
        target_label: instance
        regex: '([^:]+)(:[0-9]+)?'
        replacement: '${1}'

Enregistrez le fichier et vérifiez les logs de Prometheus pour confirmer que le rechargement s'est bien déroulé (vous pouvez consulter les logs depuis le tableau de bord Stackhero en sélectionnant votre service Prometheus puis en cliquant sur l'onglet "Logs").

Enfin, vérifiez que Prometheus collecte bien les métriques en accédant à l'interface Prometheus sur le tableau de bord Stackhero, puis en allant dans Status > Targets. Votre serveur Linux doit apparaître dans la liste des cibles avec le statut UP.

La cible "myLinuxServer" est UPLa cible "myLinuxServer" est UP

Pour visualiser les métriques récupérées depuis Node Exporter, connectez-vous à Prometheus via le tableau de bord Stackhero en utilisant l'URL "Prometheus UI" ou directement à l'adresse https://<prometheusDomain>/.

Dans le champ "Expression", saisissez node_memory_MemTotal_bytes puis validez. Si tout est correctement configuré, vous verrez la quantité totale de RAM du serveur affichée en octets.

La quantité totale de RAM pour ce serveur est de 4068794368 octets soit 3,78GBLa quantité totale de RAM pour ce serveur est de 4068794368 octets soit 3,78GB

Grafana permet de générer facilement des dashboards à partir des données Prometheus. Pour des instructions détaillées sur la configuration de Grafana afin d'afficher les données Prometheus, veuillez consulter la documentation Grafana.

Exemple de dashboard généré par Grafana, basé sur les données de Prometheus Node ExporterExemple de dashboard généré par Grafana, basé sur les données de Prometheus Node Exporter