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

mYz*_*Yzk 22 netcat echo graylog

我需要通过 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
Run Code Online (Sandbox Code Playgroud)

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

编辑:

Graylog2 输入是为 GELF TCP 设置的,并显示活动连接,当我尝试回显时它会升高,但没有消息到达服务器。

小智 33

似乎 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
Run Code Online (Sandbox Code Playgroud)

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

  • 将 `-u` 参数添加到 `nc` 以使用 UDP (13认同)

jle*_*our 10

当我试图验证 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
Run Code Online (Sandbox Code Playgroud)

请注意:

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