Отправить эхо-сообщение в graylog2 через порт GELF TCP 12201
Мне нужно отправить сообщение на сервер graylog2 через echo, чтобы проверить, является ли%{@type} для объекта корректным, но как только я сделаю, эхо, которое в поддержке GELF, не поступает на мой сервер 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 и показывает активные соединения, и он поднимается, когда я пытаюсь повторить, но ничего не достигает сервера, как для сообщения идет.
2 ответа
Кажется, что ввод 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.
Когда я пытался проверить, правильно ли экземпляр Logstash прослушивал входные данные GELF, я нашел этот поток.
Вот команда, которая будет работать для Logstash + Gelf через 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