Отправка 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 APIhttp_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
}