manual/config/items/itemtypes/snmptrap

Vue d'ensemble

La réception des traps SNMP est l'opposé de l'interrogation des périphériques compatibles SNMP.

Dans ce cas, les informations sont envoyées depuis un périphérique compatible SNMP vers snmptrapd et sont collectées ou « piégées » par Zabbix server ou Zabbix proxy à partir d'un fichier.

En général, les traps sont envoyés lors d'un changement de condition et l'agent se connecte au serveur sur le port 162 (par opposition au port 161 du côté de l'agent, qui est utilisé pour les requêtes). L'utilisation des traps peut permettre de détecter certains problèmes de courte durée qui surviennent entre deux intervalles d'interrogation et qui peuvent ê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 à 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 est d'utiliser la solution basée sur un 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 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, met en forme et écrit le trap dans un fichier
  4. Le processus SNMP trapper de Zabbix lit et analyse le fichier de traps
  5. Pour chaque trap, Zabbix recherche tous les éléments « SNMP trapper » dont les interfaces hôte correspondent à l'adresse du trap reçu. Notez que seule la valeur « IP » ou « DNS » sélectionnée dans l'interface hôte est utilisée lors de la correspondance.
  6. 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ément snmptrap.fallback, le trap est défini comme valeur de celui-ci.
  7. Si le trap n'a été défini comme valeur d'aucun élément, Zabbix enregistre par défaut le trap non correspondant dans le journal. (Cela se configure avec « Log unmatched SNMP traps » dans Administration > General > Other.)
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 du frontend suivante.

1. Créez une interface SNMP pour votre hôte

  • Dans Collecte de données > Hôtes, créez/modifiez l’hôte et, dans le champ Interfaces, ajoutez le type d’interface « SNMP » en spécifiant l’adresse IP ou DNS.

    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.

2. Configurez l’élément

  • Dans Collecte de données > Hôtes, créez/modifiez l’élément nécessaire.
  • Dans le champ Clé, utilisez l’une des clés de trap SNMP :
Clé
Description Valeur de retour Commentaires
snmptrap[regexp]
Capture tous les traps SNMP correspondant à l’expression régulière spécifiée dans regexp. Si regexp n’est pas spécifié, capture 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
Capture tous les traps SNMP qui n’ont été capturés 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 actuellement pas prise en charge.

  • Définissez le 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 dans lequel SNMPTT ou un récepteur de traps Bash/Perl écrit. 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

Prérequis : uniquement snmptrapd.

Un script de récepteur de traps Bash 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

Prérequis : Perl, Net-SNMP compilé avec --enable-embedded-perl (activé 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 directement au serveur Zabbix 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]';

Il peut être nécessaire de redémarrer snmptrapd pour que les modifications de sa configuration soient prises en compte.

Si le nom du script n'est pas entre guillemets, 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
Configuration de SNMPTT

Tout d'abord, snmptrapd doit être configuré pour utiliser SNMPTT.

Pour obtenir les meilleures performances, SNMPTT doit être configuré comme un démon en utilisant snmptthandler-embedded pour lui transmettre les traps. Voir les instructions de configuration de SNMPTT.

Lorsque SNMPTT est configuré pour recevoir les traps, configurez snmptt.ini :

  1. activez l'utilisation du module Perl du paquet NET-SNMP :
net_snmp_perl_enable = 1
  1. journalisez les traps dans le fichier de traps qui sera lu par Zabbix :
log_enable = 1
log_file = [TRAP FILE]
  1. définissez le format de date et d'heure :
date_time_format = %Y-%m-%dT%H:%M:%S%z

Le paquet "net-snmp-perl" a été supprimé dans RHEL 8.0-8.2 ; réintroduit 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) :

  1. Chaque instruction FORMAT doit commencer par "ZBXTRAP [address]", où [address] sera comparée aux adresses IP et DNS des interfaces SNMP dans Zabbix. Par exemple :
EVENT coldStart .1.3.6.1.6.3.1.1.5.1 "Status Events" Normal
FORMAT ZBXTRAP $aA Device reinitialized (coldStart)
  1. Voir plus d'informations sur le format des traps SNMP ci-dessous.

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 des traps SNMP

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

[timestamp] [le trap, partie 1] ZBXTRAP [address] [le trap, partie 2]

  • [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 correspondant à ce trap

Notez que "ZBXTRAP" et "[address]" seront supprimés du message pendant le traitement. Si le trap est formaté différemment, 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 le supprimer seulement ensuite, afin qu'aucun trap ne soit perdu :\

  1. Zabbix ouvre le fichier de traps au dernier emplacement connu et passe à l'étape 3.
  2. Zabbix vérifie si le fichier actuellement ouvert a été pivoté en comparant le numéro d'inode au numéro d'inode du fichier de traps défini. S'il n'y a aucun 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 le processus revient à l'étape 2.
  5. S'il n'y a pas de nouvelles données, Zabbix attend 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 du protocole SNMP

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

Configuration :

  1. Configurez Zabbix pour démarrer le SNMP trapper et définir le fichier de traps. Ajoutez à zabbix_server.conf :
StartSNMPTrapper=1
SNMPTrapperFile=/var/lib/zabbix/snmptraps/snmptraps.log
  1. 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/Dockerfiles/snmptraps/alpine/conf/usr/sbin/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
  1. Ajoutez ce qui suit à snmtrapd.conf (voir 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.

  1. Créez un élément SNMP TEST (gardez à l’esprit les exigences de configuration initiales):\

    Type : SNMP trap
    Type d’information : Log Interface 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é.

  1. Ensuite, nous allons configurer snmptrapd pour la version du protocole SNMP choisie et envoyer des traps de test à l’aide de l’utilitaire snmptrap.
SNMPv1, SNMPv2

Les protocoles SNMPv1 et SNMPv2 reposent sur une authentification par « chaîne de communauté ». Dans l’exemple ci-dessous, nous utiliserons « secret » comme chaîne de communauté. Elle doit être définie à 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 ni chiffrement ni authentification réelle de l’expéditeur. Les données sont envoyées en texte brut 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 pratiquement plus utilisée de nos jours, car elle ne prend pas en charge les compteurs 64 bits et est considérée comme un protocole hérité.

Pour autoriser la réception 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 à l’aide de snmptrap. Nous utiliserons dans cet exemple l’OID commun « link up » :

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

SNMPv3 corrige les problèmes de sécurité de SNMPv1/v2 et fournit authentification et chiffrement. Vous pouvez utiliser MD5 ou plusieurs méthodes d’authentification SHA, ainsi que DES ou plusieurs variantes d’AES comme chiffrement.

Pour autoriser la réception 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 fortes telles que AES192 ou AES256, veuillez utiliser net-snmp à partir de la version 5.8. Il se peut que vous deviez le recompiler avec l’option configure suivante : --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

Voir également