【问题标题】:Logstash udp input not workingLogstash udp 输入不起作用
【发布时间】:2015-07-09 19:52:57
【问题描述】:

我对 logstash 还是很陌生,但我已经花了很长时间试图做到这一点,但没有成功。我正在通过 udp 从不同服务器上的多个应用程序发送我的日志以进行记录。 这是logstash配置:

input{
  udp{
    port => 5960
    type => "log4net"
  }
}
filter {
  grok {
    match => ["message", "(?m)%{TIMESTAMP_ISO8601:sourceTimestamp}\s*%{WORD:System}\s*%{LOGLEVEL:logLevel}\s*-\s*%{WORD:logger}\s*-\s*%{NOTSPACE:source}\s*%{NOTSPACE:action}\s*%{UUID:transactionId}\s*%{GREEDYDATA:message}"]
  }
}
output {
  elasticsearch {
    protocol => "http"
    host => "[mylocalip]"
    port => "9200"
   }
  stdout { codec => rubydebug }
}

很遗憾,没有记录任何消息。我检查并确保在启动 logstash 时端口可用。我还正确配置了防火墙以允许通过此端口发送 udp 消息。当我 tcpdump 时,我可以看到 udp 消息到达。此外,我尝试了另一种输入方法(来自 nginx 的日志),它工作正常。 我究竟做错了什么?
ElasticSearch 版本 1.4
Logstash 版本 - 1.5(最初也尝试使用 1.4)
操作系统 - CentOs 6.5
Java - OpenJDK 运行时环境 (rhel-2.5.5.1.el6_6-x86_64 u79-b14)

【问题讨论】:

  • 您的 logstash.stdout 文件中是否有任何内容? logstash.log 或 logstash.err 中是否有任何错误或警告?
  • 为了更好地调试,我使用命令 bash logstash -f my.config 在 bash 中运行 logstash。配置文件包含上层配置......我只在控制台中得到“Logstash 启动完成” - 没有错误之后我没有收到任何调试输出(我应该这样认为)...... .stdout 文件中没有任何内容或.err.
  • 尝试包含 -l /your-logfile.log 以获取来自 LS 的一些日志,这可能会帮助您找到问题
  • 日志文件(如您提到的指定)已创建但仍为空。就像 udp 消息永远不会到达目标端口,尽管 tcpdump 说 13:33:26.821332 IP [someip].64697 > [localip].5960: UDP, length 180。根据 netstat,一旦我启动 logstash,我就启动了端口udp 0 0 :::5960 :::* 28199/java

标签: logging udp log4net logstash logstash-configuration


【解决方案1】:

您很可能错过了发件人的路线。如果是这种情况,会发生什么:

  1. 您收到发送到您的 logstash IP/端口的数据包。
  2. 您可以在 tcpdump 中看到它,因为它是网络层。
  3. 然后内核尝试到达发送方(即使是 UDP)。
  4. 如果没有路由,它会失败,因此会丢弃 UDP 数据包,而您在应用程序级别看不到它。

【讨论】:

    【解决方案2】:
    1. 检查 logstash 日志以查看它在哪个主机上打开端口。默认值为 0.0.0.0。不会达到的。在 udp 定义中添加“host”参数。
    2. 使用端口检查工具(如 Windows 上的qryport)检查端口是否真正被监听。

    【讨论】:

      猜你喜欢
      • 2014-07-31
      • 1970-01-01
      • 2017-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多