Когда монолит разбивают на десяток-другой сервисов, логи разъезжаются по такому же количеству машин. Найти причину сбоя через grep по двадцати хостам – занятие на полночи. Сообщение об ошибке приходит из одного сервиса, корень проблемы – в другом, а между ними ещё очередь и шина. Централизованный сбор логов перестаёт быть удобством и становится условием эксплуатации. Связка Elasticsearch, Logstash и Kibana (ELK) закрывает эту задачу без покупки коммерческих лицензий и хорошо ложится на инфраструктуру, где импортозамещение и работа на открытом ПО – отдельное требование заказчика.
Из чего состоит конвейер
Logstash принимает поток от агентов на каждом хосте, разбирает строки по grok-шаблонам, приводит метки времени к единому формату и складывает структурированные события в Elasticsearch. На стороне сервисов лёгкий сборщик – мы используем Logstash-forwarder (Lumberjack) – гонит строки по шифрованному каналу, не нагружая прикладные машины разбором. Elasticsearch индексирует события и отдаёт их по запросу за доли секунды даже на объёме в сотни миллионов записей. Kibana 4, вышедшая в начале этого месяца, рисует поверх индекса дашборды: динамику ошибок, разбивку по сервисам, всплески латентности.
Ключевое решение на старте – формат лога. Заставьте сервисы писать JSON с обязательными полями: service, trace_id, level, timestamp. Тогда Logstash не парсит текст регулярками, а принимает готовую структуру, и сквозной идентификатор запроса trace_id связывает цепочку вызовов через все сервисы. Без сквозного идентификатора централизация даёт свалку строк вместо картины; с ним вы за один запрос в Kibana поднимаете полный путь запроса от фронта до базы.
Что учесть в продакшене и в госконтуре
Elasticsearch на одном узле – это демо, не эксплуатация. Под реальную нагрузку поднимайте кластер от трёх узлов, разделяйте роли master и data, считайте объём по формуле «средний размер события на число событий в сутки на срок хранения». Включайте curator: индексы старше срока хранения закрываются или удаляются по расписанию, иначе диск кончится за пару недель. Для госзаказчика срок хранения логов – не технический параметр, а часть требований к защите информации и аудиту доступа, и его задаёт регламент, а не администратор.
Отдельный вопрос – доступ к самой Kibana. В открытой поставке аутентификации нет, поэтому интерфейс закрывают обратным прокси с авторизацией и разграничением прав. В контуре, где система интегрирована с государственными сервисами, это требование смыкается с подходами из нашего разбора интеграции с инфраструктурой госуслуг, а перевод существующих систем на открытый стек укладывается в методологию миграции ПО, которую мы применяем на таких проектах. Это согласуется и с заявленным курсом ведомств – см. наш разбор плана Минкомсвязи по импортозамещению.
Что это даёт команде
Дежурный инженер видит инцидент в одном окне и за минуты выходит на сбойный сервис, а не за часы. Аналитик строит отчёт по частоте ошибок без обращения к разработке. Архитектор замечает деградацию до того, как она дойдёт до пользователя. Логи перестают быть мёртвым архивом «на всякий случай» и становятся инструментом эксплуатации.
ELK ставится за несколько дней, но промышленная эксплуатация требует расчёта кластера, политик хранения и схемы доступа под конкретный контур – от агентов на хостах до проектирования и внедрения защищённой инфраструктуры под ключ.