エコーを介してgraylog2サーバーにメッセージを送信して、施設の%{@ type}が正しいかどうかをテストする必要がありますが、一度実行すると、GELFサポートのecho thatsが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=のセットアップであり、アクティブな接続を示し、エコーしようとすると発生しますが、メッセージが送信されるのでサーバーに到達しません。
GELF TCP inputは、各Gelfメッセージの最後にnull文字を必要とするようです。
だからあなたは送るべきです:
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の問題に関するディスカッション で見つかりました。
LogstashインスタンスがGELF入力を正しくリッスンしていることを確認しようとしたときに、このスレッドが見つかりました。
UDP経由のLogstash + Gelfで機能するコマンドは次のとおりです。
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]