关于Logstash和snmp-trap事件

来源:互联网 发布:进存销软件哪些免费 编辑:程序博客网 时间:2024/06/03 23:49

目前SNMP 主要版本有 v1、v2、v3三个版本,根据SNMP 版本的不同,报文格式会有不同。但是总体上主要是 HEAD + PDU。其中PDU主要携带数据,若干 OID(NAME/VALUE 值对)。

1. Logstash 的input插件 snmptrap ( logstash-input-snmptrap ),主要功能:
(1) 接收 SNMP v1 和 v2c 版本的 TRAP ,v3版本不支持
(2) TRAP数据的解析
(A) 提取 HEAD 和 PDU 中的数据,形成“字段/值”列表
(B) 尝试通过 mibs 库,翻译“字段/值”列表中的 OID 到 OID NAME
2. 对于 input解析后的TRAP数据,需要根据后续处理的目的,通过 filter ,进行近一步 enrich 和过滤处理,为后续的数据使用进行数据结构化和规范。
3. 对于 filter 阶段 enrich 后的最终结构化数据,可以通过 output ,将数据输出到其它目的环节。

因此,对于snmp trap 这种数据,通过 logstash-input-snmptrap 插件,仅仅是解析并简单提取的相关数据,后续可处理环节:
1. Logstash: logstash 的filter
2. Elasticsearch: elasticsearch api (JSON DSL)
3. 实时流数据处理框架(Storm, Spark 等)
至于放在以上哪个环节进行数据处理,以及数据需要加工成什么样子,需要根据实际应用的需要进行设计。如果是在 filter 中进行处理,可以根据复杂度进行现有filter插件应用或自有filter插件的开发。

