Étendre les agents Zabbix

Cette section fournit des instructions détaillées pour étendre les fonctionnalités d’un agent Zabbix à l’aide d’un paramètre utilisateur.

L’exemple ci-dessous récupère le nombre d’instructions exécutées par un serveur MySQL. Les étapes s’appliquent à la fois à l’agent Zabbix et à l’agent Zabbix 2.

Cet exemple illustre le fonctionnement des paramètres utilisateur. Pour la supervision de MySQL en production, envisagez d’utiliser les modèles MySQL prédéfinis, qui ne nécessitent pas de paramètres utilisateur.

Étape 1 : Préparer l'accès à MySQL

L'agent s'exécute en tant qu'utilisateur du système d'exploitation zabbix. N'utilisez pas le compte MySQL root, car il peut utiliser une authentification basée sur les sockets, ce qui peut empêcher l'agent de se connecter. Créez plutôt un utilisateur MySQL dédié :

CREATE USER 'zbx_monitor'@'localhost' IDENTIFIED BY '<password>';

Stockez les identifiants dans un fichier lisible uniquement par l'utilisateur zabbix, par exemple /etc/zabbix/mysql_monitor.cnf (le chemin dépend du système d'exploitation et de la méthode d'installation de Zabbix) :

[client]
user=zbx_monitor
password=<strong password>

Définissez le propriétaire et les permissions du fichier :

sudo chown zabbix:zabbix /etc/zabbix/mysql_monitor.cnf
sudo chmod 600 /etc/zabbix/mysql_monitor.cnf

Transmettez explicitement ce fichier avec --defaults-extra-file (qui doit être la première option transmise au client MySQL), plutôt que de vous fier à ~/.my.cnf, car la variable d'environnement HOME du démon peut être absente ou différente de celle attendue. Si MySQL utilise un chemin de socket différent de celui par défaut, ajoutez une ligne socket= au même fichier.

Étape 2 : Écrire une commande

Écrivez un script ou une commande personnalisé(e) pour récupérer le paramètre requis et assurez-vous qu'il ou elle fonctionne dans les mêmes conditions que le démon de l'agent.

La commande suivante renvoie le nombre d'instructions exécutées par le serveur MySQL :

/usr/bin/mysql --defaults-extra-file=/etc/zabbix/mysql_monitor.cnf -N -B -e "SHOW GLOBAL STATUS LIKE 'Questions'" | /usr/bin/awk '{print $2}'

Vous pouvez tester la commande en tant qu'utilisateur zabbix ; elle doit afficher un seul nombre :

sudo -u zabbix sh -c "/usr/bin/mysql --defaults-extra-file=/etc/zabbix/mysql_monitor.cnf -N -B -e \"SHOW GLOBAL STATUS LIKE 'Questions'\" | /usr/bin/awk '{print \$2}'"

Étape 3 : Ajouter la commande à la configuration de l'agent Zabbix

Plutôt que de modifier le fichier de configuration de l'agent principal (zabbix_agentd.conf ou zabbix_agent2.conf), créez un fichier distinct dans le répertoire inclus par le paramètre Include. Les fichiers distincts sont plus faciles à gérer et sont moins susceptibles d'être affectés par les mises à niveau des paquets.

Par exemple, créez /etc/zabbix/zabbix_agentd.d/mysql.conf (/etc/zabbix/zabbix_agent2.d/mysql.conf pour l'agent Zabbix 2) avec le contenu suivant :

UserParameter=mysql.questions,/usr/bin/mysql --defaults-extra-file=/etc/zabbix/mysql_monitor.cnf -N -B -e "SHOW GLOBAL STATUS LIKE 'Questions'" | /usr/bin/awk '{print $2}'

mysql.questions est la clé d'élément unique. Elle doit être unique dans la configuration de l'agent.

Vous pouvez tester le paramètre en exécutant l'agent Zabbix avec l'option -t. Effectuez le test en tant qu'utilisateur zabbix et indiquez le fichier de configuration s'il ne se trouve pas à l'emplacement par défaut :

Pour l'agent Zabbix :

sudo -u zabbix zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -t mysql.questions

Pour l'agent Zabbix 2 :

sudo -u zabbix zabbix_agent2 -c /etc/zabbix/zabbix_agent2.conf -t mysql.questions

La sortie attendue contient un nombre, par exemple :

mysql.questions                               [t|4567]

Étape 4 : Recharger et tester le paramètre utilisateur

Rechargez les paramètres utilisateur à partir du fichier de configuration en exécutant la commande suivante :

Pour l'agent Zabbix :

sudo zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -R userparameter_reload

Pour l'agent Zabbix 2 :

sudo zabbix_agent2 -c /etc/zabbix/zabbix_agent2.conf -R userparameter_reload

Exécutez la commande en tant que root ou en tant qu'utilisateur du système d'exploitation exécutant l'agent.

Vous pouvez également redémarrer l'agent pour appliquer les modifications de configuration.

Vous pouvez tester le paramètre avec l'agent en cours d'exécution à l'aide de l'utilitaire zabbix_get, par exemple depuis le serveur Zabbix :

zabbix_get -s <IP address> -k mysql.questions

Ici, <IP address> correspond à l'adresse IP de l'hôte exécutant l'agent auquel zabbix_get se connecte. L'adresse IP de l'hôte exécutant zabbix_get doit être répertoriée dans le paramètre Server de l'agent.

Pour que ce test fonctionne, l'agent doit accepter les vérifications passives (pour l'agent Zabbix, StartAgents ne doit pas être défini sur 0). Si l'agent est configuré uniquement pour les vérifications actives, ignorez ce test et vérifiez l'élément dans Monitoring > Latest data après avoir terminé la dernière étape.

Étape 5 : Créer un élément

Créez un nouvel élément sur l’hôte surveillé avec la clé d’élément mysql.questions.

Sélectionnez le type d’élément : Zabbix Agent ou Zabbix Agent (active).

Pour Zabbix agent (passif), l’adresse du serveur ou du proxy Zabbix doit être indiquée dans le paramètre Server de l’agent. Pour Zabbix agent (actif), le paramètre ServerActive doit spécifier le serveur ou le proxy Zabbix, et le paramètre Hostname de l’agent doit correspondre exactement au nom d’hôte configuré dans l’interface.

Sélectionnez le Type d’information de l’élément. L’agent renvoie toujours la valeur sous forme de texte ; le Type d’information définit la manière dont Zabbix interprète et stocke la valeur après les étapes de prétraitement.

Pour le compteur cumulatif brut, sélectionnez Numérique (non signé). Pour mesurer le nombre d’instructions par seconde, sélectionnez Numérique (flottant) et ajoutez l’étape de prétraitement Variation par seconde.