通过 GELF TCP 12201 端口向 graylog2 发送回显消息

通过 GELF TCP 12201 端口向 graylog2 发送回显消息

我需要通过 echo 向 graylog2 服务器发送一条消息,以测试设施的 %{@type} 是否正确,但是我这样做后,GELF 支持中的 echo 不会到达我的 graylog2 服务器。如果它重新启动 graylog2,那么有关它启动的消息就会到达 graylog2 服务器。

回显消息示例:

echo '{"version": "1.1","host":"example.org","short_message":"A short message that helps you identify what is going on","full_message":"Backtrace here\n\nmore stuff","level":1,"_user_id":9001,"_some_info":"foo","_some_env_var":"bar"}' | nc -w 1 my.graylog.server 12201

我做错了什么?graylog --debug 模式没有显示任何内容。它甚至看不到传入的消息。

编辑:

Graylog2 输入是为 GELF TCP 设置的,并显示活动连接,当我尝试回显时它会引发,但就消息而言,没有任何内容到达服务器。

答案1

看来 GELF TCP 输入需要在每个 Gelf 消息末尾添加一个空字符。

因此您应该发送:

echo -e '{"version": "1.1","host":"example.org","short_message":"Short message","full_message":"Backtrace here\n\nmore stuff","level":1,"_user_id":9001,"_some_info":"foo","_some_env_var":"bar"}\0' | nc -w 1 my.graylog.server 12201

这个答案是在关于 Graylog 问题的讨论

答案2

当我尝试验证 Logstash 实例是否正确监听 GELF 输入时,我发现了这个线程。

这是一个适用于 Logstash + Gelf over UDP 的命令:

echo '{"version": "1.1","host":"example.org","short_message":"A short message that helps you identify what is going on","full_message":"Backtrace here\n\nmore stuff","level":1,"_user_id":9001,"_some_info":"foo","_some_env_var":"bar"}' | gzip | nc -u -w 1 127.0.0.1 12201

请注意:

  • 简单echo就够了,不需要-e
  • 消息已压缩,否则您将收到此错误:Could not find parser for header: [123, 34]在 Logstash 日志中
  • netcat 通过 UDP 发送

相关内容