Skip to content

Latest commit

 

History

History
254 lines (182 loc) · 6.58 KB

File metadata and controls

254 lines (182 loc) · 6.58 KB

📊 Projet de monitoring avec Prometheus

Prometheus est un outil open-source de monitoring et d’alerting initialement développé par SoundCloud.
Il est utilisé pour collecter, stocker et interroger des métriques (CPU, mémoire, requêtes, erreurs, etc.) afin de surveiller l’état de santé et les performances des systèmes et des applications.

Il fonctionne selon un modèle pull :

  • Prometheus interroge régulièrement des endpoints HTTP (/metrics)
  • Les données sont stockées sous forme de séries temporelles
  • Les métriques sont interrogées à l’aide du langage PromQL
  • Les alertes sont déclenchées via Alertmanager

🔌 Exporters

Un exporter est un agent ou service qui expose des métriques dans un format lisible par Prometheus.

👉 Rôle :

  • Collecter des métriques depuis un système ou une application
  • Les exposer via un endpoint HTTP (ex : http://zeus:9100/metrics)

📌 Prometheus ne collecte rien tout seul :
Il a besoin d’exporters ou d’applications instrumentées installées sur la machine à surveiller.


🧩 Exemples d’exporters courants

Exporter Fonction
node_exporter Métriques système (CPU, RAM, disque, réseau)
blackbox_exporter Disponibilité HTTP / TCP / ICMP
mysql_exporter Base de données MySQL
postgres_exporter PostgreSQL
redis_exporter Redis
nginx_exporter Serveur web Nginx

Dans ce projet, nous nous concentrons sur blackbox_exporter et node_exporter.


🧱 Architecture

[ zeus (node & blackbox) ]
|
v
[ prometheus (alertmanager) ] ---> [ Email / Slack / Webhook ]


  • Prometheus est le serveur de monitoring
  • Zeus est le serveur surveillé

🛠️ Installation

Prometheus & Alertmanager

Rendez-vous sur le site officiel de Prometheus

prometheus alertmanager

Téléchargez les archives et copiez les dossiers extraits vers l’emplacement de votre choix.

Arborescence par défaut de Prometheus après installation :

.
├── LICENSE
├── NOTICE
├── prometheus
├── prometheus.yml
└── promtool

Arborescence par défaut de alertmanager après installation :

.
├── alertmanager
├── alertmanager.yml
├── amtool
├── data
│   ├── nflog
│   └── silences
├── LICENSE
└── NOTICE

Zeus (Node & Blackbox)

node blackbox

Téléchargez les archives et copiez les dossiers extraits vers l’emplacement de votre choix.

Arborescence par défaut de node après installation :

├── LICENSE
├── node_exporter
└── NOTICE

Arborescence par défaut de blackbox après installation :

.
├── blackbox_exporter
├── blackbox.yml
├── LICENSE
└── NOTICE

⚙️ Configurations

Prometheus

Les fichiers de configuration sont commenté en détail:

prometheus.yml

alertmanager.yml reste à la racine du dossier prometheus

alert.rules.yml reste à la racine du dossier prometheus

Zeus

Par défaut, les exporters ne se lancent pas automatiquement.
Sur zeus, on a donc crée des services avec systemctl pour que les exporters blackbox et node se lancent au démarrage automatiquement.

Node

$ cat /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
After=network.target

[Service]
User=your_user
ExecStart=/usr/bin/node_exporter
Restart=always
NoNewPrivileges=yes

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable node_exporter.service
sudo systemctl start node_exporter.service
sudo systemctl status node_exporter.service

Black box

$ cat /etc/systemd/system/blackbox_exporter.service
[Unit]
Description=Blackbox Exporter
After=network.target

[Service]
User=your_user
ExecStart=/usr/bin/black_box/blackbox_exporter
Restart=always
NoNewPrivileges=yes

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable blackbox_exporter.service
sudo systemctl start blackbox_exporter.service
sudo systemctl status blackbox_exporter.service

Check the ports

$ ss -lntp | grep -E "node|black"
LISTEN 0      4096               *:9115             *:*    users:(("blackbox_export",pid=1444,fd=3))
LISTEN 0      4096               *:9100             *:*    users:(("node_exporter",pid=1450,fd=3))  

Simple page de login

Nous avons créé une page de login simple sur zeus afin de détecter une attaque par bruteforce.
Le code source de la page se trouve dans zeus/simple_login_page.
La page de login est exposée sur le port 5000.

Pour exécuter app.py, le paquet Python prometheus_client est requis :

pip3 install prometheus_client

"prometheus_client" n'est pas un package de python par défaut. Vous aurez certainement besoin d'un venv python Comment le paramétrer:

python3 -m venv /path/to/your/virtual/environment

🧠 Testing the architecture

Vous devez exécuter les binaires ./prometheus et ./alertmanager depuis leurs répertoires respectifs afin de commencer les tests.
Ils peuvent également être configurés comme services via systemd pour démarrer automatiquement au démarrage.

Tous les scripts de test se trouvent dans zeus/scripts
(Certains paramètres des scripts peuvent nécessiter des ajustements).

Voici les dashboards Prometheus /targets et /alerts targets alerts

Notre simple page de login login

Test de l’alerte HostHighCpuLoad en lançant les scripts sur zeus et en observant le dashboard :

HostHighCpuLoad HostHighCpuLoad

Ensuite testons l'alert "HostLowMemory"

HostLowMemory HostLowMemory

Et enfin l'alerte "LoginBruteforceDetected"

LoginBruteforceDetected LoginBruteforceDetected

Comme on peut le constater, les alertes sont déclenchées avec succès.
Rappel : le fichier alertmanager.yml est configuré pour envoyer des emails lorsque les alertes sont actives.

Voici un exemple d'alerte recu par mail mail

Lorsque l'alerte est résolu on recoit également un mail mail


📝 Note

Tous les fichiers de configurations, codes et scripts sont commentés.


📜 License

License MIT