无法让snmptrap使用logstash

时间:2016-05-05 17:20:43

标签: logstash snmp

我试图让snmptrap输入与logstash一起使用。我最初以root身份启动logstash,因为我想在更改端口之前确保它可以正常工作。我也在使用本地计算机进行SNMP,因为我认为这个世界更容易启动。当我使用端口161时,我收到“SNMP Trap listener death”错误。如果我改为端口162,我没有错误,但没有数据。如果我指向不存在的服务器,我也会在任何端口上获得SNMP Trap侦听器死亡错误。我相信它应该是161端口,但我可能错了。

如果我使用不同的输入,Logstash会起作用。我最终希望输出转到石墨,这也适用于不同的输入。

我是否有错误的配置?是否存在一些可能导致问题的权限,即使我以root身份运行并且所有内容都在同一台计算机上?

感谢您的帮助。

这是我的.conf文件:

input {
snmptrap {
 host => "127.0.0.1"
 community => "public"
 port => "161"
 type => "snmp_trap"
  }
}
output {
 stdout { codec => rubydebug }
}

这是本地snmpwalk的部分结果:

snmpwalk -mAll -v1 -cpublic 127.0.0.1:161
iso.3.6.1.2.1.1.2.0 = OID: iso.3.6.1.4.1.8072.3.2.10
iso.3.6.1.2.1.1.3.0 = Timeticks: (7218152) 20:03:01.52

这是netstat:

root@lab-graphite:~# netstat -lpn | grep snmp
udp   0   0  127.0.0.1:161     0.0.0.0:*       43559/snmpd
udp   0   0  0.0.0.0:54155     0.0.0.0:*       43559/snmpd
unix  2      [ ACC ]     STREAM     LISTENING     2593117  43559/snmpd         /var/agentx/master

这是完整的错误消息:

SNMP Trap listener died {:exception=>#<SocketError: bind: name or service not known>, :backtrace=>["org/jruby/ext/socket/RubyUDPSocket.java:160:in `bind'", "/opt/logstash/vendor/bundle/jruby/1.9/gems/snmp-1.2.0/lib/snmp/manager.rb:540:in `initialize'", "/opt/logstash/vendor/bundle/jruby/1.9/gems/snmp-1.2.0/lib/snmp/manager.rb:585:in `create_transport'", "/opt/logstash/vendor/bundle/jruby/1.9/gems/snmp-1.2.0/lib/snmp/manager.rb:618:in `initialize'", "/opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-input-snmptrap-2.0.4/lib/logstash/inputs/snmptrap.rb:74:in `build_trap_listener'", "/opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-input-snmptrap-2.0.4/lib/logstash/inputs/snmptrap.rb:78:in `snmptrap_listener'", "/opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-input-snmptrap-2.0.4/lib/logstash/inputs/snmptrap.rb:53:in `run'", "/opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-core-2.3.2-java/lib/logstash/pipeline.rb:342:in `inputworker'", "/opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-core-2.3.2-java/lib/logstash/pipeline.rb:336:in `start_input'"], :level=>:warn}

2 个答案:

答案 0 :(得分:0)

在.conf文件&#34; host&#34;参数代表运行logstash的计算机的IP地址或主机名。如果您要从外部世界来源接收snmp陷阱,则它不应该是localhost(127.0.0.1)。可以进行本地设置测试。

正如评论中已经提到的,默认的snmptrap端口是162(并且没有理由在您的设置中更改它)。 此外,由于netstat显示snmpd正在运行并且它侦听udp端口161,因此您的logstash不允许绑定到同一端口161。

`snmpwalk` is not the right way to test your setup (it actually polls snmpd daemon on port 161) - it is `snmptrap` command that will send trap to your logstash input. For example,

`snmptrap -v1 -c public 127.0.0.1 .1.3 i 0 123456780 127.0.0.1 0 .1.3.6 i 12345`

您也可以以root身份运行tcpdump port 162以检查snmptrap是否正在向127.0.0.1:162发送目标数据包。

(此处127.0.0.1是下面logstash .conf中使用的主机地址)。

因此,对于本地测试使用

`snmptrap {
 host => "127.0.0.1"
 community => "public"
 port => "162"
 type => "snmp_trap"
  }
}`

答案 1 :(得分:0)

我使用的是SNMPTRAP输入,但期望它像普通的SNMP get一样工作。它实际上正在运行,但没有发送陷阱。