# Zabbix

Image générale de la configuration zabbix actuelle

# Zabbix Documentation

> Documentation de maintenance de l'instance Zabbix d'Improvize.  
> But : comprendre rapidement comment l'instance est organisée et savoir **ajouter / dépanner un agent** sur une machine.  
> Dernière mise à jour : 2026-06-29

---

## Sommaire

1. [L'essentiel en 1 minute](#1-lessentiel-en-1-minute)
2. [Les hôtes surveillés](#2-les-h%C3%B4tes-surveill%C3%A9s)
3. [Ce qui est configuré dans l'interface](#3-ce-qui-est-configur%C3%A9-dans-linterface)
4. [Installer l'agent sur une machine](#4-installer-lagent-sur-une-machine)
5. [Ajouter l'hôte dans l'interface](#5-ajouter-lh%C3%B4te-dans-linterface)
6. [Dépannage rapide](#6-d%C3%A9pannage-rapide)
7. [Fichiers de référence](#7-fichiers-de-r%C3%A9f%C3%A9rence)

---

## 1. L'essentiel en 1 minute

<table id="bkmrk-%C3%89l%C3%A9ment-valeur-url-h"><thead><tr><th>Élément</th><th>Valeur</th></tr></thead><tbody><tr><td>URL</td><td>[https://zabbix.improvize.eu/zabbix](https://zabbix.improvize.eu/zabbix)</td></tr><tr><td>Version (serveur + frontend)</td><td>**7.4.11**</td></tr><tr><td>Base de données</td><td>PostgreSQL</td></tr><tr><td>Agent sur les machines</td><td>**Zabbix Agent 2** en mode **actif**, port `10050`</td></tr><tr><td>Nb d'hôtes</td><td>**25** (4 serveurs physiques, 20 VM/conteneurs, 1 « Web Monitoring »)</td></tr><tr><td>Notifications</td><td>**E-mail uniquement** (seulement les alertes d'espace disque sont envoyées)</td></tr><tr><td>Proxy / Maintenance / Macros globales</td><td>**Aucun** (tous les agents remontent directement au serveur)</td></tr></tbody></table>

**Comment ça marche, en bref :** chaque machine fait tourner un **Zabbix Agent 2** en mode *actif* : c'est l'agent qui **pousse**ses données vers le serveur (rien à ouvrir en entrée vers la machine). Le serveur applique des **templates** (modèles) à chaque hôte pour décider quoi surveiller.

---

## 2. Les hôtes surveillés

Les hôtes sont rangés en 3 groupes :

- **Linux servers** → les 4 serveurs **physiques** (bare-metal).
- **Virtual machines** → les 20 VM / conteneurs qui tournent sur ces serveurs.
- **Web monitoring** → 1 hôte spécial « Web Monitoring » qui surveille des **sites web** (voir §3.4).

> 💡 Plusieurs hôtes **partagent la même IP** : c'est normal, la machine physique et ses conteneurs sont surveillés séparément mais via la même IP. Le **tag `host:<machine>`** indique sur quelle machine physique tourne chaque conteneur (utilisé dans le dashboard pour repérer la machine concernée par un problème).

### Serveurs physiques

<table id="bkmrk-h%C3%B4te-ip-particularit"><thead><tr><th>Hôte</th><th>IP</th><th>Particularité</th></tr></thead><tbody><tr><td>**hathi**</td><td>88.198.1.27</td><td>Serveur principal (héberge le plus de conteneurs + le serveur Zabbix)</td></tr><tr><td>**sprite**</td><td>176.9.70.250</td><td>Serveur hôte</td></tr><tr><td>**siam2026**</td><td>77.42.5.123</td><td>Serveur hôte</td></tr><tr><td>**maru**</td><td>136.243.57.113</td><td>Serveur hôte (a aussi un backup local surveillé)</td></tr></tbody></table>

### VM / conteneurs

<table id="bkmrk-h%C3%B4te-ip-tourne-sur-%28"><thead><tr><th>Hôte</th><th>IP</th><th>Tourne sur (`host:`)</th><th>Templates en plus</th></tr></thead><tbody><tr><td>alchemy</td><td>88.198.1.27</td><td>hathi</td><td> </td></tr><tr><td>amis</td><td>10.0.3.5</td><td>hathi</td><td> </td></tr><tr><td>api</td><td>176.9.70.250</td><td>sprite</td><td> </td></tr><tr><td>babar</td><td>176.9.70.250</td><td>sprite</td><td>PostgreSQL + Backup</td></tr><tr><td>bookstack</td><td>10.0.3.22</td><td>hathi</td><td> </td></tr><tr><td>cjmonnet</td><td>10.0.3.8</td><td>hathi</td><td> </td></tr><tr><td>elephant</td><td>10.0.3.11</td><td>hathi</td><td>PostgreSQL + Backup</td></tr><tr><td>facteur</td><td>10.0.3.9</td><td>hathi</td><td> </td></tr><tr><td>front</td><td>176.9.70.250</td><td>sprite</td><td> </td></tr><tr><td>gitlab</td><td>10.0.3.16</td><td>hathi</td><td> </td></tr><tr><td>izmail</td><td>176.9.70.250</td><td>sprite</td><td> </td></tr><tr><td>jsreport</td><td>176.9.70.250</td><td>(sprite)</td><td> </td></tr><tr><td>lachambre</td><td>10.0.3.2</td><td>hathi</td><td> </td></tr><tr><td>mbo</td><td>77.42.5.123</td><td>siam2026</td><td>PostgreSQL + Backup</td></tr><tr><td>ntfy</td><td>176.9.70.250</td><td>sprite</td><td> </td></tr><tr><td>pagesjaunes</td><td>10.0.3.18</td><td>hathi</td><td> </td></tr><tr><td>webcli</td><td>10.0.3.3</td><td>hathi</td><td> </td></tr><tr><td>websys</td><td>10.0.3.4</td><td>hathi</td><td> </td></tr><tr><td>wip</td><td>10.0.3.20</td><td>hathi</td><td>PostgreSQL</td></tr><tr><td>Zabbix server</td><td>127.0.0.1</td><td>hathi</td><td>Santé du serveur Zabbix</td></tr></tbody></table>

> Le réseau interne `10.0.3.x` correspond aux conteneurs hébergés sur **hathi**.

---

## 3. Ce qui est configuré dans l'interface

### 3.1 Templates appliqués

<table id="bkmrk-template-origine-app"><thead><tr><th>Template</th><th>Origine</th><th>Appliqué à</th></tr></thead><tbody><tr><td>**Linux by Zabbix agent active**</td><td>Standard Zabbix</td><td>Tous les hôtes</td></tr><tr><td>**OS APT updates by Zabbix agent**</td><td>⭐ **Custom**</td><td>Tous les hôtes</td></tr><tr><td>**Personalized Scripts by Zabbix agent**</td><td>⭐ **Custom**</td><td>babar, elephant, mbo, maru</td></tr><tr><td>**PostgreSQL by Zabbix agent 2 active**</td><td>Standard Zabbix</td><td>babar, elephant, mbo, wip</td></tr><tr><td>**Zabbix server health by Zabbix agent active**</td><td>Standard Zabbix</td><td>Zabbix server uniquement</td></tr></tbody></table>

#### ⭐ OS APT updates by Zabbix agent

Surveille les mises à jour de paquets disponibles (Debian/Ubuntu). Repose sur une clé **UserParameter** `apt.updates[*]` (à installer sur chaque agent, voir §4.3).

<table id="bkmrk-item-cl%C3%A9-intervalle-"><thead><tr><th>Item</th><th>Clé</th><th>Intervalle</th></tr></thead><tbody><tr><td>Pending package updates</td><td>`apt.updates[total]`</td><td>1 h</td></tr><tr><td>Pending security updates</td><td>`apt.updates[security]`</td><td>1 h</td></tr></tbody></table>

Triggers : *Warning* si des mises à jour existent, *Average* s'il y a des mises à jour de **sécurité**.

#### ⭐ Personalized Scripts by Zabbix agent

Surveille la **taille de la dernière sauvegarde locale**.

<table id="bkmrk-item-cl%C3%A9-intervalle--1"><thead><tr><th>Item</th><th>Clé</th><th>Intervalle</th></tr></thead><tbody><tr><td>Get local backup size</td><td>`agent.getlocalbackupsize`</td><td>1 h</td></tr></tbody></table>

> 🔔 **Changement important** : ce contrôle est passé d'un `system.run[...]` à une clé **UserParameter**`agent.getlocalbackupsize` (agent actif). Plus besoin d'autoriser `system.run` côté agent — il suffit du UserParameter (voir §4.4).

### 3.2 Alerting (notifications)

**Un seul média actif : Email** (SMTP classique).

<table id="bkmrk-param%C3%A8tre-valeur-ser"><thead><tr><th>Paramètre</th><th>Valeur</th></tr></thead><tbody><tr><td>Serveur SMTP</td><td>`10.0.3.9`</td></tr><tr><td>HELO</td><td>`bmat.com`</td></tr><tr><td>Expéditeur</td><td>`zabbix@bmat.com`</td></tr></tbody></table>

**Actions configurées :**

<table id="bkmrk-action-d%C3%A9clencheur-d"><thead><tr><th>Action</th><th>Déclencheur</th><th>Destinataire</th><th>Statut</th></tr></thead><tbody><tr><td>Disque espace critique (≥90 %)</td><td>événement « Space is critically low »</td><td>**cat (BOGGIO JC)**</td><td>Activée</td></tr><tr><td>Disque espace faible (≥80 %)</td><td>événement « Space is low »</td><td>**cat (BOGGIO JC)**</td><td>Activée</td></tr><tr><td>Report problems to Zabbix administrators</td><td>(défaut)</td><td>—</td><td>Désactivée</td></tr></tbody></table>

> 📌 **Seules les alertes d'espace disque envoient un e-mail.** Les autres triggers (mises à jour APT, etc.) s'affichent dans l'interface mais ne génèrent **pas** de mail.

### 3.3 Utilisateurs

<table id="bkmrk-utilisateur-r%C3%B4le-adm"><thead><tr><th>Utilisateur</th><th>Rôle</th></tr></thead><tbody><tr><td>Admin</td><td>Super admin (built-in)</td></tr><tr><td>**cat** (BOGGIO JC)</td><td>Super admin — destinataire des alertes mail</td></tr><tr><td>Alex</td><td>Admin</td></tr><tr><td>Emily</td><td>Admin</td></tr><tr><td>Jessica / Lucas / Ludivine</td><td>Dev</td></tr><tr><td>guest</td><td>Guest (désactivé)</td></tr></tbody></table>

### 3.4 Surveillance des sites web (hôte « Web Monitoring »)

Un hôte dédié exécute **8 scénarios web** qui vérifient la disponibilité de sites externes en HTTP (code de réponse attendu : **200**), toutes les **1 minute** :

`arepege.org` · `bmat.com` · `collegejeanmonnet.com` · `improvize.eu` · `lesprixdelacreationmusicale.com` · `melmax.fr` · `rigny-usse.fr` · `thefreecat.org/files`

### 3.5 Dashboard « Global view »

Widgets en place :

- **Disk space and cpu usage** – top hôtes par usage disque/CPU
- **Host availability** – nb d'hôtes disponibles / inconnus / total
- **Disk Space Used in %** et **CPU Usage Over Time** – graphes (serveurs physiques)
- **Local backup size** – taille des backups (elephant, mbo, babar, maru)
- **PostgreSQL connections** – connexions PG (babar, elephant, mbo, wip)
- **Available system updates** – tableau des mises à jour par hôte (Regular / Security)
- **Hosted sites** – état HTTP des 8 sites surveillés (vert = 200)
- **Current problems** – problèmes en cours, avec le tag `host:`
- **System information** – santé du serveur Zabbix

---

## 4. Installer l'agent sur une machine

> 🎯 Étape à reproduire sur **chaque nouvelle machine** à surveiller. L'agent utilisé est **Zabbix Agent 2** en mode **actif**.

### 4.1 Installer le paquet

Sur Debian/Ubuntu, ajouter le dépôt officiel Zabbix puis installer l'agent 2 :

```bash
# Adapter la version du repo à l'OS (exemple Debian 12)
wget https://repo.zabbix.com/zabbix/7.4/release/debian/pool/main/z/zabbix-release/zabbix-release_latest_7.4+debian12_all.deb
sudo dpkg -i zabbix-release_latest_7.4+debian12_all.deb
sudo apt update
sudo apt install zabbix-agent2

```

> Garder l'agent sur la **même version majeure** que le serveur (7.4).

### 4.2 Configurer l'agent

Éditer `/etc/zabbix/zabbix_agent2.conf` :

```ini
Server=<IP du serveur Zabbix>
ServerActive=<IP du serveur Zabbix>
Hostname=<nom exact de l'hôte dans l'interface>   # ex: elephant, babar, wip...
Include=/etc/zabbix/zabbix_agent2.d/*.conf

```

> ⚠️ Le `Hostname` de l'agent **doit être identique** au nom de l'hôte dans l'interface, sinon les items actifs ne remontent pas.

Mode **actif** : l'agent sort vers le serveur sur le port `10051`. Aucun port entrant à ouvrir vers la machine ; vérifier juste que la machine peut **sortir** vers le serveur.

### 4.3 UserParameter mises à jour APT (toutes les machines)

Le template *OS APT updates* a besoin de la clé `apt.updates[*]`. Créer `/etc/zabbix/zabbix_agent2.d/apt.conf` :

```ini
# $1 = "total" ou "security"
UserParameter=apt.updates[*],/etc/zabbix/zabbix_agent2.d/scripts/apt-updates.sh "$1"

```

Le script doit renvoyer un **entier** (nombre de paquets), typiquement basé sur `apt-get -s upgrade` ou `/usr/lib/update-notifier/apt-check`.

### 4.4 UserParameter taille de backup (machines avec sauvegarde locale)

Pour le template *Personalized Scripts* (clé `agent.getlocalbackupsize`). Créer un fichier de conf, par ex. `/etc/zabbix/zabbix_agent2.d/backup.conf` :

```ini
UserParameter=agent.getlocalbackupsize,/etc/zabbix/zabbix_agent2.d/scripts/getlastbackupsize.sh

```

Le script renvoie la taille (en octets) de la dernière sauvegarde locale. Le rendre exécutable (`chmod +x`) et accessible à l'utilisateur `zabbix`.

> ✅ Avec cette méthode (UserParameter), **plus besoin** d'autoriser `system.run` via `AllowKey` comme avant.

### 4.5 Cas particuliers

**Conteneurs** (réseau `10.0.3.x` sur hathi) : l'agent surveille deux systèmes de fichiers — `/` (le conteneur) et `/host` (le rootfs de la machine physique, bind-monté dans le conteneur). Penser à ce bind-mount pour récupérer les vraies métriques disque de l'hôte.

**PostgreSQL** (babar, elephant, mbo, wip) : le monitoring PG est intégré au plugin PostgreSQL de l'Agent 2 (template *PostgreSQL by Zabbix agent 2 active*). Fournir un accès en lecture via les **macros au niveau de l'hôte** (`{$PG.URI}`, `{$PG.USER}`, `{$PG.PASSWORD}`).

> Depuis PostgreSQL 17, donner les droits de lecture des stats à l'utilisateur zabbix :
> 
> ```sql
> GRANT pg_read_all_stats TO zabbix;
> 
> ```

### 4.6 Redémarrer

```bash
sudo systemctl restart zabbix-agent2
sudo systemctl enable zabbix-agent2

```

---

## 5. Ajouter l'hôte dans l'interface

1. **Data collection → Hosts → Create host**.
2. **Host name** = exactement le `Hostname` de l'agent. Interface agent = IP, port `10050`.
3. **Groupe** : `Linux servers` (physique) ou `Virtual machines` (VM/conteneur).
4. Ajouter le **tag `host:<machine physique>`** si c'est un conteneur/VM.
5. **Lier les templates** : 
    - `Linux by Zabbix agent active`
    - `OS APT updates by Zabbix agent`
    - `Personalized Scripts by Zabbix agent` (si backup local)
    - `PostgreSQL by Zabbix agent 2 active` (si base de données)
6. Vérifier dans **Monitoring → Latest data** que les items remontent (mode actif : peut prendre 1-2 min).

---

## 6. Dépannage rapide

<table id="bkmrk-sympt%C3%B4me-cause-proba"><thead><tr><th>Symptôme</th><th>Cause probable / Solution</th></tr></thead><tbody><tr><td>L'agent ne remonte plus</td><td>`Hostname` agent ≠ nom dans l'interface ; ou `ServerActive` pointe ailleurs ; ou la machine ne peut pas **sortir**vers le serveur sur `10051`.</td></tr><tr><td>Item « not supported »</td><td>UserParameter manquant (`apt.updates` ou `agent.getlocalbackupsize`) → vérifier le fichier dans `zabbix_agent2.d/`et redémarrer l'agent.</td></tr><tr><td>Pas d'alerte e-mail reçue</td><td>Seules les alertes **espace disque** envoient un mail. Tester le média via **Alerts → Media types → Email → Test**. Vérifier que `cat (BOGGIO JC)` reçoit bien.</td></tr><tr><td>Un site web passe en rouge</td><td>Voir **Monitoring → Latest data** sur l'hôte *Web Monitoring* (code ≠ 200).</td></tr><tr><td>Mise à jour Zabbix</td><td>Serveur **et** frontend doivent rester sur la même version majeure (7.4.x).</td></tr><tr><td>Sauvegarde de la config</td><td>Exporter régulièrement templates + hôtes (bouton **Export**) et sauvegarder la base PostgreSQL du serveur Zabbix.</td></tr></tbody></table>

---

## 7. Fichiers de référence

**Sur les machines (agent) :**

<table id="bkmrk-fichier-r%C3%B4le-%2Fetc%2Fza"><thead><tr><th>Fichier</th><th>Rôle</th></tr></thead><tbody><tr><td>`/etc/zabbix/zabbix_agent2.conf`</td><td>Conf principale (Server, ServerActive, Hostname)</td></tr><tr><td>`/etc/zabbix/zabbix_agent2.d/*.conf`</td><td>Confs additionnelles (UserParameters, plugins)</td></tr><tr><td>`/etc/zabbix/zabbix_agent2.d/scripts/apt-updates.sh`</td><td>Comptage des mises à jour APT</td></tr><tr><td>`/etc/zabbix/zabbix_agent2.d/scripts/getlastbackupsize.sh`</td><td>Taille de la dernière sauvegarde</td></tr></tbody></table>

**Sur le serveur :**

<table id="bkmrk-%C3%89l%C3%A9ment-r%C3%B4le-apache-"><thead><tr><th>Élément</th><th>Rôle</th></tr></thead><tbody><tr><td>Apache vhost → `/usr/share/zabbix/ui`</td><td>Frontend web</td></tr><tr><td>Base PostgreSQL</td><td>Données Zabbix</td></tr><tr><td>nginx frontal</td><td>Reverse-proxy vers `zabbix.improvize.eu`</td></tr></tbody></table>