对于厂商的mib,需要先转换成 yaml 格式,然后导入 logstash 中,相关信息:
1. OS需要安装smi 库:apt-get install smitools 或 yum install libsmi
2. Logstash 的 默认mibs 库路径:path/to/logstash/vendor/bundle/jruby/x.x.x/gems/snmp-1.2.0
3. 可以使用 ruby-snmp 项目的 import.rb 进行转换导入工作(https://github.com/hallidave/ruby-snmp/blob/master/import.rb)

这里写图片描述

这里写图片描述

这里写图片描述

这是几条模拟的snmp-trap日志:

<?xml version="1.0" encoding="UTF-8"?><traps>    <!-- ibm trap test v1(ibmSpTrapHdC) -->    <!-- altDateTime, altSpTxtId, altSysUuid, altSysSern, altMsgID, altMsgIDPrefix, altPriority, altMsgText, altHostContact, altHostLocation -->    <trap id="1" enabled="true" version="v1" enterprise=".1.3.6.1.4.1.2" agent-address="192.168.200.1" community="public">        <var oid=".1.3.6.1.4.1.2.6.158.5.1.1">02:39:33 10/27/2017</var>        <var oid=".1.3.6.1.4.1.2.6.158.5.1.3">SN#99M4876</var>        <var oid=".1.3.6.1.4.1.2.6.158.5.1.5">76F49C9AFE3A11E191298C8C8CBBBBBB</var>        <var oid=".1.3.6.1.4.1.2.6.158.5.1.6">99M4876</var>         <var oid=".1.3.6.1.4.1.2.6.158.5.1.10">178</var>        <var oid=".1.3.6.1.4.1.2.6.158.5.1.11">PLAT</var>        <var oid=".1.3.6.1.4.1.2.6.158.5.1.8">4</var>        <var oid=".1.3.6.1.4.1.2.6.158.5.1.9">Rebuild in progress for Array in system SN# 99M4876</var>                <var oid=".1.3.6.1.4.1.2.6.158.5.1.12">IBM_3.128</var>        <var oid=".1.3.6.1.4.1.2.6.158.5.1.13">192.168.3.128</var>           </trap>    <!-- ibm trap test v2c(ibmSpTrapHdC) -->    <!-- altDateTime, altSpTxtId, altSysUuid, altSysSern, altMsgID, altMsgIDPrefix, altPriority, altMsgText, altHostContact, altHostLocation -->    <trap id="2" enabled="true" version="v2c" trap-oid=".1.3.6.1.4.1.2.6.158.5.1.0" agent-address="192.168.200.1" community="public">        <var oid=".1.3.6.1.4.1.2.6.158.5.1.1">02:39:33 10/27/2017</var>        <var oid=".1.3.6.1.4.1.2.6.158.5.1.3">SN#99M4876</var>        <var oid=".1.3.6.1.4.1.2.6.158.5.1.5">76F49C9AFE3A11E191298C8C8CBBBBBB</var>        <var oid=".1.3.6.1.4.1.2.6.158.5.1.6">99M4876</var>         <var oid=".1.3.6.1.4.1.2.6.158.5.1.10">178</var>        <var oid=".1.3.6.1.4.1.2.6.158.5.1.11">PLAT</var>                <var oid=".1.3.6.1.4.1.2.6.158.5.1.8">4</var>        <var oid=".1.3.6.1.4.1.2.6.158.5.1.9">Rebuild in progress for Array in system SN# 99M4876</var>        <var oid=".1.3.6.1.4.1.2.6.158.5.1.12">IBM_3.128</var>        <var oid=".1.3.6.1.4.1.2.6.158.5.1.13">192.168.3.128</var>           </trap>    <!-- ibm trap test v3(ibmSpTrapHdC) -->    <!-- altDateTime, altSpTxtId, altSysUuid, altSysSern, altMsgID, altMsgIDPrefix, altPriority, altMsgText, altHostContact, altHostLocation -->    <trap id="3" enabled="true" version="v3" trap-oid=".1.3.6.1.4.1.2.6.158.5.1.0" agent-address="192.168.200.1"           level="authPriv" security-name="user" auth-protocol="MD5" auth-passphrase="password1" privacy-protocol="DES" privacy-passphrase="password2" >        <var oid=".1.3.6.1.4.1.2.6.158.5.1.1">02:39:33 10/27/2017</var>        <var oid=".1.3.6.1.4.1.2.6.158.5.1.3">SN#99M4876</var>        <var oid=".1.3.6.1.4.1.2.6.158.5.1.5">76F49C9AFE3A11E191298C8C8CBBBBBB</var>        <var oid=".1.3.6.1.4.1.2.6.158.5.1.6">99M4876</var>         <var oid=".1.3.6.1.4.1.2.6.158.5.1.10">178</var>        <var oid=".1.3.6.1.4.1.2.6.158.5.1.11">PLAT</var>                <var oid=".1.3.6.1.4.1.2.6.158.5.1.8">4</var>        <var oid=".1.3.6.1.4.1.2.6.158.5.1.9">Rebuild in progress for Array in system SN# 99M4876</var>        <var oid=".1.3.6.1.4.1.2.6.158.5.1.12">IBM_3.128</var>        <var oid=".1.3.6.1.4.1.2.6.158.5.1.13">192.168.3.128</var>           </trap>        <!-- huawei trap test v1(hwOEMEvent) -->    <!-- hwTrapSeq, hwTrapEvent, hwTrapSeverity, hwTrapServerIdentity, hwTrapLocation, hwTrapTime  -->    <trap id="4" enabled="true" version="v2c" trap-oid=".1.3.6.1.4.1.2011.2.235.1.1.500.10.1.1" agent-address="192.168.200.1" community="public">        <var oid=".1.3.6.1.4.1.2011.2.235.1.1.500.1.1">1</var>        <var oid=".1.3.6.1.4.1.2011.2.235.1.1.500.1.3">This is a huawei trap test(hwOEMEvent).</var>        <var oid=".1.3.6.1.4.1.2011.2.235.1.1.500.1.4">1</var>        <var oid=".1.3.6.1.4.1.2011.2.235.1.1.500.1.8">ModelA</var>         <var oid=".1.3.6.1.4.1.2011.2.235.1.1.500.1.9">192.168.200.1</var>        <var oid=".1.3.6.1.4.1.2011.2.235.1.1.500.1.10">02:39:33 10/27/2017</var>                  </trap>     <trap id="1" enabled="true" version="v2c" trap-oid=".1.3.6.1.2.1.25" agent-address="10.153.200.1" community="public">        <var oid=".1.3.6.1.2.1.25.3">This is a huawei trap test(hwOEMEvent).</var>        <var oid=".1.3.6.1.2.1.25.9">192.168.200.1</var>        <var oid=".1.3.6.1.2.1.25.1.2">02:39:33 10/27/2017</var>                  </trap>     <trap id="2" enabled="true" version="v2c" trap-oid=".1.3.6.1.2.1.25.3.8.1" agent-address="10.153.200.2" community="public">        <var oid=".1.3.6.1.2.1.25.3.8.1.3">This is a huawei trap test(hwOEMEvent).</var>        <var oid=".1.3.6.1.2.1.25.9">192.168.200.1</var>        <var oid=".1.3.6.1.2.1.25.1.2">02:39:33 10/27/2017</var>                  </trap> </traps>

SNMPv1 中没有 trap-oid
SNMPv2中定义了两个固定OID,一个是 sysUpTime, 一个是 snmpTrapOID。其中 snmpTrapOID 的内容是以给实际的TRAP OID标识,对应mib中的唯一个trap定义。


Snmptrap的模拟发送:
1. 可以使用net-snmp工具,windows下的版本安装使用, Linux下的安装使用。
2. 你也可以使用snmp4j去模拟发送。

原创粉丝点击