Принцип работы fluentd очень простой. Он принимает данные от различных источников, проверяет есть ли соответствие по определенному критерию. После проверки отправляет полученное сообщение на хранение или обработку.
Конфигурационный файл находится по адресу /etc/td-agent/td-agent.conf
и состоит из 6ти так называемых секций. Основные мы сейчас рассмотрим.
- source — секция описывает источник данных. В этом разделе мы описываем то, откуда к нам поступают данные, их источник.
- match — эта секция описывает, что нам делать с данными, куда их направить. Будь это передача другому приложению или запись в файл.
- filter — не часто приходится использовать эту секцию, позволяет нам изменять полученные данные.
- system — содержит настройки приложения.
- label — позволяет объединить секции match и filter. Упрощает внутренний роутинг, грубо говоря, будем в конфигурации использовать меньше тегов.
- include — позволяет подключать конфигурационные файлы. Полезно при большом количестве источников.
Основное назначение разделов конфигурации разобрали, теперь приступим к настройке. Будем с одной машины отправлять логи при помощи rsyslog по tcp протоколу.
Создание файла конфигурации
Для упрощения редактирования я создал новый файл в директории /etc/td-agent
— host.conf
. В основном файле конфигурации td-agent.conf
, который расположен в этой же директории, добавил строчку в конце @include host.conf
. Теперь конфигурационный файл готов к правкам, откроем наш созданный host.conf
.
source
Как и писал выше, в этом разделе мы будем описывать источник данных для хранения. Мы будем принимать логи по сети от другого сервера и складывать их у себя в определенной папке. Для этого добавим в конфиг следующее:
<source> type syslog port 42185 tag rsyslog </source>
Этот конфиг говорит нам, что мы будем использовать входящий плагин syslog
, слушать он будет порт 42185
, на этот порт мы будем отправлять логи из других машин и помечать тегом rsyslog
, этот тег мы будем использовать в секции match
.
match
Сообщения мы уже можем принимать, теперь нужно их обработать. Конфигурация обработчика:
<match rsyslog.**> type copy <store> type file path /var/log/fluent/adminnotes append true time_slice_format %Y%m%d time_slice_wait 10m time_format %Y%m%dT%H%M%S%z compress gzip utc </store> </match>
Здесь я буду использовать плагин copy
, так как в будущем собираюсь не только сохранять логи в файл, но и отправлять в другие источники, поэтому type
указываем copy
. Далее внутри match
объявляем секцию store
в которой используем плагин file
. Этот плагин записывает поступающие сообщения в файл, в данной конфигурации есть опция time_slice_format %Y%m%d
, она говорит, что нужно сохранять один файл на в сутки. Другими словами, на одни сутки у нас будет один файл с логом.
Все, теперь мы готовы принимать логи. Перезапустим fluentd
(/etc/init.d/td-agent restart
) и приступим к настройке rsyslog
на машине-отправителе.
Rsyslog
Rsyslog — популярный, быстрый, гибкий сервис для управления логами. Нам он нужен в частности, чтобы отдавать логи на машину с установленным fluentd.
Установка rsyslog
Установка очень тривиальна и проста, запуск одной команды сделает всё за вас:
apt-get install rsyslog
Настройка отправки логов
Открываем файл конфигурации nano /etc/rsyslog.conf
и вносим правки(под sudo разумеется):
*.* @10.0.2.15:42185
Я добавил эту строку вначале файла, естественно адрес и порт указываем того хоста, который будет принимать логи. Теперь все логи которые описаны в конфигурационных файлах будут успешно доставлены на машину с fluentd демоном. Перезапускаем service rsyslog restart
и через некоторое время по указанному пути, который мы указали в конфиге fluentd, обнаружим файлы с логами от удаленного сервера.
Вот таким простым способом мы можем сделать самую элементарную схему отправки и хранения логов на специальном сервере.