Перейти к основному содержимому
Версия: 8.0

Отправка SNMP Trap в Monq через Logstash

Чтобы направить SNMP Trap в Monq понадобится сторонний инструмент - Logstash, а именно плагин snmptrap

Настройка и запуск Logstash на прием трапов

В каталоге ./pipeline/ создадим конфигурационный файл snmptrap.conf следующего содержания:

input {
snmptrap {
community => "public"
host => "0.0.0.0"
port => 162
type => "snmptrap"
}
}
filter {

}

output {
http {
url => "https://monq.domain.ru/api/public/cl/v1/stream-data?streamKey=<monq-stream-api-key>"
http_method => "post"
}
}

В данном файле необходимо указать основные параметры для приема трапов в секции input:

  • community => SNMP community для прослушивания
  • host => На каком адресе слушать трапы (для Docker 0.0.0.0)
  • port => На каком порту слушать трапы
  • type => Тип трапов для настройки дополнительной фильтрации средствами Logstash

Для перенаправления трапов, в Monq необходимо создать в Поток данных, и в секции output конфигурационного файла Logstash указать:

  • url => точка приема логов Monq API
  • http_method => POST

Фильтрацию производить не будем, поэтому секцию filter оставляем как есть, пустой.

Запуск Logstash

Запускать logstash будем в Docker следующей командой:

docker run --rm --network=host -it \
-v ./pipeline/:/usr/share/logstash/pipeline/ \
-e XPACK_MONITORING_ENABLED=false \
logstash:8.8.1

Подключение MIB файлов

Подключить дополнительные MIB файлы можно, добавив в конфигурационный файл snmptrap.conf параметр yamlmibdir в котором указать путь к директории с MIB файлами:

input {
snmptrap {
...
yamlmibdir => /custom-mibs
...
}
}

При запуске в Docker необходимо примонтировать ваше хранилище MIB в указанную в данном параметре директорию

Проверка

В результате успешной настройки и запуска Logstash, на экране первичных событий Monq вы можете увидеть отправляемые устройствами трапы:

Пример полученного трапа в формате JSON:

{
"source": {
"type": "snmptrap",
"@version": "1",
"message": "#<SNMP::SNMPv2_Trap:0x7bdbefcf @request_id=27053627, @error_index=0, @error_status=0, @source_ip=\"192.168.7.1\", @varbind_list=[#<SNMP::VarBind:0x28c94825 @name=[1.3.6.1.2.1.1.3.0], @value=#<SNMP::TimeTicks:0x6e05aecb @value=156853>>, #<SNMP::VarBind:0x4a048153 @name=[1.3.6.1.6.3.1.1.4.1.0], @value=[1.3.6.1.6.3.1.1.5.4]>, #<SNMP::VarBind:0x28bd030f @name=[1.3.6.1.2.1.2.2.1.1.30], @value=#<SNMP::Integer:0x4a57ee5d @value=30>>, #<SNMP::VarBind:0x9e7622a @name=[1.3.6.1.2.1.2.2.1.7.30], @value=#<SNMP::Integer:0x6787645c @value=1>>, #<SNMP::VarBind:0x27e2a6d8 @name=[1.3.6.1.2.1.2.2.1.8.30], @value=#<SNMP::Integer:0x5232817f @value=1>>]>",
"IF-MIB::ifIndex.30": "30",
"IF-MIB::ifAdminStatus.30": "1",
"host": {
"ip": "192.168.7.1"
},
"SNMPv2-MIB::sysUpTime.0": "00:26:08.53",
"IF-MIB::ifOperStatus.30": "1",
"SNMPv2-MIB::snmpTrapOID.0": "IF-MIB::linkUp"
},
"@timestamp": "2023-07-12T17:30:04.844+03:00",
"_aggregatedAt": "2023-07-12T17:30:04.951+03:00",
"_id": "91c79cb4-745d-41dd-897a-7cfaf097717f",
"_rawId": "6dcb6610-2b91-48f2-8296-ecc943a5e1a6",
"_stream": {
"id": 97,
"name": "SnmpTraps"
},
"_userspaceId": 1
}