manual/config/items/itemtypes/snmptrap
La réception d'interruptions SNMP est l'opposé de l'interrogation des périphériques compatibles SNMP.
Dans ce cas, les informations sont envoyées à partir d'un périphérique compatible SNMP et sont collectées ou "trappées" par Zabbix.
Habituellement, les interruptions sont envoyées lors d'un changement de condition 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 de traps peut détecter certains problèmes courts qui se produisent au cours de l'intervalle de requête et peuvent être manqués par la requête de données.
La réception de traps SNMP dans Zabbix est conçue pour fonctionner avec snmptrapd et l'un des mécanismes pour passer les traps à Zabbix - soit un script Bash ou Perl soit SNMPTT.
Le moyen le plus simple de configurer la surveillance des traps après avoir configuré Zabbix est d'utiliser la solution de script Bash, car Perl et SNMPTT sont souvent absents dans les 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 embarquée (soit un script avec l'option do perl
soit SNMPTT).
Flux de travail de réception d'un trap :
snmptrapd
reçoit un trapsnmptrapd
transmet le trap au script récepteur (Bash, Perl) ou SNMPTTsnmptrap[expression régulière]
. Le trap est défini sur la valeur de tous les éléments correspondants. Si aucun élément correspondant n'est trouvé et qu'il existe unélément snmptrap.fallback
, le trap est défini sur la valeur de celui-ci.La configuration des champs suivants dans l'interface web est spécifique à ce type d'élément:
Dans Configuration → Hôtes, dans le champ Interface hôte, définissez une interface SNMP avec la bonne adresse IP ou le bon DNS. L'adresse de chaque trap reçu est comparée aux adresses IP et DNS de toutes les interfaces SNMP pour trouver les hôtes correspondants.
Dans le champ Clé, utilisez l'une des clés du trap SNMP :
Clé | ||
---|---|---|
Description | Valeur de retour | Commentaires |
snmptrap[regexp] | ||
Intercepte tous les traps SNMP qui correspondent à l'expression régulière spécifiée dans regexp. Si regexp n'est pas spécifié, attrape n'importe quel trap. | Trap SNMP | Cet élément ne peut être défini que pour les interfaces SNMP. Les macros utilisateur et les expressions régulières globales sont prises en charge dans le paramètre de cette clé d'élément. |
snmptrap.fallback | ||
Intercepte tous les traps SNMP qui n'ont été interceptées par aucun des éléments snmptrap[] pour cette interface. | Trap SNMP | Cet élément ne peut être défini que pour les interfaces SNMP. |
La correspondance d'expressions régulières multilignes n'est pas prise en charge pour le moment.
Définissez le Type d'information à 'Journal' pour que les horodatages soient analysés. Notez que d'autres formats tels que 'Numérique' sont également acceptables, mais peuvent nécessiter un gestionnaire d'interruptions personnalisé.
Pour que la surveillance des traps SNMP fonctionne, elle doit d'abord être configurée correctement (voir ci-dessous).
Pour lire les traps, le serveur ou le proxy Zabbix doit être configuré pour démarrer le processus de trappeur SNMP et pointer vers le fichier de trap en cours d'écriture par SNMPTT ou un récepteur de trap Bash/Perl. Pour ce faire, modifiez le fichier de configuration (zabbix_server.conf ou zabbix_proxy.conf) :
Si le paramètre systemd PrivateTmp est utilisé, il est peu probable que ce fichier fonctionne dans /tmp .
Pré-requis : uniquement snmptrapd.
Un script de récepteur de trap Bash peut être utilisé pour transmettre des traps au serveur Zabbix directement depuis snmptrapd. Pour le configurer, ajoutez l'option traphandle
au fichier de configuration snmptrapd (snmptrapd.conf
), voir l'exemple.
Dans un premier temps, snmptrapd doit être configuré pour utiliser SNMPTT.
Pour des performances optimales, SNMPTT doit être configuré en tant que démon à l'aide de snmptthandler-embedded pour lui transmettre les interruptions. Voir les instructions pour configurer SNMPTT.
Lorsque SNMPTT est configuré pour recevoir les traps, configurer snmptt.ini
:
activer l'utilisation du module Perl du package NET-SNMP :
net_snmp_perl_enable = 1
logger les traps dans le fichier trap qui sera lu par Zabbix :
log_enable = 1 log_file = [TRAP FILE]
définir le format date-heure :
date_time_format = %H:%M:%S %Y/%m/%d = [DATE TIME FORMAT]
Le package "net-snmp-perl" a été supprimé dans RHEL 8.0-8.2 ; rajouté dans RHEL 8.3. Pour plus d'informations, consultez les problèmes connus.
Formater les traps pour que Zabbix les reconnaisse (éditer snmptt.conf):
Chaque instruction FORMAT doit commencer par "ZBXTRAP [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)
En savoir plus sur le format d'interruption SNMP ci-dessous.
N'utilisez pas de traps inconnus - Zabbix ne pourra pas les reconnaître. Les traps inconnues peuvent être gérés en définissant un événement général dans snmptt.conf:
EVENT general .* "General event" Normal
Pré-requis : Perl, Net-SNMP compilé avec --enable-embedded-perl (fait par défaut depuis Net-SNMP 5.4)
Le récepteur de traps Perl (recherchez misc/snmptrap/zabbix_trap_receiver.pl) peut être utilisé pour transférer les traps au serveur Zabbix directement depuis snmptrapd. Pour le configurer :
ajouter le script perl au fichier de configuration snmptrapd (snmptrapd.conf), par exemple :
perl do "[FULL PATH TO PERL RECEIVER SCRIPT]";
configurer le récepteur, par exemple :
$SNMPTrapperFile = '[TRAP FILE]'; $DateTimeFormat = '[DATE TIME FORMAT]';
Si le nom du script n'est pas entre quote, snmptrapd refusera de démarrer avec des messages similaires à ceux-ci :
Tous les récepteurs de trap Perl personnalisés et la configuration de trap SNMPTT doivent formater le trap de la manière suivante :
où
Notez que "ZBXTRAP" et "[address]" seront coupés du message pendant le traitement. Si le trap est formaté autrement, Zabbix peut analyser les traps de manière inattendue.
Exemple de trap :
11:30:15 2011/07/27 .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 entraînera le trap suivant pour l'interface SNMP avec IP=192.168.1.1 :
11:30:15 2011/07/27 .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
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.
Zabbix ne fournit aucun système de rotation des journaux - il doit être géré par l'utilisateur. La rotation du journal doit d'abord renommer l'ancien fichier et ne le supprimer que plus tard afin qu'aucune information ne soit perdue :
En raison de l'implémentation du fichier de trap, Zabbix a besoin du système de fichiers pour prendre en charge les inodes afin de différencier les différents fichiers (les informations sont acquises par un appel stat()).
Cet exemple utilise snmptrapd et un script récepteur Bash pour transmettre les interruptions au serveur Zabbix.
Installation :
Configurer Zabbix pour démarrer le trappeur SNMP et définissez le fichier de trap. Ajouter à zabbix_server.conf
:
StartSNMPTrapper=1 SNMPTrapperFile=/tmp/my_zabbix_traps.tmp
Télécharger 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/6.2/Dockerfiles/snmptraps/alpine/conf/usr/sbin/zabbix_trap_handler.sh
Si nécessaire, ajuster la variable ZABBIX_TRAPS_FILE dans le script. Pour utiliser la valeur par défaut, créer d'abord le répertoire parent :
Ajouter ce qui suit à snmtrapd.conf
(se reporter à l'exemple)
traphandle default /bin/bash /usr/sbin/zabbix_trap_handler.sh
Créer un élément SNMP TEST :
Host SNMP interface IP: 127.0.0.1 Key: snmptrap["linkup"]
Log time format: yyyyMMdd.hhmmss
Ensuite, configurer snmptrapd
pour la version de protocole SNMP choisie et envoyer des traps de test à l'aide de l'utilitaire snmptrap
.
Les protocoles SNMPv1 et SNMPv2 s'appuient sur l'authentification "chaîne de communauté". Dans l'exemple ci-dessous, nous utiliserons "secret" comme chaîne de communauté. Il doit être défini sur la même valeur sur les expéditeurs de traps SNMP.
Veuillez noter que bien qu'il soit encore largement utilisé dans les environnements de production, SNMPv2 n'offre aucun chiffrement ni véritable authentification de l'expéditeur. Les données sont envoyées sous forme de texte brut et, par conséquent, ces versions de 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.
SNMP version 1 n'est pas vraiment utilisé de nos jours car il ne prend pas en charge les compteurs 64 bits et est considéré comme un protocole hérité.
Pour activer l'acceptation des traps SNMPv1 ou SNMPv2, vous devez ajouter la ligne suivante à snmptrapd.conf
. Remplacez "secret" par la chaîne de communauté SNMP configurée sur les expéditeurs de traps SNMP :
Ensuite, nous pouvons envoyer un trap de test en utilisant snmptrap
. Nous utiliserons l'OID commun "link up" dans cet exemple :
SNMPv3 résout les problèmes de sécurité SNMPv1/v2 et fournit authentification et cryptage. Vous pouvez utiliser SHA ou MD5 comme méthode d'authentification et AES ou DES comme chiffrement.
Pour activer l'acceptation de SNMPv3, ajoutez la ligne suivante à snmptrapd.conf
:
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 cryptage fortes 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 : http://www.net-snmp.org/wiki/index.php/Strong_Authentication_or_Encryption
Dans les deux exemples, vous verrez des lignes similaires dans votre /var/lib/zabbix/snmptraps/snmptraps.log
:
20220805.102235 ZBXTRAP 127.0.0.1
UDP: [127.0.0.1]:35736->[127.0.0.1]:162
DISMAN-EVENT-MIB::sysUpTimeInstance = 0:0:00:00.00
SNMPv2-MIB::snmpTrapOID.0 = IF-MIB::linkUp.0
La valeur de l'élément dans Zabbix sera :
2022-08-05 10:54:43 2022-08-05 10:54:41
20220805.105441 UDP: [127.0.0.1]:44262->[127.0.0.1]:162
DISMAN-EVENT-MIB::sysUpTimeInstance = 0:0:00:00.00
SNMPv2-MIB::snmpTrapOID.0 = IF-MIB::linkUp.0