Debian – Installation et configuration de Zabbix

Debian – Installation et configuration de Zabbix

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

Comments

No comments yet. Why don’t you start the discussion?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *