Un outil de supervision comme Zabbix est essentiel pour assurer la disponibilité et les performances des infrastructures informatiques. Il permet de surveiller en temps réel l’état des serveurs, des applications et des réseaux, et d’identifier rapidement les anomalies avant qu’elles n’impactent les utilisateurs. En centralisant les données et en offrant des alertes proactives, Zabbix facilite la prise de décision, optimise la maintenance et réduit les temps d’arrêt.
Étape 1 :
Ajoutez le repository et mettez à jour les paquets
wget https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_latest_7.0+debian12_all.deb
dpkg -i zabbix-release_latest_7.0+debian12_all.deb
Étape 2 :
Mettez à jour les paquets
apt update
Étape 3 :
Installez le serveur zabbix et l’agent
apt install zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-sql-scripts zabbix-agent
Étape 4 :
Téléchargez le paquet MariaDB-server
apt update
apt install mariadb-server -y
Puis, sécurisez le serveur MariaDB,
mariadb-secure-installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.
Enter current password for root (enter for none): appuyez_sur_entrée
OK, successfully used password, moving on...
Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.
You already have your root account protected, so you can safely answer 'n'.
Switch to unix_socket authentication [Y/n] y
Enabled successfully!
Reloading privilege tables..
... Success!
You already have your root account protected, so you can safely answer 'n'.
Change the root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y
... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
Étape 5 :
Démarrez les services et activez le démarrage automatique
systemctl enable mariadb.service
systemctl start mariadb.service
Étape 6 :
Connectez-vous à la base de données.
mariadb -u root -p
Créez la base de données pour zabbix
create database zabbix character set utf8mb4 collate utf8mb4_bin;
create user zabbix@localhost identified by 'zabbbix_password_db';
grant all privileges on zabbix.* to zabbix@localhost;
quit;
Modifiez le fichier /etc/zabbix/zabbix_server.conf
nano /etc/zabbix/zabbix_server.conf
Editez la ligne DBPassword
DBPassword=zabbbix_password_db
Étape 7 :
Redemarrez les services
systemctl restart zabbix-server zabbix-agent apache2
systemctl enable zabbix-server zabbix-agent apache2
Et voilà ! Votre serveur Zabbix est prêt : http://[ip_machine_distante]/zabbix
À présent, nous allons ajouter un hôte à superviser !
Étape 1 :
Rendez-vous sur le serveur à surperviser (dans notres cas VM Debian 12)
wget https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_latest_7.0+debian12_all.deb
dpkg -i zabbix-release_latest_7.0+debian12_all.deb
Mettez à jour les paquets
apt update
Installez l’agent
apt install zabbix-agent
Editez le fichier /etc/zabbix/zabbix_agent.conf
nano /etc/zabbix/zabbix_agent.conf
Server=ip_zabbix_serveur
ServerActive=ip_zabbix_serveur
Puis, redémarrez les services zabbix
systemctl restart zabbix-agent
systemctl enable zabbix-agent
Maintenant, allez sur zabbix !
Rendez-vous dans Surveillance -> Hôtes -> Créer un hôte
Ajoutez un nom, un modèle, groupe d’hôte, une interface (ip)
- Modèles : cliquez sur Sélectionner, Templates/Operaring systems et sélectionnez le modèle correspondant à votre hôte.
- Interfaces : cliquer sur Ajouter, puis Agent, saisissez une ip
Une fois la configuration terminée, l’agent devient vert :
Et voilà ! Vous avez ajouté votre premier hôte 😉
Ne changeons pas les bonnes habitudes, essayons de scripter cela !
Voici un code qui permet d’installer zabbix sur un hôte :
nano setup_zabbix_agent.sh
#!/bin/bash
# Met à jour les paquets et installe wget
echo "Mise à jour des paquets et installation de wget..."
apt update && apt install -y wget
# Télécharge et installe le dépôt Zabbix
echo "Téléchargement et installation du dépôt Zabbix..."
wget https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian11_all.deb
dpkg -i zabbix-release_latest+debian11_all.deb
apt update
# Installe Zabbix Agent et ses plugins
echo "Installation de Zabbix Agent et ses plugins..."
apt install -y zabbix-agent zabbix-agent-plugin-*
# Pause de 2 minutes pour modification des fichiers
echo "Pause de 2 minutes pour modifications éventuelles par l'utilisateur..."
echo "Modifier ip serveur zabbix : [ip_serveur_zabbix] -> /etc/zabbix/zabbix-agent.conf"
sleep 120
# Redémarre et active le service Zabbix Agent
echo "Redémarrage et activation du service Zabbix Agent..."
systemctl restart zabbix-agent
systemctl enable zabbix-agent
echo "Installation et configuration de Zabbix Agent terminées."
Rendez le executable
chmod +x setup_zabbix_agent.sh
Puis, lancez le
./setup_zabbix_agent.sh
Voici un code qui permet d’ajouter un hôte à zabbix :
nano add_host_zabbix.sh
#!/bin/bash
# Configuration
ZABBIX_URL="https://[ip_serveur_zabbix]/api_jsonrpc.php"
ZABBIX_USER="username_zabbix"
ZABBIX_PASSWORD="password_zabbix"
# Demande à l'utilisateur de saisir les informations du nouvel hôte
read -p "Entrez le nom du nouvel hôte : " NEW_HOST_NAME
read -p "Entrez l'adresse IP du nouvel hôte : " NEW_HOST_IP
# Installation de jq, wget et curl
echo "Installation des dépendances (jq, wget, curl)..."
# Vérification et installation de jq
if ! command -v jq &> /dev/null; then
echo "jq n'est pas installé. Installation en cours..."
sudo apt update && sudo apt install -y jq
if [[ $? -ne 0 ]]; then
echo "Erreur lors de l'installation de jq."
exit 1
fi
else
echo "jq est déjà installé."
fi
# Vérification et installation de wget
if ! command -v wget &> /dev/null; then
echo "wget n'est pas installé. Installation en cours..."
sudo apt install -y wget
if [[ $? -ne 0 ]]; then
echo "Erreur lors de l'installation de wget."
exit 1
fi
else
echo "wget est déjà installé."
fi
# Vérification et installation de curl
if ! command -v curl &> /dev/null; then
echo "curl n'est pas installé. Installation en cours..."
sudo apt install -y curl
if [[ $? -ne 0 ]]; then
echo "Erreur lors de l'installation de curl."
exit 1
fi
else
echo "curl est déjà installé."
fi
NEW_HOST_GROUP="Linux servers"
TEMPLATE_NAME="Linux by Zabbix agent"
# Fonction pour obtenir le token d'authentification
get_auth_token() {
AUTH_TOKEN=$(curl -s --request POST \
--url "$ZABBIX_URL" \
--header "Content-Type: application/json-rpc" \
--data '{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"username": "'"$ZABBIX_USER"'",
"password": "'"$ZABBIX_PASSWORD"'"
},
"id": 1
}' | jq -r '.result')
if [ "$AUTH_TOKEN" == "null" ] || [ -z "$AUTH_TOKEN" ]; then
echo "Erreur d'authentification. Vérifiez les identifiants."
exit 1
fi
}
# Fonction pour obtenir l'ID du groupe d'hôtes
get_group_id() {
GROUP_ID=$(curl -s --request POST \
--url "$ZABBIX_URL" \
--header "Content-Type: application/json-rpc" \
--data '{
"jsonrpc": "2.0",
"method": "hostgroup.get",
"params": {
"filter": {
"name": "'"$NEW_HOST_GROUP"'"
}
},
"auth": "'"$AUTH_TOKEN"'",
"id": 2
}' | jq -r '.result[0].groupid')
if [ -z "$GROUP_ID" ] || [ "$GROUP_ID" == "null" ]; then
echo "Erreur : Le groupe d'hôtes \"$NEW_HOST_GROUP\" est introuvable."
exit 1
fi
}
# Fonction pour obtenir l'ID du template
get_template_id() {
TEMPLATE_ID=$(curl -s --request POST \
--url "$ZABBIX_URL" \
--header "Content-Type: application/json-rpc" \
--data '{
"jsonrpc": "2.0",
"method": "template.get",
"params": {
"filter": {
"host": "'"$TEMPLATE_NAME"'"
}
},
"auth": "'"$AUTH_TOKEN"'",
"id": 3
}' | jq -r '.result[0].templateid')
if [ -z "$TEMPLATE_ID" ] || [ "$TEMPLATE_ID" == "null" ]; then
echo "Erreur : Le template \"$TEMPLATE_NAME\" est introuvable."
exit 1
fi
}
# Fonction pour ajouter un nouvel hôte
create_host() {
RESPONSE=$(curl -s --request POST \
--url "$ZABBIX_URL" \
--header "Content-Type: application/json-rpc" \
--data '{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "'"$NEW_HOST_NAME"'",
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "'"$NEW_HOST_IP"'",
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "'"$GROUP_ID"'"
}
],
"templates": [
{
"templateid": "'"$TEMPLATE_ID"'"
}
]
},
"auth": "'"$AUTH_TOKEN"'",
"id": 4
}')
if echo "$RESPONSE" | jq -e '.result.hostids' > /dev/null; then
echo "Hôte \"$NEW_HOST_NAME\" ajouté avec succès."
else
echo "Erreur lors de l'ajout de l'hôte : $(echo "$RESPONSE" | jq -r '.error.data')"
exit 1
fi
}
# Script principal
if ! command -v jq &> /dev/null; then
echo "La commande jq est requise pour exécuter ce script. Installez-la avec : sudo apt install jq"
exit 1
fi
echo "Authentification..."
get_auth_token
echo "Token obtenu : $AUTH_TOKEN"
echo "Récupération de l'ID du groupe d'hôtes..."
get_group_id
echo "ID du groupe : $GROUP_ID"
echo "Récupération de l'ID du template..."
get_template_id
echo "ID du template : $TEMPLATE_ID"
echo "Ajout du nouvel hôte..."
create_host
Rendez le script executable
chmod +x add_host_zabbix.sh
Lancez le !
./add_host_zabbix.sh