может использоваться совместно с другими продуктами, например, CAdVisor – анализа состояния системы и отдельных контейнеров.
Продукты EKL могут быть установлены самостоятельно, скачаны в виде самодостаточных контейнеров, для которых нужно настроить
связь или в виде одного контейнера.
Для нормальной работы Elasticsearch нужно, чтобы данные приходили в формате JSON. Если данные предавать в
текстовом формате (лог пишется одной строкой, отделяется от предыдущий переносом строки), то он сможет
предоставить только полнотекстовый поиск, так как они будут восприниматься одной строкой. Для передачи
логов в формате JSON имеется два варианта: или настроить исследуемый продукт выдавать в этом формате,
например, для NGINX имеется такая возможность. Но, зачастую это невозможно, так как имеется уже
накопленная база логов, а традиционно они пишутся в текстовом формате. Для таких случаев необходима
пост обработка логов из текстового формата в JSON, которой занимается Logstash. Важно заметить, что если
есть возможность сразу же передавать данные в структурированном виде (JSON, XML и других), то следует это
сделать, так как если сделать детальный парсинг, то любое отклонение одностороннее отклонение от формата
приведёт с неработоспособности, а при поверхностном – теряем ценную информацию. В любом случае парсинг в
этот системе является узким горлышком, хотя может ограниченно масштабироваться до сервиса или лога
файла. К счастью, всё больше и больше продуктов начинают поддерживать структурированные логи, например,
последние версии NGINX поддерживает логи в JSON формате.
Для систем, не поддерживающих данный формат можно использовать преобразование к нему с помощью таких
программ, как Logstash, File bear и Fluentd. Первый из них входит в стандартную поставку Elastic Stack от вендора
и может быть установлен одним образом ELK в Docker – контейнер. Он поддерживает получение данных от файлов, сети и
стандартного потока как на входе, так и на выходе, а главное нативно внутренний протокол Elastic Search.
Logstash мониторит log-файлы на основе даты изменения или получает по сети данные по telnet от распределённой
системы, например, контейнеров и после преобразования отравляет на выход, обычно, в Elastic Search. Он прост и
входит в стандартную поставку с Elastic Stack, благодаря чему просто и беспроблемно настраивается. Но благодаря
Java машине внутри тяжёл и не сильно функционален, хотя и поддерживает плагины, например, синхронизации с MySQL
для отправки новых данных. Чуть больше возможностей предоставляет Filebeat. Энтерпрайзным инструментом на все
случаи жизни может служить Fluentd благодаря высокой функциональности (чтение логов, системных журналов и т.д.),
масштабируемости и возможности раскатки по кластерам Kubernetes с помощью Helm чарта, и мониторинг всего
дата-центра в стандартной поставке, но об этом соответствующем разделе.
Для управления логов можно воспользоваться Curator, который сможет архивировать из ElasticSearch старые
логи или их удалять, повышая эффективность его работы.
Процесс получения логов логичен осуществляется специальными сборщиками: logstash, fluentd, filebeat или
другими.
fluentd наименее требовательный и более простой аналог Logstash. Настройка
производится в /etc/td-agent/td-agent.conf, который содержит четыре блока:
** match – содержит настройки передачи полученных данных;
** include – содержит информацию о типах файлов;
** system – содержит настройки системы.
Logstash представляет гораздо более функциональный язык конфигураций. Logstash демон агента – logstash мониторит
изменения в файлах. Если же логи находятся не локально, а на распределённой системе, то устанавливается logstash на каждый сервер и
запускается в режиме агента bin/logstash agent -f /env/conf/my.conf. Поскольку запускать
logstash только в качестве агента для пересылки логов расточительно, то можно использовать продукт от тех
же разработчиков Logstash Forwarder (ранее Lumberjack) пересылающий логи по протоколу lumberjack к
logstash серверу. Для отслеживания и получения данных с MySQL можно использовать агент Packetbeat
(https://www.8host.com/blog/sbor-metrik-infrastruktury-s-pomoshhyu-packetbeat-i-elk-v-ubuntu-14-04/).
Также logstash позволяет преобразовать данные разного типа:
** grok – задать регулярные выражения выдирания полей из строки, часто для логов из текстового формата в JSON;
** date – в случае архивных логов проставить дату создания лога не текущей датой, а взять её из самого лога;
** kv – для логов типа key=value;
** mutate – выбрать только нужные поля и изменить данные в полях, например, произвести замену символа "/" на "_";
Читать дальше