4 SNMP trap
Aperçu
La réception des traps SNMP est l’inverse de l’interrogation des appareils compatibles SNMP.
Dans ce cas, l’information est envoyée depuis un appareil compatible SNMP vers snmptrapd et est collectée ou "trapée" par le serveur Zabbix ou le proxy Zabbix à partir d’un fichier.
En général, les traps sont envoyés lors d’un changement d’état, et l’agent se connecte au serveur sur le port 162 (par opposition au port 161 côté agent, utilisé pour les requêtes). L’utilisation des traps peut permettre de détecter certains problèmes brefs qui surviennent entre deux intervalles de requête et qui pourraient être manqués par les données de requête.
La réception des traps SNMP dans Zabbix est conçue pour fonctionner avec snmptrapd et l’un des mécanismes de transmission des traps vers Zabbix - soit un script Bash ou Perl, soit SNMPTT.
La manière la plus simple de configurer la surveillance des traps après avoir configuré Zabbix consiste à utiliser la solution par script Bash, car Perl et SNMPTT sont souvent absents des distributions modernes et nécessitent une configuration plus complexe.
Cependant, cette solution utilise un script configuré comme traphandle.
Pour de meilleures performances sur les systèmes de production, utilisez la solution Perl intégrée
(soit un script avec l’option do perl, soit SNMPTT).
Le flux de traitement de la réception d’un trap :
snmptrapdreçoit un trap.snmptrapdtransmet le trap au script récepteur (Bash, Perl) ou à SNMPTT.- Le récepteur analyse, met en forme et écrit le trap dans un fichier.
- Le collecteur de traps SNMP de Zabbix lit et analyse le fichier de traps.
- Pour chaque trap, Zabbix trouve tous les éléments de collecteur de traps SNMP dont les interfaces d’hôte correspondent à l’adresse du trap reçu. Notez que seul le IP ou le DNS sélectionné dans l’interface d’hôte est utilisé lors de la correspondance.
- Pour chaque élément trouvé, le trap est comparé à l’expression régulière dans
snmptrap[regexp]. Le trap est défini comme valeur de tous les éléments correspondants. Si aucun élément correspondant n’est trouvé et qu’il existe un élémentsnmptrap.fallback, le trap est défini comme valeur de celui-ci. - Si le trap n’a été défini comme valeur d’aucun élément, Zabbix consigne par défaut le trap non apparié. (Cela est configuré par Consigner les traps SNMP non appariés dans Administration > Général > Autre.)
Remarques sur le basculement HA
Lors du basculement d’un nœud de haute disponibilité (HA), Zabbix continuera le traitement après le dernier enregistrement dans le dernier horodatage ISO 8601 ; si le même enregistrement n’est pas trouvé, seul l’horodatage sera utilisé pour identifier la dernière position.
Configuration des traps SNMP
Ce type d'élément nécessite la configuration d'interface suivante :
Étape 1: Créer une interface SNMP pour l'hôte
- Dans Collecte de données > Hôtes, créez un hôte ou modifiez celui qui existe déjà.
- Dans le champ Interfaces, sélectionnez le type d'interface SNMP.
- Saisissez l'adresse IP/le nom DNS et le numéro de port.
- Sélectionnez la version SNMP dans la liste déroulante : (SNMPv1, SNMPv2, ou SNMPv3) et ajoutez les informations d'identification de l'interface en fonction de la version SNMP sélectionnée.
L'adresse de chaque trap reçu sera comparée aux adresses IP et DNS de toutes les interfaces SNMP afin de trouver les hôtes correspondants.
Étape 2: Configurer l'élément
- Pour l'hôte, créez un élément ou modifiez celui qui existe déjà.
-
Dans le champ Key, utilisez l'une des clés de trap SNMP :
snmptrap[regexp]- capture tous les traps SNMP qui correspondent à l'expression régulière spécifiée dans le paramètreregexp; siregexpn'est pas spécifié, capture n'importe quel trap.
Les macros utilisateur et les expressions régulières globales sont prises en charge dans le paramètre.
Valeur de retour: trap SNMP.
Cet élément peut être défini uniquement pour les interfaces SNMP.snmptrap.fallback- capture tous les traps SNMP qui n'ont été capturés par aucun des élémentssnmptrap[]pour cette interface.
Valeur de retour: trap SNMP.
Cet élément peut être défini uniquement pour les interfaces SNMP.
La correspondance d'expressions régulières multilignes n'est pas prise en charge pour le moment.
- Définissez Type d'information sur Log afin que les horodatages soient analysés. D'autres formats, tels que Numérique, sont également acceptables, mais peuvent nécessiter un gestionnaire de traps personnalisé.
- Configuration de la supervision des traps SNMP
Configuration du serveur/proxy Zabbix
Pour lire les traps, le serveur ou le proxy Zabbix doit être configuré pour démarrer le processus SNMP trapper et pointer vers le fichier de traps qui est écrit par SNMPTT ou par un récepteur de traps Bash/Perl.
Pour cela, modifiez le fichier de configuration (zabbix\_server.conf ou zabbix\_proxy.conf) :
StartSNMPTrapper=1
SNMPTrapperFile=[TRAP FILE]
Si le paramètre systemd PrivateTmp est utilisé, il est peu probable que ce fichier fonctionne dans /tmp.
Configuration du récepteur de traps Bash
Exigences : uniquement snmptrapd.
Un script de récepteur de traps Bash script
peut être utilisé pour transmettre les traps au serveur Zabbix depuis snmptrapd à l'aide du fichier trapper. Pour
le configurer, ajoutez l'option traphandle au fichier de configuration de snmptrapd (snmptrapd.conf),
voir l'exemple.
Il peut être nécessaire de redémarrer snmptrapd pour prendre en compte les modifications de sa configuration.
Configuration du récepteur de traps Perl
Exigences: Perl, Net-SNMP compilé avec --enable-embedded-perl (fait par défaut depuis Net-SNMP 5.4)
Un récepteur de traps Perl (voir misc/snmptrap/zabbix\_trap\_receiver.pl) peut être utilisé pour transmettre les traps au serveur Zabbix directement depuis snmptrapd.
Pour le configurer:
- Ajoutez le script Perl au fichier de configuration de snmptrapd (
snmptrapd.conf), par exemple:
perl do "[FULL PATH TO PERL RECEIVER SCRIPT]";
- Configurez le récepteur, par exemple:
$SNMPTrapperFile = '[TRAP FILE]';
$DateTimeFormat = '[DATE TIME FORMAT]';
snmptrapd peut devoir être redémarré pour prendre en compte les modifications de sa configuration.
Si le nom du script n'est pas entre guillemets, snmptrapd refusera de
démarrer et affichera des messages similaires à ceux-ci:
Regexp modifiers "/l" and "/a" are mutually exclusive at (eval 2) line 1, at end of line
Regexp modifier "/l" may not appear twice at (eval 2) line 1, at end of line
Configuration de SNMPTT
Au départ, snmptrapd doit être configuré pour utiliser SNMPTT.
Pour de meilleures performances, SNMPTT doit être configuré comme un démon en utilisant snmptthandler-embedded pour lui transmettre les traps.
Voir les instructions pour configurer SNMPTT.
Lorsque SNMPTT est configuré pour recevoir les traps, configurez snmptt.ini :
- Activez l'utilisation du module Perl du package
NET-SNMP:
net_snmp_perl_enable = 1
- Enregistrez les traps dans le fichier de traps qui sera lu par Zabbix :
log_enable = 1
log_file = [TRAP FILE]
- Définissez le format de date et d'heure :
date_time_format = %Y-%m-%dT%H:%M:%S%z
Le package net-snmp-perl a été supprimé dans RHEL 8.0-8.2 ; il a été réintégré dans RHEL 8.3.
Pour plus d'informations, consultez les problèmes connus.
Formatez maintenant les traps pour que Zabbix puisse les reconnaître (modifiez snmptt.conf) :
- Chaque instruction
FORMATdoit commencer parZBXTRAP [address], où[address]sera comparée aux adresses IP et DNS des interfaces SNMP sur Zabbix. Par exemple :
EVENT coldStart .1.3.6.1.6.3.1.1.5.1 "Status Events" Normal
FORMAT ZBXTRAP $aA Device reinitialized (coldStart)
- Voir plus bas les détails sur le format des traps SNMP.
N'utilisez pas de traps inconnus - Zabbix ne pourra pas les reconnaître.
Les traps inconnus peuvent être gérés en définissant un événement général dans snmptt.conf :
EVENT general .* "General event" Normal
Format du trap SNMP
Tous les récepteurs de traps Perl personnalisés et la configuration SNMPTT doivent formater le trap de la manière suivante :
[timestamp] [the trap, part 1] ZBXTRAP [address] [the trap, part 2]
où
[timestamp]- l'horodatage au format%Y-%m-%dT%H:%M:%S%z.ZBXTRAP- en-tête indiquant qu'un nouveau trap commence sur cette ligne.[address]- adresse IP utilisée pour trouver l'hôte de ce trap.
Notez que ZBXTRAP et [address] seront supprimés du message pendant le traitement.
Si le trap est formaté autrement, Zabbix peut analyser les traps de manière inattendue.
Exemple de trap :
2024-01-11T15:28:47+0200 .1.3.6.1.6.3.1.1.5.3 Normal "Status Events" localhost - ZBXTRAP 192.168.1.1 Link down on interface 2. Admin state: 1. Operational state: 2
Cela donnera le trap suivant pour l'interface SNMP avec IP=192.168.1.1 :
2024-01-11T15:28:47+0200 .1.3.6.1.6.3.1.1.5.3 Normal "Status Events"
localhost - Link down on interface 2. Admin state: 1. Operational state: 2
Configuration système requise
Il est recommandé d’installer les fichiers MIB afin de garantir que les valeurs des éléments soient affichées dans le format correct. Sans les fichiers MIB, des problèmes de formatage peuvent survenir, comme l’affichage des valeurs en HEX au lieu de l’UTF-8 ou inversement.
Prise en charge des fichiers volumineux
Zabbix prend en charge les fichiers volumineux pour les fichiers de trapper SNMP. La taille limite maximum que Zabbix peut lire est 2\^63 (8 EiB). Notez que le système de fichier peut imposer une limite inférieure sur la taille du fichier.
Rotation des journaux
Zabbix ne fournit aucun système de rotation des journaux - cela doit être géré par l'utilisateur. La rotation des journaux doit d'abord renommer l'ancien fichier, puis seulement ensuite le supprimer, afin qu'aucun trap ne soit perdu :
- Zabbix ouvre le fichier de trap à la dernière position connue et passe à l'étape 3.
- Zabbix vérifie si le fichier actuellement ouvert a été soumis à une rotation en comparant le numéro d'inode au numéro d'inode du fichier de trap défini. S'il n'y a aucun fichier ouvert, Zabbix réinitialise la dernière position et revient à l'étape 1.
- Zabbix lit les données du fichier actuellement ouvert et définit la nouvelle position.
- Les nouvelles données sont analysées. S'il s'agissait du fichier rotaté, le fichier est fermé et le processus revient à l'étape 2.
- S'il n'y a pas de nouvelles données, Zabbix dort pendant 1 seconde et revient à l'étape 2.
Système de fichiers
En raison de l'implémentation du fichier de trap, Zabbix a besoin que le système de fichiers prenne en charge les inodes afin de différencier les fichiers (l'information est obtenue par un appel stat()).
Exemples de configuration utilisant différentes versions du protocole SNMP
Cet exemple utilise snmptrapd et un script Bash de réception pour transmettre les traps au serveur Zabbix.
Configuration:
- Configurez Zabbix pour démarrer le SNMP trapper et définissez le fichier de traps. Ajoutez à
zabbix_server.conf:
StartSNMPTrapper=1
SNMPTrapperFile=/var/lib/zabbix/snmptraps/snmptraps.log
- Téléchargez le script Bash dans
/usr/sbin/zabbix_trap_handler.sh:
curl -o /usr/sbin/zabbix_trap_handler.sh https://raw.githubusercontent.com/zabbix/zabbix-docker/trunk/templates/scripts/snmptraps/zabbix_trap_handler.sh
Si nécessaire, ajustez la variable ZABBIX_TRAPS_FILE dans le script.
Pour utiliser la valeur par défaut, créez d'abord le répertoire parent:
mkdir -p /var/lib/zabbix/snmptraps
- Ajoutez ce qui suit à
snmtrapd.conf(reportez-vous à l'exemple fonctionnel)
traphandle default /bin/bash /usr/sbin/zabbix_trap_handler.sh
Il peut être nécessaire de redémarrer snmptrapd pour prendre en compte les modifications de sa configuration.
-
Créez un élément SNMP TEST (gardez à l'esprit les exigences de configuration initiales):
Type: SNMP trap
Type d'information: Log
Interface de l'hôte: SNMP 127.0.0.1
Clé:snmptrap["linkUp"]
Format de l'heure du journal:yyyyMMdd.hhmmss
Notez que le format de date et d'heure ISO 8601 est utilisé.
- Ensuite, nous allons configurer
snmptrapdpour la version du protocole SNMP choisie et envoyer des traps de test à l'aide de l'utilitairesnmptrap.
SNMPv1, SNMPv2
Les protocoles SNMPv1 et SNMPv2 reposent sur l'authentification par "community string". Dans l'exemple ci-dessous, nous utiliserons "secret" comme community string. Elle doit être définie avec la même valeur sur les expéditeurs de traps SNMP.
Veuillez noter que, bien qu'encore largement utilisé dans les environnements de production, SNMPv2 n'offre aucun chiffrement ni authentification réelle de l'expéditeur. Les données sont envoyées en texte clair et, par conséquent, ces versions du protocole ne doivent être utilisées que dans des environnements sécurisés, tels qu'un réseau privé, et ne doivent jamais être utilisées sur un réseau public ou tiers.
La version 1 de SNMP n'est plus vraiment utilisée aujourd'hui, car elle ne prend pas en charge les compteurs 64 bits et est considérée comme un protocole obsolète.
Pour autoriser l'acceptation des traps SNMPv1 ou SNMPv2, vous devez ajouter la ligne suivante à snmptrapd.conf.
Remplacez secret par la community string SNMP configurée sur les expéditeurs de traps SNMP:
authCommunity log,execute,net secret
Ensuite, nous pouvons envoyer un trap de test à l'aide de snmptrap. Nous utiliserons dans cet exemple l'OID courant "link up":
snmptrap -v 2c -c secret localhost '' linkUp.0
SNMPv3
SNMPv3 corrige les problèmes de sécurité de SNMPv1/v2 et fournit l'authentification et le chiffrement. Vous pouvez utiliser les méthodes d'authentification MD5 ou plusieurs SHA, ainsi que DES ou plusieurs AES comme chiffrement.
Pour autoriser l'acceptation de SNMPv3, ajoutez les lignes suivantes à snmptrapd.conf:
createUser -e 0x8000000001020304 traptest SHA mypassword AES
authuser log,execute traptest
Veuillez noter le mot-clé "execute" qui permet d'exécuter des scripts pour ce modèle de sécurité utilisateur.
snmptrap -v 3 -n "" -a SHA -A mypassword -x AES -X mypassword -l authPriv -u traptest -e 0x8000000001020304 localhost 0 linkUp.0
Si vous souhaitez utiliser des méthodes de chiffrement robustes telles que AES192 ou AES256, veuillez utiliser
net-snmp à partir de la version 5.8. Vous devrez peut-être le recompiler avec l'option configure
: --enable-blumenthal-aes.
Les anciennes versions de net-snmp ne prennent pas en charge AES192/AES256.
Voir aussi: Strong Authentication or Encryption.
Vérification
Dans les deux exemples, vous verrez des lignes similaires dans votre /var/lib/zabbix/snmptraps/snmptraps.log:
2024-01-30T10:04:23+0200 ZBXTRAP 127.0.0.1
UDP: [127.0.0.1]:56585->[127.0.0.1]:162
DISMAN-EVENT-MIB::sysUpTimeInstance = 2538834
SNMPv2-MIB::snmpTrapOID.0 = IF-MIB::linkUp.0
La valeur de l'élément dans Zabbix sera:
2024-01-30 10:04:23 2024-01-30 10:04:21
2024-01-30T10:04:21+0200 UDP: [127.0.0.1]:56585->[127.0.0.1]:162
DISMAN-EVENT-MIB::sysUpTimeInstance = 2538834
SNMPv2-MIB::snmpTrapOID.0 = IF-MIB::linkUp.0
Exemple avec Perl:
2024-01-30T11:42:54+0200 ZBXTRAP 127.0.0.1
PDU INFO:
receivedfrom UDP: [127.0.0.1]:58649->[127.0.0.1]:162
notificationtype TRAP
version 1
community public
errorstatus 0
transactionid 1
requestid 2101882550
messageid 0
errorindex 0
VARBINDS:
DISMAN-EVENT-MIB::sysUpTimeInstance type=67 value=Timeticks: (457671) 1:16:16.71
SNMPv2-MIB::snmpTrapOID.0 type=6 value=OID: IF-MIB::linkUp.0