[comment]: # translation:outdated

[comment]: # ({622befb9-622befb9})
# 3 Capturador SNMP

[comment]: # ({/622befb9-622befb9})

[comment]: # ({db014e3a-ff07904b})
#### Descripción general

Recibir capturas SNMP es lo opuesto a consultar dispositivos habilitados para SNMP.

En este caso, la información se envía desde un dispositivo habilitado para SNMP y es
recogida o "capturada" por Zabbix.

Por lo general, las capturas se envían ante algún cambio de condición y el agente
se conecta al servidor en el puerto 162 (a diferencia del puerto 161 en el 
lado del agente que se utiliza para consultas). El uso de capturas puede detectar algunos 
problemas cortos que ocurren durante el intervalo de consulta y pueden ser pasados por alto por los
datos de consulta.

La recepción de capturas SNMP en Zabbix está diseñada para funcionar con **snmptrapd**
y uno de los mecanismos para pasar las capturas a Zabbix -
ya sea un script Bash o Perl o SNMPTT.

::: noteclassic
La forma más sencilla de configurar el monitoreo de capturas después de configurar Zabbix
es utilizar la solución de script Bash, porque Perl y SNMPTT suelen
faltar en las distribuciones modernas y requieren una configuración más compleja.
Sin embargo, esta solución utiliza un script configurado como "traphandle".
Para un mejor rendimiento en sistemas de producción, utilice la solución Perl integrada
(ya sea script con la opción `do perl` o SNMPTT).
:::

El flujo de trabajo de recibir una trampa:

1. `snmptrapd` recibe una captura
2. `snmptrapd` pasa la captura al script del receptor (Bash, Perl)
    o SNMPTT
3. El receptor analiza, formatea y escribe la captura en
    un archivo
4. El capturador SNMP de Zabbix lee y analiza el archivo de captura
5. Para cada captura, Zabbix encuentra todas las métricas del "capturador SNMP" con los
    interfaces del equipo que coinciden con la dirección de captura recibida. Tenga en cuenta que sólo
    la "IP" o "DNS" seleccionada en la interfaz del equipo se utiliza durante la
    pareo.
6. Para cada métrica encontrada, la captura se compara con la expresión regular en
    `snmptrap[expresación regular]`. La captura se establece como el valor de **todas**
    las métricas coincidentes. Si no se encuentra ningúna métrica coincidente y hay una
    métrica `snmptrap.fallback`, la captura se establece como el valor de ese.
7. Si la captura no se estableció como el valor de ningúna métrica, Zabbix de forma predeterminada
    registra la captura inigualable. (Esto se configura mediante "Registrar capturas SNMP no coincidentes" en Administración → General → Otros.)

[comment]: # ({/db014e3a-ff07904b})

[comment]: # ({0d65d07c-a8df124c})
#### Configuración de capturas SNMP

Configurar los siguientes campos en el frontend es específico para este
tipo de métricas:

- Su equipo debe tener una interfaz SNMP

En *Configuración → Equipos*, en el campo **Interfaz del equipo** establezca un interfaz SNMP
con la dirección IP o DNS correcta. La dirección de cada
captura recibida se compara con las direcciones IP y DNS de todos los 
interfaces SNMP para encontrar los equipos correspondientes.

- Configurar la métrica

En el campo **Clave** utilice una de las claves de captura SNMP:

|Clave|<|<|
|--|--|------|
|Descripción|Valor de retorno|Comentarios|
|**snmptrap**\[regexp\]|<|<|
|Captura todas las capturas SNMP que coinciden con la [expresión regular](/manual/regular_expressions) especificada en **regexp**. Si no se especifica la expresión regular, detecta cualquier trampa.|Trampa SNMP|Este elemento solo se puede configurar para interfaces SNMP.<br>Las macros de usuario y las expresiones regulares globales se admiten en el parámetro de esta clave de elemento.|
|**snmptrap.fallback**|<|<|
|Captura todas las capturas SNMP que no fueron capturadas por ninguno de los elementos snmptrap\[\] para esa interfaz.|Trampa SNMP|Este elemento solo se puede configurar para interfaces SNMP.|

::: noteclassic
En este momento no se admite la coincidencia de expresiones regulares multilínea.
:::

Establezca el **Tipo de información** en 'Registro' para que se analicen las marcas de tiempo.
Tenga en cuenta que también se aceptan otros formatos como "Numérico"
pero puede requerir un controlador de capturas personalizado.

::: notetip
Para que funcione la supervisión de capturas SNMP, primero se debe configurar
correctamente (ver más abajo).
:::

