Отправка json через rsyslog в elasticsearch

14. октября 2016 Заметки 0

Отправка json через rsyslog в elasticsearch

В предыдушей статье было описано как затолкать в elasticsearch данные syslog. Но довольно часто возникает необходимость разбирать груды логов от приложений программистов, бегать по серверам не по джадайски конечно, поэтому используем тот же самый syslog для доставки сообщений от приложения в elasticsearch, из которого удобно смотрим и фильтруем кибаной. Кроме того так же складываем туда же логи docker контейнеров. Суть проста — приложение использую системный вызов syslog пишет сообщение  в него, это очень простая и быстрая операция. Дальше сообщение пересылается на удаленный сервер логирования, где происходит его разбор и отправка в эластик. Процесс этот при правильной подготовке гарантирует 100% надежность (используется tcp)  и занимает пару секунд времени даже на медленных каналах.

Локальная пересылка и настройка удаленного сервера логирования была описана в предыдущей статье, для понятности в этой статье коротко повторю. Так же заранее договариваемся с программистами чтобы использовали правильные теги для своих логов. Мы договорились все теги начинать с docker_app_ — позже в статье этот тег будет применяться для разбора и шаблонирования.

Для отправки логов неоходимо создать файл  /etc/rsyslog.d/rsyslog-server.conf со следующим содержимым:

После чего перезапустить rsyslogd.

 

Далее необходимо подготовить наше приложение. Тут два обязательных условия:

  • валидный json
  • наличие поля @timestamp, это дата в формате rfc3999 (RFC3339 = «Y-m-d\TH:i:sP» )

Вот пример пхп кода для отправки сообщений в сислог:

 

Дале повторю часть конфига из предыдущей статьи, в данном контексте это в пояснении не нуждается, и далее идет описание тесплейтов для записи в файловую систему принимающего syslog сервера, записи в эластик сообщений самого сислог и обработки сообщений json который присылают наши программисты.

И как кульминация — разбор и распихивание логов по файловой системе и разным индексам эластика в зависимости от тега.

Обычные сообщения мы кладем в индекс syslog а json в индекс syslogjson, темплейты были заданы выше.

 

После чего можем наблюдать сообщения в кибане.

 

Возможные трудности:

  • Обязательно надо включать поле @timestamp в json, без него кибана не даст завести в себя новый индекс.
  • Для ускорения доставки при отправке на сервере надо указывать  параметр $ActionQueueType Direct

 

 

 

 


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.