我试图让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}
答案 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一样工作。它实际上正在运行,但没有发送陷阱。