我需要通过 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 发送