[comment]: # ({/0d65d07c-a8df124c})

[comment]: # ({56d22f70-a08bce2a})
#### - Configuración de la supervisión de trampas SNMP

[comment]: # ({/56d22f70-a08bce2a})

[comment]: # ({294acfc1-581aa946})
##### Configuración del servidor/proxy Zabbix

Para leer las capturas, el servidor Zabbix o el proxy deben estar configurados para iniciar
el proceso de captura SNMP y apuntar al archivo de captura que será
escrito por SNMPTT o un receptor de captura Bash/Perl. Para hacer eso, edite el
archivo de configuración
([zabbix\_server.conf](/manual/appendix/config/zabbix_server) o
[zabbix\_proxy.conf](/manual/appendix/config/zabbix_proxy)):

```ini
IniciarSNMPTrapper=1
SNMPTrapperFile=[ARCHIVO DE CAPTURA]
```

::: notewarning
Si el parámetro systemd
**[PrivateTmp](http://www.freedesktop.org/software/systemd/man/systemd.exec.html#PrivateTmp=)**
se utiliza, es poco probable que este archivo funcione en */tmp*.
:::

##### Configuración del receptor de capturas Bash

Requisitos: sólo snmptrapd.

Un receptor de capturas Bash [script] (https://raw.githubusercontent.com/zabbix/zabbix-docker/6.0/Dockerfiles/snmptraps/alpine/conf/usr/sbin/zabbix_trap_handler.sh)
se puede utilizar para pasar capturas al servidor Zabbix directamente desde snmptrapd. Para
configurarlo, agregue la opción `traphandle` al archivo de configuración snmptrapd (`snmptrapd.conf`),
consulte el [ejemplo] (https://raw.githubusercontent.com/zabbix/zabbix-docker/6.0/Dockerfiles/snmptraps/alpine/conf/etc/snmp/snmptrapd.conf).

[comment]: # ({/294acfc1-581aa946})

[comment]: # ({0f22aff6-0aa82990})
##### Configuración del receptor de capturas de Perl

Requisitos: Perl, Net-SNMP compilado con --enable-embedded-perl (hecho
por defecto desde Net-SNMP 5.4)

Un receptor de capturas Perl (busque misc/snmptrap/zabbix\_trap\_receiver.pl)
se puede utilizar para pasar capturas al servidor Zabbix directamente desde snmptrapd. Para
configurarlo:

- agregue el script Perl al archivo de configuración snmptrapd
    (snmptrapd.conf), por ejemplo:

```perl
perl do "[FULL PATH TO PERL RECEIVER SCRIPT]";
```

- configurar el receptor, por ejemplo:

```ini
$SNMPTrapperFile = '[TRAP FILE]';
$DateTimeFormat = '[DATE TIME FORMAT]';
```

::: notetip
Si el nombre del script no se cita, snmptrapd se negará a
comenzar con mensajes similares a estos:<br><br>

```yaml
Los modificadores de expresiones regulares "/l" y "/a" son mutuamente excluyentes en (eval 2) línea 1, al final de la línea
El modificador Regexp "/l" no puede aparecer dos veces en (eval 2) línea 1, al final de la línea
```

:::

[comment]: # ({/0f22aff6-0aa82990})

[comment]: # ({30bbd05c-af1e38f9})
##### Configuración de SNMPTT

Al principio, snmptrapd debe configurarse para utilizar SNMPTT.

::: notetip
Para obtener el mejor rendimiento, SNMPTT debe configurarse como
un demonio que usa **snmptthandler-embedded** para pasarle las capturas. Ver las
instrucciones para [configurar SNMPTT] (http://snmptt.sourceforge.net/docs/snmptt.shtml).
:::

Cuando SNMPTT esté configurado para recibir las capturas, configure `snmptt.ini`:

1. habilite el uso del módulo Perl del paquete NET-SNMP:

```ini
net_snmp_perl_enable = 1
```

2. registre las capturas en el archivo de capturas que Zabbix leerá:

```ini
log_enable = 1
log_file = [ARCHIVO DE CAPTURAS]
```
    
3. establezca el formato de fecha y hora:

```ini
date_time_format = %H:%M:%S %Y/%m/%d
```

::: notewarning
El paquete "net-snmp-perl" se eliminó en RHEL 8.0-8.2;
Se volvió a agregar en RHEL 8.3. Para obtener más información, consulte los [problemas
conocidos](/manual/installation/known_issues#snmp_traps).
:::

Ahora formatee las capturas para que Zabbix las reconozca (edite snmptt.conf):

1. Cada instrucción FORMAT debe comenzar con "ZBXTRAP \[dirección\]", donde
    \[dirección\] se comparará con las direcciones IP y DNS de los interfaces SNMP
    en Zabbix. P.ej.:

```ini
EVENT coldStart .1.3.6.1.6.3.1.1.5.1 "Status Events" Normal
FORMAT ZBXTRAP $aA Device reinitialized (coldStart)
```

2. Vea más sobre el formato de captura SNMP a continuación.

::: noteimportant
No utilices capturas desconocidas: Zabbix no podrá reconocerlas.
Las capturas desconocidas se pueden manejar definiendo un evento general en snmptt.conf:<br><br>

```ini
EVENT general .* "General event" Normal
```

:::

[comment]: # ({/30bbd05c-af1e38f9})

[comment]: # ({ca0d29ba-cd001892})
##### Formato de captura SNMP

Todos los receptores de capturas Perl personalizados y la configuración de capturas SNMPTT deben
formatear la captura de la siguiente manera:

```yaml
[timestamp] [the trap, part 1] ZBXTRAP [address] [the trap, part 2]
```

dónde

-   \[timestamp\] - la marca de tiempo utilizada para los elementos del registro
-   ZBXTRAP - encabezado que indica que una nueva captura comienza en esta línea
-   \[dirección\] - Dirección IP utilizada para encontrar el equipo para esta captura

Tenga en cuenta que "ZBXTRAP" y "\[dirección\]" se eliminarán del mensaje.
durante el procesamiento. Si la captura tiene otro formato, Zabbix podría
analizar las capturas de forma no esperada.

Captura de ejemplo:

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

Esto dará como resultado la siguiente captura para la interfaz SNMP con
IP=192.168.1.1:

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

[comment]: # ({/ca0d29ba-cd001892})

[comment]: # ({536ec22b-357f1824})
#### Requisitos del sistema

[comment]: # ({/536ec22b-357f1824})

[comment]: # ({3866234a-6245c6ae})
##### Compatibilidad con archivos grandes

Zabbix tiene "soporte de archivos grandes" para los archivos de captura SNMP. El tamaño máximo
del archivo que Zabbix puede leer es 2\^63 (8 EiB). Tenga en cuenta que el sistema de archivos puede
imponer un límite inferior en el tamaño del archivo.

[comment]: # ({/3866234a-6245c6ae})

[comment]: # ({0f27a9bb-0f27a9bb})
##### Rotación de registros

Zabbix no proporciona ningún sistema de rotación de registros; eso debe manejarse
por el usuario La rotación de registros primero debe cambiar el nombre del archivo antiguo y solo
luego elimínelo para que no se pierdan trampas:\

1. Zabbix abre el archivo de captura en la última ubicación conocida y va a
    paso 3
2. Zabbix verifica si el archivo actualmente abierto ha sido rotado por
    comparando el número de inodo con el número de inodo del archivo trap definido.
    Si no hay ningún archivo abierto, Zabbix restablece la última ubicación y va
    al paso 1.
3. Zabbix lee los datos del archivo abierto actualmente y establece el
    nueva ubicacion.
4. Los nuevos datos se analizan. Si este fue el archivo girado, el archivo es
    cierra y vuelve al paso 2.
5. Si no hubo datos nuevos, Zabbix duerme durante 1 segundo y vuelve
    al paso 2.

[comment]: # ({/0f27a9bb-0f27a9bb})

[comment]: # ({608a14bd-608a14bd})
##### Sistema de archivos

Debido a la implementación del archivo trampa, Zabbix necesita que el sistema de archivos
soportar inodos para diferenciar archivos (la información es adquirida por un
llamada stat()).

[comment]: # ({/608a14bd-608a14bd})

[comment]: # ({870fa546-ee69482d})
#### Ejemplos de configuración utilizando diferentes versiones del protocolo SNMP

Este ejemplo utiliza snmptrapd y un script receptor Bash para pasar capturas al servidor Zabbix.

Configuración:

1. Configure Zabbix para iniciar SNMP Trapper y
    configure el archivo de captura. Agregar a `zabbix_server.conf`:

```ini
StartSNMPTrapper=1
SNMPTrapperFile=/tmp/my_zabbix_traps.tmp
```

2. Descargue el script Bash en `/usr/sbin/zabbix_trap_handler.sh`:

```bash
curl -o /usr/sbin/zabbix_trap_handler.sh https://raw.githubusercontent.com/zabbix/zabbix-docker/6.0/Dockerfiles/snmptraps/alpine/conf/usr/sbin/zabbix_trap_handler.sh
```

Si es necesario, ajuste la variable ZABBIX_TRAPS_FILE en el script. Para utilizar el valor predeterminado,
cree el directorio principal primero:

```bash
mkdir -p /var/lib/zabbix/snmptraps
```

3. Agregue lo siguiente a `snmtrapd.conf` (consulte el [ejemplo](https://raw.githubusercontent.com/zabbix/zabbix-docker/6.0/Dockerfiles/snmptraps/alpine/conf/etc/snmp/snmptrapd .conf) operativo)

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

4. Cree una métrica SNMP TEST:\

    IP de la interfaz SNMP del host: 127.0.0.1\
    Clave: `snmptrap["linkup"]`\
    Formato de hora de registro: yyyyMMdd.hhmmss

5. A continuación configuraremos `snmptrapd` para la versión del protocolo SNMP elegida y
    envíe capturas de prueba utilizando la utilidad `snmptrap`.

##### SNMPv1, SNMPv2

Los protocolos SNMPv1 y SNMPv2 se basan en la autenticación de "cadena comunitaria". En el siguiente ejemplo
usaremos "secret" como cadena de comunidad. Debe establecerse en el mismo valor en los remitentes de capturas SNMP.

Tenga en cuenta que, si bien todavía se utiliza ampliamente en entornos de producción, SNMPv2 no ofrece
cualquier cifrado ni autenticación de remitente real. Los datos se envían como texto plano y por lo tanto
estas versiones de protocolo solo deben usarse en entornos seguros, como redes privadas
y nunca debe utilizarse en ninguna red pública o de terceros.

La versión 1 de SNMP no se utiliza actualmente porque no admite contadores de 64 bits y
se considera un protocolo heredado.

Para habilitar la aceptación de capturas SNMPv1 o SNMPv2, debe agregar la siguiente línea a `snmptrapd.conf`.
Reemplace "secret" con la cadena de comunidad SNMP configurada en los remitentes de capturas SNMP:

```ini
authCommunity log,execute,net secret
```

A continuación podemos enviar una captura de prueba usando `snmptrap`. Usaremos el OID de "enlace" común en este ejemplo:

```bash
snmptrap -v 2c -c secret localhost 0 linkUp.0
```

##### SNMPv3

SNMPv3 aborda los problemas de seguridad de SNMPv1/v2 y proporciona autenticación y cifrado.
Puede utilizar MD5 o varios métodos de autenticación SHA y DES/ AES como cifrado.

Para habilitar la aceptación de SNMPv3, agregue las siguientes líneas a `snmptrapd.conf`:

```ini
createUser -e 0x8000000001020304 traptest SHA mypassword AES
authuser log,execute traptest
```

:::noteimportant
Tenga en cuenta la palabra clave "execute" que permite ejecutar scripts para este modelo de seguridad de usuario.
:::

```bash
snmptrap -v 3 -n "" -a SHA -A micontraseña -x AES -X micontraseña -l authPriv -u traptest -e 0x8000000001020304 localhost 0 linkUp.0
```

::: notewarning
Si desea utilizar métodos de cifrado seguros como AES192 o AES256, utilice
net-snmp a partir de la versión 5.8. Quizás tenga que recompilarlo con la opción de `configuración`
: `--enable-blumenthal-aes`.
Las versiones anteriores de net-snmp no son compatibles con AES192/AES256.
Véase también: http://www.net-snmp.org/wiki/index.php/Strong_Authentication_or_Encryption
:::

##### Verificación

En ambos ejemplos verá líneas similares en su `/var/lib/zabbix/snmptraps/snmptraps.log`:

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

El valor de la métrica en Zabbix será:

```bash
2022-08-05 10:22:35 2022-08-05 10:22:33

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

[comment]: # ({/870fa546-ee69482d})

[comment]: # ({91956d23-75026475})
#### Ver también

- [Artículo del blog de Zabbix sobre capturas SNMP](https://blog.zabbix.com/snmp-traps-in-zabbix)
- [Configuración de snmptrapd (documentación oficial de net-snmp)](https://net-snmp.sourceforge.io/wiki/index.php/TUT:Configuring_snmptrapd)
- [Configuración de snmptrapd para recibir notificaciones SNMPv3 (documentación oficial de net-snmp)](https://net-snmp.sourceforge.io/wiki/index.php/TUT:Configuring_snmptrapd_to_receive_SNMPv3_notifications)

[comment]: # ({/91956d23-75026475})
