web-dev-qa-db-ja.com

エコーメッセージをGELF経由でgraylog2に送信するTCP 12201ポート

エコーを介して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=のセットアップであり、アクティブな接続を示し、エコーしようとすると発生しますが、メッセージが送信されるのでサーバーに到達しません。

20
mYzk

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の問題に関するディスカッション で見つかりました。

29
user236376

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は必要ありません
  • メッセージはgzip形式で圧縮されていない場合、このエラーが発生します:LogstashログにCould not find parser for header: [123, 34]
  • netcatはUDP経由で送信しています
7
jlecour