This is a translation of the original English documentation page. Help us make it better.

manual/config/items/itemtypes/snmptrap

Aperçu

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 :

  1. snmptrapd reçoit un trap
  2. snmptrapd transmet le trap au script récepteur (Bash, Perl) ou SNMPTT
  3. Le récepteur analyse, formate et écrit le trap dans un fichier
  4. Le trappeur SNMP Zabbix lit et analyse le fichier de trap
  5. Pour chaque trap, Zabbix trouve tous les éléments "trappeur SNMP" avec les interfaces hôte correspondantes à l'adresse du trap reçu. Notez que seules les interfaces pour lesquelles "IP" ou "DNS" est sélectionné sont utiliséespour la correspondance.
  6. Pour chaque élément trouvé, le trap est comparé à une expression régulière dans snmptrap[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.
  7. Si le trap n'a été défini sur la valeur d'aucun élément, Zabbix enregistre par défaut le trap sans correspondance. (Ceci est configuré dans "Enregistrer les traps SNMP non appariés" dans Administration → Général → Autre.)

Configuration des traps SNMP

La configuration des champs suivants dans l'interface web est spécifique à ce type d'élément:

  • Votre hôte doit avoir une interface SNMP

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.

  • Configurer l'élément

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).

1 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 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) :

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 trap Bash

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.

Configuration de SNMPTT

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 :

  1. activer l'utilisation du module Perl du package NET-SNMP :

    net_snmp_perl_enable = 1

  2. logger les traps dans le fichier trap qui sera lu par Zabbix :

    log_enable = 1 log_file = [TRAP FILE]

  3. 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):

  1. 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)

  2. 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

Configuration du récepteur de traps Perl

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 :

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
Format de trap SNMP

Tous les récepteurs de trap Perl personnalisés et la configuration de trap SNMPTT doivent formater le trap de la manière suivante :

[timestamp] [the trap, part1] ZBXTRAP [address] [the trap, part 2]

  • [timestamp] - l'horodatage utilisé pour les éléments de journal
  • ZBXTRAP - en-tête qui indique qu'un nouveau trap commence dans cette ligne
  • [address] - Adresse IP utilisée pour trouver l'hôte de ce trap

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

2 Pré-requis système

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 - 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 :

  1. Zabbix ouvre le fichier au dernier emplacement connu et passe à l'étape 3
  2. Zabbix vérifie si le fichier actuellement ouvert a subi une rotation en comparant le numéro d'inode au numéro d'inode du fichier d'interruption défini. S'il n'y a pas de fichier ouvert, Zabbix réinitialise le dernier emplacement et passe à l'étape 1.
  3. Zabbix lit les données du fichier actuellement ouvert et définit le nouvel emplacement.
  4. Les nouvelles données sont analysées. S'il s'agissait du fichier pivoté, le fichier est fermé et revient à l'étape 2.
  5. S'il n'y a pas de nouvelles données, Zabbix se met en veille 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 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()).

Exemples de configuration utilisant différentes versions de protocole SNMP

Cet exemple utilise snmptrapd et un script récepteur Bash pour transmettre les interruptions au serveur Zabbix.

Installation :

  1. 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

  2. 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 :

mkdir -p /var/lib/zabbix/snmptraps
  1. Ajouter ce qui suit à snmtrapd.conf (se reporter à l'exemple)

    traphandle default /bin/bash /usr/sbin/zabbix_trap_handler.sh

  2. Créer un élément SNMP TEST :

    Host SNMP interface IP: 127.0.0.1 Key: snmptrap["linkup"] Log time format: yyyyMMdd.hhmmss

  3. Ensuite, configurer snmptrapd pour la version de protocole SNMP choisie et envoyer des traps de test à l'aide de l'utilitaire snmptrap.

SNMPv1, SNMPv2

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 :

authCommunity log,execute,net secret

Ensuite, nous pouvons envoyer un trap de test en utilisant snmptrap. Nous utiliserons l'OID commun "link up" dans cet exemple :

snmptrap -v 2c -c secret localhost 0 linkUp.0
SNMPv3

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 :

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 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

Vérification

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

Voir également