Thank you for reading this post, don't forget to subscribe!
В данной статье будет рассмотрено как установить и настроить стек Elasticsearch, Kibana, fluentd и Elasticsearch, Kibana, Logstash.
Elasticsearch: Elasticsearch является гибким и мощным решением с открытым исходным кодом, задачей которой является распространение, поиск в реальном времени и аналитика полученных данных . Благодаря разработке архитектуры с нуля для использования в распределенных средах, где надежность и масштабируемость должны иметь главное значение, Elasticsearch дает возможность легко выйти за рамки простого полнотекстового поиска. Благодаря своей прочной набор API-интерфейсов и запросов, DSL, плюс клиенты для наиболее популярных языков программирования, Elasticsearch поставляет на в будущем безграничные возможности в организации технологии поиска.
Kibana: Kibana является визуализатором данных движка Elasticsearch, что позволяет нам изначально взаимодействовать со всеми данными в Elasticsearch через пользовательские инструментальные панели. динамические панели Kibana могут сохранятся, разделяться и экспортироваться, отображать изменения запросов в Elasticsearch в режиме реального времени. Вы можете выполнять анализ данных в пользовательском интерфейсе Kibana, используя заранее разработанные инструментальные панелей или обновлять эти панели мониторинга в режиме реального времени для анализа данных по лету.
Fluentdtd-agent: Fluentd является решением с открытым исходным кодом для сбора данных которое позволяет унифицировать сбор данных для большего понимания и удобства дальнейшего анализа.
Logstash — это конвейер обработки данных, который получает сырые данные (например, логи) из одного или нескольких источников, обрабатывает их и улучшает фильтрами, а затем отправляет результат одному или нескольким получателям. Elastic рекомендует в качестве получателя использовать Elasticsearch
Curator - так как логи, в нашем случае, хранить более чем за 30 дней нету смысла, мы используем штуку, которая умеет ходить в Elasticsearch и подчищать индексы старше чем 30 дней.
НАСТОЯТЕЛЬНО рекомендуется настроить ntpd на ноде, чтобы предотвратить неправильные отметки времени в ваших логах. Вот пример установки:
[spoiler]
yum install ntp
После установки сервера, первое что необходимо сделать, так это перейти на сайт с официальными NTP серверами и выбрать нужный пул для вашего местоположения.
Затем откройте основной конфигурационный файл для редактирования списка серверов с pool.ntp.org проекта и нужно заменить его на Ваши пулы ( те которые вы выбрали на сайте).
# vim /etc/ntp.conf
Если вам нужна дополнительная информация для устранения неполадок (в случае если у вас возникли какие-либо проблемы с вашим NTP демоном), то стоит добавить файл журнала (лог файл), в котором будет записывать все проблемы с сервером NTP, а для этого, открываем:
# vim /etc/ntp.conf
systemctl enable ntpd
Проверка синхронизации времени.
После того как демон NTP был запущен, подождите несколько минут для синхронизации времени с его списком серверов, выполните следующие команды чтобы проверить статус NTP синхронизации и системного времени:
# ntpq -p
# date -R
Также возможно необходимо будет поправить системные настройки:
Увеличение количества файловых дескрипторов
Проверить текущий размер, можно с помощью:
ulimit -n
PS: Стоит перезагрузить компьютер.
Значение которое я выставил (65536 — максимальное значение), — является наиболее хорошим вариантом. Необходимое количество файловых дескрипторов зависит от ваших плагинов и настроек самого FluentD.
Оптимизация параметров ядра (настройка сети)
Для сред с высокой нагрузкой, состоящих из множества экземпляров Fluentd, следует оптимизировать параметры, для этого открываем:
Для того чтобы настройки вступили в силу, стоит выполнить:
sysctl -p
[/spoiler]
Установим JAVA
идём на сайт:
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
регистрируемся(если нет аккаунта) и качаем оттуда пакет jdk-8u221-linux-x64.rpm
после чего ставим пакет:
[root@centos7 ~]# yum localinstall jdk-8u221-linux-x64.rpm
Установка Elasticsearch вариант 1
Копируем публичный ключ репозитория:
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Подключаем репозиторий Elasticsearch:
vim /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
Приступаем к установке еластика:
# yum install elasticsearch
В в завершении установки добавим elasticsearch в автозагрузку и запустим его с дефолтными настройками:
# systemctl daemon-reload
# systemctl enable elasticsearch.service
правим файл
/etc/elasticsearch/jvm.options
меняем
-Xms1g
-Xmx1g
на
-Xms256m
-Xmx256m
если не жалко оперативку можете оставить и 1 гигабайт по умолчанию
# systemctl start elasticsearch.service
Проверяем, запустилась ли служба:
# systemctl status elasticsearch.service
Установка Kibana вариант 1
Импортируем ключ репозитория:
# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Добавляем конфиг репозитория:
# vim /etc/yum.repos.d/kibana.repo
[kibana-7.x]
name=Kibana repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
Запускаем установку Kibana:
# yum install kibana
Добавляем Кибана в автозагрузку и запускаем:
# systemctl daemon-reload
# systemctl enable kibana.service
# systemctl start kibana.service
Проверяем состояние запущенного сервиса:
# systemctl status kibana.service
По-умолчанию, Kibana слушает порт 5601. Только не спешите его проверять после запуска. Кибана стартует долго. Подождите примерно минуту и проверяйте.
# netstat -tulnp | grep 5601
tcp 0 0 127.0.0.1:5601 0.0.0.0:* LISTEN 27401/node
Установка Elasticsearch вариант 2
скачать последнюю версию вы можете тут:
https://www.elastic.co/downloads/elasticsearch
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.4.0-x86_64.rpm
yum localinstall elasticsearch-7.4.0-x86_64.rpm
правим файл
vim /etc/elasticsearch/jvm.options
меняем
-Xms1g
-Xmx1g
на
-Xms256m
-Xmx256m
если не жалко оперативку можете оставить и 1 гигабайт - по умолчанию
далее запускаем:
[root@centos7 ~]# systemctl start elasticsearch
Установка Kibana вариант 2
скачаем её:
https://www.elastic.co/downloads/kibana
[root@centos7 ~]# wget https://artifacts.elastic.co/downloads/kibana/kibana-7.4.0-x86_64.rpm
[root@centos7 ~]# yum localinstall kibana-7.4.0-x86_64.rpm
конфиг файл тут:
/etc/kibana/kibana.yml
панель достпна по адресу:
http://localhost:5601
Настройка elasticsearch и kibana
Настройки Elasticsearch находятся в файле:
/etc/elasticsearch/elasticsearch.yml
На начальном этапе нас будут интересовать следующие параметры:
path.data: /var/lib/elasticsearch # директория для хранения данных
network.host: 127.0.0.1 # слушаем только локальный интерфейc
По-умолчанию Elasticsearch слушает все имеющиеся сетевые интерфейсы. Нам это не нужно, так как данные в него будет передавать logstash/fluentd, который будет установлен локально. Обращаю отдельное внимание на параметр для директории с данными. Чаще всего они будут занимать значительное место, иначе зачем нам Elasticsearch 🙂 Подумайте заранее, где вы будете хранить логи. Все остальные настройки я оставляю дефолтными.
После изменения настроек, надо перезапустить службу:
# systemctl restart elasticsearch.service
Смотрим, что получилось:
# netstat -tulnp | grep 9200
tcp6 0 0 127.0.0.1:9200 :::* LISTEN 14130/java
Elasticsearch повис на локальном интерфейсе. Причем я вижу, что он слушает ipv6, а про ipv4 ни слова. Но его он тоже слушает, так что все в порядке.
Настройка Kibana
Файл с настройками Кибана располагается по пути:
/etc/kibana/kibana.yml.
На начальном этапе можно вообще ничего не трогать и оставить все как есть. По-умолчанию kibana слушает только localhost и не позволяет подключаться удаленно. Это нормальная ситуация, если у вас будет на этом же сервере установлен nginx в качестве reverse proxy, который будет принимать подключения и проксировать их в кибана. Так и нужно делать в продакшене, когда системой будут пользоваться разные люди из разных мест. С помощью nginx можно будет разграничивать доступ, использовать сертификат, настраивать нормальное доменное имя и т.д.
Если же у вас это тестовая установка, то можно обойтись без nginx. Для этого надо разрешить Кибана слушать внешний интерфейс и принимать подключения. Измените параметр server.host, указав ip адрес сервера, например вот так:
server.host: "10.1.4.114"
Если хотите, чтобы она слушала все интерфейсы, укажите в качестве адреса 0.0.0.0. После этого Kibana надо перезапустить:
# systemctl restart kibana.service
Теперь можно зайти в веб интерфейс по адресу http://10.1.4.114:5601.
Можно продолжать настройку и тестирование, а когда все будет закончено, запустить nginx и настроить проксирование.
Проксирование подключений к Kibana через Nginx
Я не буду подробно рассказывать о том, что такое проксирование в nginx. Приведу пример конфига для передачи запросов с nginx в kibana. Я рекомендую использовать ssl сертификаты для доступа к Kibana. Даже если в этом нет объективной необходимости, надоедают уведомления браузеров о том, что у вас небезопасное подключение.
создаём сертификат:
mkdir -p /certs
openssl genrsa -out /certs/test.ru.key 1024
openssl req -new -key /certs/test.ru.key -out /certs/test.ru.csr
здесь указали наш домен
Common Name (eg, your name or your server's hostname) []:*.test.ru
openssl x509 -req -days 365 -in /certs/test.ru.csr -signkey /certs/test.ru.key -out /certs/test.ru.crt
cat /certs/test.ru.crt /certs/test.ru.key | tee /certs/test.ru.pem
Вот примерный конфиг nginx для проксирования запросов к Kibana с ограничением доступа по паролю:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
server { listen 443; server_name kibana.test.ru; ssl_certificate /certs/test.ru.crt; ssl_certificate_key /certs/test.ru.key; location / { auth_basic "Restricted Access"; auth_basic_user_file /etc/nginx/htpasswd.kibana; proxy_pass http://localhost:5601; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } |
Создаем файл для пользователей и паролей:
# htpasswd -c /etc/nginx/htpasswd.kibana kibanauser
Если утилиты htpasswd нет в системе, то установите ее:
# yum install -y httpd-tools
После этого выйдет запрос на ввод пароля. С помощью приведенной выше команды мы создали файл с информацией о пользователе и пароле kibanauser для ограничения доступа к web панели кибана.
====================================
перейдём к настройке сборщиков логов есть 2 варианта logstash/fluentd
Установка и настройка Logstash
Logstash устанавливается так же, как Elasticsearch и Kibana, из того же репозитория. Не буду еще раз показывать, как его добавить. Просто установим его и добавим в автозагрузку.
Установка Logstash в Centos 7:
# yum install logstash
Добавляем logstash в автозагрузку:
# systemctl enable logstash.service
Запускать пока не будем, надо его сначала настроить. Основной конфиг logstash лежит по адресу
/etc/logstash/logstash.yml
Я его трогать не буду, а все настройки буду по смыслу разделять по разным конфигурационным файлам в директории
/etc/logstash/conf.d.
Создаем первый конфиг input.conf, который будет описывать прием информации с beats агентов.
[root@centos7 ~]# vim /etc/logstash/conf.d/input.conf
1 2 3 4 5 |
input { beats { port => 5044 } } |
Тут все просто. Указываю, что принимаем информацию на 5044 порт. Этого достаточно. Если вы хотите использовать ssl сертификаты для передачи логов по защищенным соединениям, здесь добавляются параметры ssl. Я буду собирать данные из закрытого периметра локальной сети, у меня нет необходимости использовать ssl.
Теперь укажем, куда будем передавать данные. Тут тоже все относительно просто. Создаём конфиг output.conf, который описывает передачу данных в Elasticsearch.
[root@centos7 ~]# vim /etc/logstash/conf.d/output.conf
1 2 3 4 5 6 7 |
output { elasticsearch { hosts => "localhost:9200" index => "nginx-%{+YYYY.MM.dd}" } #stdout { codec => rubydebug } } |
Здесь все просто — передавать все данные в elasticsearch под указанным индексом с маской в виде даты. Насколько я понял, разбивка индексов по дням и по типам данных удобна с точки зрения управления данными. Потом легко будет выполнять очистку данных по этим индексам. Я закомментировал последнюю строку. Она отвечает за логирование. Если ее включить, то все поступающие данные logstash будет отправлять дополнительно в системный лог. В centos это /var/log/messages. Используйте только во время отладки, иначе лог быстро разрастется дублями поступающих данных.
Остается последний конфиг с описание обработки данных. Создаём конфиг filter.conf.
[root@centos7 ~]# vim /etc/logstash/conf.d/filter.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
filter { if [type] == "nginx_access" { grok { match => { "message" => "%{IPORHOST:remote_ip} - %{DATA:user} \[%{HTTPDATE:access_time}\] \"%{WORD:http_method} %{DATA:url} HTTP/%{NUMBER:http_version}\" %{NUMBER:response_code} %{NUMBER:body_sent_bytes} \"%{DATA:referrer}\" \"%{DATA:agent}\"" } } } date { match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ] } geoip { source => "remote_ip" target => "geoip" add_tag => [ "nginx-geoip" ] } } |
Первое, что делает этот фильтр, парсит логи nginx с помощью grok, если указан соответствующий тип логов, и выделяет из лога ключевые данные, которые записывает в определенные поля, чтобы потом с ними было удобно работать. В документации к filebeat хорошо описаны модули, идущие в комплекте, которые все это и так уже умеют делать из коробки, нужно только подключить соответствующий модуль.
Оказалось, что модули filebeat работают только в том случае, если вы отправляете данные напрямую в elasticsearch. На него вы тоже ставите соответствующий плагин и получаете отформатированные данные. Но у нас работает промежуточное звено logstash, который принимает данные. С ним, как я понял, плагины filebeat не работают, поэтому приходится отдельно в logstash парсить данные. Это не очень сложно, но тем не менее. Как я понял, это плата за удобства, которые дает logstash. Если у вас много разрозненных данных, то отправлять их напрямую в elasticsearch не так удобно, как с использованием предобработки в logstash. Я так понял этот момент.
Для фильтра grok, который использует logstash, есть удобный дебаггер, где можно посмотреть, как будут парситься ваши данные. Покажу на примере одной строки из конфига nginx. Например, возьмем такую строку из лога nginx:
180.163.220.100 - travvels.ru [05/Sep/2019:14:45:52 +0300] "GET /assets/galleries/26/1.png HTTP/1.1" 304 0 "https://travvels.ru/ru/glavnaya/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36"
И посмотрим, как ее распарсит правило grok, которое я использовал в конфиге выше.
%{IPORHOST:remote_ip} - %{DATA:user} \[%{HTTPDATE:access_time}\] \"%{WORD:http_method} %{DATA:url} HTTP/%{NUMBER:http_version}\" %{NUMBER:response_code} %{NUMBER:body_sent_bytes} \"%{DATA:referrer}\" \"%{DATA:agent}\"
Собственно, результат вы можете сами увидеть в дебаггере. Фильтр распарсит лог и на выходе сформирует json, где каждому значению будет присвоено свое поле, по которому потом удобно будет в еластике строить отчеты и делать выборки. Только не забывайте про формат логов. Приведенное мной правило соответствует дефолтному формату main логов в nginx. Если вы каким-то образом модифицировали формат логов, внесите изменения в grok фильтр.
Вы можете таким образом парсить любые логи и передавать их в еластикс. Потом на основе этих данных строить отчеты, графики, дашборды.
Дальше используется модуль date для того, чтобы выделять дату из поступающих логов и использовать ее в качестве даты документа в elasticsearch. Делается это для того, чтобы не возникало путаницы, если будут задержки с доставкой логов. В системе сообщения будут с одной датой, а внутри лога будет другая дата. Неудобно разбирать инциденты.
В конце я использую geoip фильтр, который на основе ip адреса, который мы получили ранее с помощью фильтра grok и записали в поле remote_ip, определяет географическое расположение. Он добавляет новые метки и записывает туда географические данные. Для его работы мне было достаточно описать его в конфиге и скачать базу адресов в папку
/etc/logstash.
cd /etc/logstash/
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz
gunzip GeoLite2-City.mmdb.gz
теперь поправил объём потребляемой памяти, в файле:
/etc/logstash/jvm.options
меняем:
-Xms1g
-Xmx1g
на
-Xms256m
-Xmx256m
если не жалко оперативку можете оставить и 1 гигабайт по умолчанию
Закончили настройку logstash. Запускаем его:
systemctl start logstash.service
Можете проверить на всякий случай лог /var/log/logstash/logstash-plain.log, чтобы убедиться в том, что все в порядке. Теперь настроим агенты для отправки данных.
Установка Filebeat для отправки логов в Logstash
Установим первого агента Filebeat на сервер с nginx для отправки логов веб сервера на сервер с ELK. Ставить можно как из общего репозитория, который мы подключали ранее, так и по отдельности пакеты. Как ставить — решать вам. В первом случае придется на все хосты добавлять репозиторий, но зато потом удобно обновлять пакеты. Если подключать репозиторий не хочется, можно просто скачать пакет и установить его.
Ставим на Centos 7.
# curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.4.0-x86_64.rpm
# rpm -vi filebeat-6.4.0-x86_64.rpm
Или просто:
# yum install filebeat
[root@centos7 ~]# mv /etc/filebeat/filebeat.yml /etc/filebeat/filebeat.yml_default
После установки создаём примерно такой конфиг /etc/filebeat/filebeat.yml для отправки логов в logstash.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
filebeat.inputs: - type: log enabled: true paths: - /var/log/nginx/*-access.log fields: type: nginx_access fields_under_root: true scan_frequency: 5s - type: log enabled: true paths: - /var/log/nginx/*-error.log fields: type: nginx_error fields_under_root: true scan_frequency: 5s output.logstash: hosts: ["192.168.1.171:5044"] xpack.monitoring: enabled: true elasticsearch: hosts: ["http://192.168.1.171:9200"] |
Некоторые пояснения к конфигу, так как он не совсем дефолтный и минималистичный. Я его немного модифицировал для удобства.
Во-первых, я разделил логи access и error с помощью отдельного поля type, куда записываю соответствующий тип лога: nginx_access или nginx_error. В зависимости от типа меняются правила обработки в logstash. Плюс, я включил мониторинг и для этого указал адрес elastichsearch, куда filebeat передает данные мониторинга напрямую. Показываю это для вас просто с целью продемонстрировать возможность. Чтобы мониторинг работал, его надо активировать в соответствующем разделе в Kibana — Monitoring. И не забудьте запустить elasticsearch на внешнем интерфейсе. В первоначальной настройке я указал слушать только локальный интерфейс.
Запускаем filebeat и добавляем в автозагрузку.
# systemctl start filebeat
# systemctl enable filebeat
Проверяйте лог по адресу /var/log/filebeat/filebeat. Он весьма информативет. Если все в порядке, увидите список всех логов в директории /var/log/nginx, которые нашел filebeat и начал готовить к отправке. Если все сделали правильно, то данные уже потекли в elasticsearch. Мы их можем посмотреть в Kibana. Для этого открываем web интерфейс и переходим в раздел Discover. Так как там еще нет индекса, нас перенаправит в раздел Managemet, где мы сможем его добавить.
Вы должны увидеть индекс, который начал заливать logstash в elasticsearch. В поле Index pattern введите nginx-* и нажмите Next Step. На следующем этапе выберите имя поля для временного фильтра. У вас будет только один вариант — @timestamp, выбирайте его и жмите Create Index Pattern.
Создание индекса с данными
Новый индекс добавлен. Теперь при переходе в раздел Discover, он будет открываться по-умолчанию со всеми данными, которые в него поступают.
====================================================
Установка fluentd
curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent3.sh | sh
[root@centos7 ~]# mv /etc/td-agent/td-agent.conf /etc/td-agent/td-agent.conf_default
одной командой вводим:
td-agent-gem install fluent-plugin-elasticsearch \
fluent-plugin-record-modifier \
fluent-plugin-exclude-filter \
fluent-plugin-splunk-enterprise
vim /etc/td-agent/td-agent.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<match td.*.*> type tdlog apikey YOUR_API_KEY auto_create_table buffer_type file buffer_path /var/log/td-agent/buffer/td </match> <source> type syslog port 42185 tag syslog source_hostname_key host use_record_host true </source> <source> type forward </source> <match syslog.**> type elasticsearch logstash_format true flush_interval 10s # for testing </match> |
[root@centos7 ~]# systemctl start td-agent
[root@centos7 ~]# systemctl enable td-agent
Дальше правим /etc/rsyslog.conf и добавляем:
*.* @192.168.1.170:42185
после чего перезапускаем:
systemctl restart rsyslog
Конфигурационный файл находится по адресу
/etc/td-agent/td-agent.conf
и состоит из 6ти так называемых секций. Основные мы сейчас рассмотрим.
- source — секция описывает источник данных. В этом разделе мы описываем то, откуда к нам поступают данные, их источник.
- match — эта секция описывает, что нам делать с данными, куда их направить. Будь это передача другому приложению или запись в файл.
- filter — не часто приходится использовать эту секцию, позволяет нам изменять полученные данные.
- system — содержит настройки приложения.
- label — позволяет объединить секции match и filter. Упрощает внутренний роутинг, грубо говоря, будем в конфигурации использовать меньше тегов.
- include — позволяет подключать конфигурационные файлы. Полезно при большом количестве источников.
Основное назначение разделов конфигурации разобрали, теперь приступим к настройке. Будем с одной машины отправлять логи при помощи rsyslog по tcp протоколу.
source
Как и писал выше, в этом разделе мы будем описывать источник данных для хранения. Мы будем принимать логи по сети от другого сервера и складывать их у себя в определенной папке. Для этого добавим в конфиг следующее:
1
2
3
4
5
|
<source> type syslog port 42185 tag rsyslog </source> |
Этот конфиг говорит нам, что мы будем использовать входящий плагин syslog
, слушать он будет порт 42185
, на этот порт мы будем отправлять логи из других машин и помечать тегом rsyslog
, этот тег мы будем использовать в секции match
.
match
Сообщения мы уже можем принимать, теперь нужно их обработать. Конфигурация обработчика:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<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
на машине-отправителе.
mkdir /var/log/fluent/
chown -R td-agent:td-agent /var/log/fluent/
systemctl restart td-agent
Rsyslog
Rsyslog — популярный, быстрый, гибкий сервис для управления логами. Нам он нужен в частности, чтобы отдавать логи на машину с установленным fluentd.
Установка rsyslog
Установка очень тривиальна и проста, запуск одной команды сделает всё за вас:
yum install rsyslog
Настройка отправки логов
Открываем файл конфигурации nano /etc/rsyslog.conf
и вносим правки(под sudo разумеется):
1
|
*.* @10 .0.2.15:42185 |
Я добавил эту строку вначале файла, естественно адрес и порт указываем того хоста, который будет принимать логи. Теперь все логи которые описаны в конфигурационных файлах будут успешно доставлены на машину с fluentd демоном. Перезапускаем service rsyslog restart
и через некоторое время по указанному пути, который мы указали в конфиге fluentd, обнаружим файлы с логами от удаленного сервера.
Установка curator
rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
vim /etc/yum.repos.d/curator.repo
[curator-5]
name=CentOS/RHEL 7 repository for Elasticsearch Curator 5.x packages
baseurl=https://packages.elastic.co/curator/5/centos/7
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
yum install elasticsearch-curator
mkdir /etc/curator
touch /etc/curator/action.yml
touch /etc/curator/config.yml
vim /etc/curator/config.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
client: hosts: - 127.0.0.1 port: 9200 url_prefix: use_ssl: False certificate: client_cert: client_key: ssl_no_validate: False http_auth: timeout: 30 master_only: False logging: loglevel: INFO logfile: logformat: default blacklist: ['elasticsearch', 'urllib3'] |
Дальше файл с необходимыми действиями:
vim /etc/curator/action.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
actions: 1: action: close description: >- Close indices older than 14 days (based on index name). options: ignore_empty_list: True delete_aliases: False disable_action: False filters: - filtertype: pattern kind: prefix value: nginx- - filtertype: age source: name direction: older timestring: '%Y.%m.%d' unit: days unit_count: 14 2: action: delete_indices description: >- Delete indices older than 14 days (based on index name). options: ignore_empty_list: True disable_action: False filters: - filtertype: pattern kind: prefix value: nginx- - filtertype: age source: name direction: older timestring: '%Y.%m.%d' unit: days unit_count: 14 |
Обращаю внимание на форматирование файла. Отступы в начале строки важны. Они должны быть именно такие, как у меня в примере.
Конфиг сделан на основе примеров из официальной документации. Рекомендую все подробности искать там. Запускаем очистку:
/usr/bin/curator --config /etc/curator/config.yml /etc/curator/action.yml
В консоли увидите информативный вывод выполняемых команд по очистке индексов. После завершения очистки, не забудьте добавить задание в cron.
crontab -e
4 4 * * * /usr/bin/curator --config /etc/curator/config.yml /etc/curator/action.yml
Очистка индексов будет выполняться каждый день в 4 утра.
# curator --config /etc/curator/curator.yml /etc/curator/action.yml --dry-run
# curator --config /etc/curator/curator.yml /etc/curator/action.yml