Implémentation des Clés Utilisateur Personnalisées dans Zabbix

Zabbix offre une grande flexibilité pour la surveillance de divers aspects d'un système. Au-delà des métriques prédéfinies, il est souvent nécessaire de collecter des données spécifiques à l'environnement ou à l'application. C'est là que les clés utilisateur personnalisées (UserParameters) interviennent, permettant d'exécuter des scripts ou des commandes shell sur les hôtes surveillés pour obtenir des informations uniques.

Surveillance personnalisée : Exemple des sessions utilisateur actives

Prenons l'exemple d'une exigence courante : surveiller le nombre de personnes connectées simultanément à un serveur et générer une alerte si ce nombre dépasse un seuil, par exemple, trois utilisateurs. Zabbix peut être étendu pour gérer ce type de scénario.

Test initial avec zabbix_get

Pour interroger une métrique sur un agent Zabbix depuis le serveur, l'outil zabbix_get est utilisé. Par exemple, pour vérifier la disponibilité de l'agent :

zabbix_get -s '192.168.1.38' -p 10050 -k "agent.ping"

Notre objectif est de pouvoir interroger une clé nommée system.users.active pour obtenir le nombre de sessions actives :

zabbix_get -s '192.168.1.38' -p 10050 -k "system.users.active"

Définition d'une clé utilisateur personnalisée

Le processus implique la définition d'une commande shell qui renvoie la valeur souhaitée et sa configuration dans le fichier de l'agent Zabbix.

Préparation de la commande

Pour obtenir le nombre d'utilisateurs actuellement connectés, la commande who est très utile. En la combinant avec wc -l, on obtient un décompte simple :

who               # Affiche les utilisateurs connectés
who | wc -l       # Affiche le nombre d'utilisateurs connectés

Configuration de l'agent Zabbix

L'agent Zabbix permet d'inclure des fichiers de configuraton supplémentaires, ce qui est une bonne pratique pour organiser les clés personnalisées.

  1. Naviguez vers le répertoire de configuration de l'agent Zabbix, généralement /etc/zabbix/.
  2. Le fichier de configuraton principal est zabbix_agent2.conf. Il contient une directive Include qui permet d'importer des fichiers depuis un répertoire spécifique, comme /etc/zabbix/zabbix_agent2.d/*.conf.
# Extrait de zabbix_agent2.conf
Include=/etc/zabbix/zabbix_agent2.d/*.conf

### Option: UserParameter
#       User-defined parameter to monitor. There can be several user-defined parameters.
#       Format: UserParameter=<key>,<shell command>
#       See 'zabbix_agentd' directory for examples.
#
# Mandatory: no
# Default:
# UserParameter=

Cette section indique clairement le format des clés utilisateur : UserParameter=<clé>,<commande shell>.

Création du fichier de configuration personnalisé

Créez un nouveau fichier de configuration dans le répertoire inclus, par exemple /etc/zabbix/zabbix_agent2.d/user_sessions.conf :

[root@agent-server ~]# vim /etc/zabbix/zabbix_agent2.d/user_sessions.conf

Ajoutez-y la définition de notre clé personnalisée :

UserParameter=system.users.active,who|wc -l

Après avoir enregistré le fichier, l'agent Zabbix doit être redémarré pour que les modifications prennent effet :

[root@agent-server ~]# systemctl restart zabbix-agent2
[root@agent-server ~]# systemctl status zabbix-agent2

Validation depuis le serveur Zabbix

Une fois l'agent redémarré, testez la nouvelle clé personnalisée depuis le serveur Zabbix à l'aide de zabbix_get :

[root@zabbix-server ~]# zabbix_get -s '192.168.1.38' -p 10050 -k "system.users.active"
2

La valeur retournée (ici, 2) correspond au nombre actuel d'utilisateurs connectés sur l'hôte agent.

Intégration dans l'interface web Zabbix

Avec la clé personnalisée fonctionnelle, les étapes suivantes sont réalisées via l'interface web de Zabbix :

  1. Création d'un gabarit (Template) : Pour regrouper les éléments de surveillance.
  2. Définition d'un groupe d'applications (Application group) : Pour organiser logiquement les éléments de surveillance au sein du gabarit.
  3. Création d'un élément (Item) : En utilisant la clé system.users.active que nous venons de définir. Configurez les intervalles de collecte et le type de données.
  4. Configuration d'un déclencheur (Trigger) : Pour définir la condition d'alerte (par exemple, si system.users.active est supérieur à 3).
  5. Création d'un graphique (Graph) : Pour visualiser l'historique du nombre d'utilisateurs connectés.
  6. Liaison du gabarit à l'hôte : Attribuez le gabarit créé à l'hôte Zabbix cible.

Dépannage : Problèmes de permissions avec les commandes shell

Il est fréquent de rencontrer des problèmes de permissions lors de l'utilisation de clés personnalisées, car l'agent Zabbix s'exécute généralement sous un utilisateur non privilégié (souvent zabbix).

Un exemple courant est la commande ss -antp qui, exécutée directement depuis la ligne de commande avec un utilisateur privilégié, affiche des informations de processus (colonne users:) :

[root@agent-server ~]# ss -antp | grep -v 10050
State      Recv-Q Send-Q Local Address:Port               Peer Address:Port              
LISTEN     0      128          *:111                      *:*                   users:(("rpcbind",pid=8386,fd=4),("systemd",pid=1,fd=31))
...

Cependant, si la même commande est appelée via une clé utilisateur Zabbix (par exemple, tcp.socket.ss.atnp), l'agent Zabbix pourrait ne pas avoir les permissions nécessaires pour accéder aux informations de processus, résultant en une sortie tronquée :

[root@zabbix-server ~]# zabbix_get -s '192.168.1.38' -p 10050 -k "tcp.socket.ss.atnp"
State      Recv-Q Send-Q Local Address:Port               Peer Address:Port              
LISTEN     0      128          *:111                      *:*                  
...

Pour résoudre ce type de problème, on peut accorder des permissions spéciales à la commande exécutée. Pour l'exemple de ss, il est possible d'utiliser le bit SUID (Set User ID) :

[root@agent-server sbin]# ll /usr/sbin/ss
-rwxr-xr-x. 1 root root 131544 Apr 11  2018 /usr/sbin/ss
[root@agent-server sbin]# chmod +s /usr/sbin/ss
[root@agent-server sbin]# ll /usr/sbin/ss
-rwsr-sr-x. 1 root root 131544 Apr 11  2018 /usr/sbin/ss

Le bit SUID (le 's' dans les permissions) permet à un exécutable d'être exécuté avec les privilèges du propriétaire du fichier (ici, root), même s'il est lancé par un utilisateur non-root comme l'agent Zabbix. Après cette modification, l'appel de la clé personnalisée via Zabbix devrait retourner la sortie complète avec les informations de processus.

Étiquettes: Zabbix Custom Keys Monitoring UserParameter Linux

Publié le 5 juin à 02h21