【问题标题】:Unable to get snmptrap working with logstash无法让 snmptrap 与 logstash 一起使用
【发布时间】:2016-05-05 17:20:42
【问题描述】:

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

【问题讨论】:

  • 仅供参考。 SNMP 陷阱的默认端口是 162/UDP。它不会在您的远程机器上监听。您可能希望将配置中的主机绑定到其实际物理地址,而不是环回。
  • 我用过名字、本地IP地址和回环都没有成功。我想我要在同一个网络上配置一个简单的远程 snmp 服务器。尝试读取本地 snmp 服务器可能会导致问题。

标签: logstash snmp


【解决方案1】:

.conf 文件中的“host”参数代表运行 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"
  }
}`

【讨论】:

  • 我认为问题在于这是一个 snmptrap 输入插件(如文档所示)。我假设捕获的唯一消息是从不存在的 snmp 服务器发送的陷阱。所以它一直在工作☺我正在寻找的是一种使用logstash定期查询snmp并将其发送到石墨输出插件的方法。
【解决方案2】:

我正在使用 SNMPTRAP 输入,但希望它能够像常规 SNMP get 一样工作。它实际上正在工作,但没有发送任何陷阱。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-31
    • 2018-01-02
    • 2016-11-14
    • 2015-02-01
    • 2019-05-10
    • 2017-11-20
    • 2011-05-24
    • 2019-05-17
    相关资源
    最近更新 更多