- Регистрация
- 14.05.16
- Сообщения
- 11.398
- Реакции
- 501
- Репутация
- 0
У компании «Флант» есть ряд Open Source-разработок, преимущественно для Kubernetes, и
Как мы упоминали в недавней
Недостатки
Мы используем loghouse во множестве Kubernetes-кластеров всё это время, и в целом такое решение устраивает как нас самих, так и различных клиентов, которым мы тоже предоставляем доступ.
Главные его плюсы — простой и понятный интерфейс, возможность исполнения SQL-запросов, хорошее сжатие и низкое потребление ресурсов при вставке данных в базу, а также низкие накладные ресурсы при хранении.
Самые наболевшие проблемы в loghouse за время эксплуатации:
Кроме того, накопилось значительное количество
Главные изменения в loghouse 0.3.0
На самом деле, изменений у нас накопилось достаточное количество, но мы осветим самые важные. Их можно разделить на 3 основные группы:
1. Улучшения в хранении логов и схеме базы
Ключевые новшества:
Сравним производительность старой и новой схем в реальном проекте. Вот пример поиска уникальных URL в логах приложения популярного онлайн-ресурса
SELECT
string_fields.values[indexOf(string_fields.names, 'path')] AS path,
count(*) AS count
FROM logs
WHERE (namespace = 'kube-nginx-ingress') AND ((string_fields.values[indexOf(string_fields.names, 'vhost')]) LIKE '%foobar.baz%') AND (date = '2020-02-29')
GROUP BY string_fields.values[indexOf(string_fields.names, 'path')]
ORDER BY count DESC
LIMIT 20
Отбор происходит по десяткам миллионов записей. Старая схема отрабатывала за 20 секунд:
Новая — за 14:
Если вы используете наш
DO_DB_DEPLOY=true rake create_logs_tables
Кроме того, мы начали использовать
CREATE TABLE logs
(
....
)
ENGINE = MergeTree()
PARTITION BY (date, toHour(timestamp))
ORDER BY (timestamp, nsec, namespace, container_name)
TTL date + toIntervalDay(14)
SETTINGS index_granularity = 32768;
Примеры схем баз данных и конфигов для ClickHouse, включая пример работы с кластером CH, можно найти в
Улучшение сбора логов
Основные новшества:
Аккумулятором логов в loghouse стала новая таблица logs_buffer, добавленная в схему БД. Эта таблица — in-memory, т.е. хранится в RAM (имеет специальный тип
Реализованная отправка логов напрямую в loghouse из приложения позволяет делать это даже через netcat:
echo '{"log": {"level": "info", "msg": "hello world"}}' | nc fluentd.loghouse 5170
Данные логи можно посмотреть в пространстве имён, куда установлен loghouse, в потоке net:
Требования к отправляемым данным минимальны: сообщение должно быть корректным JSON с полем log. Поле log, в свою очередь, может быть как строкой, так и nested JSON.
Мониторинг работы подсистемы логирования
Важным улучшением стал мониторинг fluentd через Prometheus. Теперь в комплекте к loghouse идёт панель для Grafana, которая отображает все основные метрики, такие как:
Код панели для Grafana можно увидеть в
Панель для ClickHouse сделана на основе
Как видно, в панели отображается количество подключений к ClickHouse, использование буфера, активность фоновых задач и количество слияний. Этого вполне достаточно для понимания состояния системы:
Панель для fluentd показывает активные экземпляры fluentd. Это особенно критично для тех, кто совсем не хочет/не может терять логи:
Кроме статуса pod'ов, в панели видна нагрузка на очередь отправки логов в ClickHouse. По очередям можно понять, справляется ClickHouse с нагрузкой или уже нет. В случаях, когда лог нельзя терять, этот параметр тоже становится критичным.
Примеры панелей заточены под нашу поставку Prometheus Operator, однако легко модифицируются через переменные в настройках.
Наконец, в рамках работ по мониторингу loghouse мы собрали актуальный Docker-образ с релизом
Планы на будущее
Вместо заключения
Приятно видеть, что проект loghouse нашёл свою аудиторию, не только завоевав звёздочки в GitHub (600+), но и побудив реальных пользователей рассказывать о своих успехах и проблемах.
Создав loghouse более 2 лет назад, мы не были уверены в его перспективах, ожидая, что рынок и/или Open Source-сообщество предложат лучшие решения. Однако на сегодняшний день видим, что это жизнеспособный путь, который мы сами по-прежнему выбираем и используем на множестве обслуживаемых Kubernetes-кластеров.
Будем рады любому содействию в улучшении и развитии loghouse. Если вам чего-то не хватает в loghouse — пишите в комментариях. Также мы, конечно, будем рады активности на
P.S.
Читайте также в нашем блоге:
You must be registered for see links
— одна из самых популярных. Это наш инструмент для централизованного логирования в K8s, который
You must be registered for see links
более 2 лет назад.Как мы упоминали в недавней
You must be registered for see links
, он требовал доработки, и актуальность её со временем только росла. Сегодня мы рады представить новую версию loghouse — v0.3.0. Подробности о ней — под катом.Недостатки
Мы используем loghouse во множестве Kubernetes-кластеров всё это время, и в целом такое решение устраивает как нас самих, так и различных клиентов, которым мы тоже предоставляем доступ.
Главные его плюсы — простой и понятный интерфейс, возможность исполнения SQL-запросов, хорошее сжатие и низкое потребление ресурсов при вставке данных в базу, а также низкие накладные ресурсы при хранении.
Самые наболевшие проблемы в loghouse за время эксплуатации:
- использование таблиц-партиций, объединённых merge-таблицей;
- отсутствие буфера, который бы сглаживал всплески логов;
- устаревшие и потенциально уязвимые gem в веб-панели;
- устаревший fluentd (loghouse-fluentd:latest не стартовал из-за проблемного gemset'а).
Кроме того, накопилось значительное количество
You must be registered for see links
, которые тоже хотелось бы решить.Главные изменения в loghouse 0.3.0
На самом деле, изменений у нас накопилось достаточное количество, но мы осветим самые важные. Их можно разделить на 3 основные группы:
- улучшение хранения логов и схемы БД;
- улучшение сбора логов;
- появление мониторинга.
1. Улучшения в хранении логов и схеме базы
Ключевые новшества:
- Изменились схемы хранения логов, осуществлён переход на работу с единой таблицей и отказ от таблиц-партиций.
- Начал применяться механизм очистки базы, встроенный в ClickHouse последних версий.
- Появилась возможность использования внешней инсталляции ClickHouse, даже в режиме кластера.
Сравним производительность старой и новой схем в реальном проекте. Вот пример поиска уникальных URL в логах приложения популярного онлайн-ресурса
You must be registered for see links
:SELECT
string_fields.values[indexOf(string_fields.names, 'path')] AS path,
count(*) AS count
FROM logs
WHERE (namespace = 'kube-nginx-ingress') AND ((string_fields.values[indexOf(string_fields.names, 'vhost')]) LIKE '%foobar.baz%') AND (date = '2020-02-29')
GROUP BY string_fields.values[indexOf(string_fields.names, 'path')]
ORDER BY count DESC
LIMIT 20
Отбор происходит по десяткам миллионов записей. Старая схема отрабатывала за 20 секунд:
Новая — за 14:
Если вы используете наш
You must be registered for see links
, то при обновлении loghouse будет автоматически произведена миграция базы на новый формат. В противном случае — придётся сделать миграцию вручную. Процесс описан в
You must be registered for see links
. Если вкратце, то достаточно запустить:DO_DB_DEPLOY=true rake create_logs_tables
Кроме того, мы начали использовать
You must be registered for see links
. Это позволяет автоматически удалять из БД данные, которые старше, чем заданный временной интервал:CREATE TABLE logs
(
....
)
ENGINE = MergeTree()
PARTITION BY (date, toHour(timestamp))
ORDER BY (timestamp, nsec, namespace, container_name)
TTL date + toIntervalDay(14)
SETTINGS index_granularity = 32768;
Примеры схем баз данных и конфигов для ClickHouse, включая пример работы с кластером CH, можно найти в
You must be registered for see links
.Улучшение сбора логов
Основные новшества:
- Добавлен буфер, который призван сгладить всплески при появлении большого числа логов.
- Реализована возможность отправлять логи в loghouse напрямую из приложения: по TCP и UDP, в формате JSON.
Аккумулятором логов в loghouse стала новая таблица logs_buffer, добавленная в схему БД. Эта таблица — in-memory, т.е. хранится в RAM (имеет специальный тип
You must be registered for see links
); именно она и должна сгладить нагрузку на базу. За
You must be registered for see links
по её добавлению благодарим
You must be registered for see links
!Реализованная отправка логов напрямую в loghouse из приложения позволяет делать это даже через netcat:
echo '{"log": {"level": "info", "msg": "hello world"}}' | nc fluentd.loghouse 5170
Данные логи можно посмотреть в пространстве имён, куда установлен loghouse, в потоке net:
Требования к отправляемым данным минимальны: сообщение должно быть корректным JSON с полем log. Поле log, в свою очередь, может быть как строкой, так и nested JSON.
Мониторинг работы подсистемы логирования
Важным улучшением стал мониторинг fluentd через Prometheus. Теперь в комплекте к loghouse идёт панель для Grafana, которая отображает все основные метрики, такие как:
- количество работающих fluentd;
- количество отправляемых событий в ClickHouse;
- размер свободного буфера в процентах.
Код панели для Grafana можно увидеть в
You must be registered for see links
.Панель для ClickHouse сделана на основе
You must be registered for see links
— от f1yegor, за что автору большое спасибо.Как видно, в панели отображается количество подключений к ClickHouse, использование буфера, активность фоновых задач и количество слияний. Этого вполне достаточно для понимания состояния системы:
Панель для fluentd показывает активные экземпляры fluentd. Это особенно критично для тех, кто совсем не хочет/не может терять логи:
Кроме статуса pod'ов, в панели видна нагрузка на очередь отправки логов в ClickHouse. По очередям можно понять, справляется ClickHouse с нагрузкой или уже нет. В случаях, когда лог нельзя терять, этот параметр тоже становится критичным.
Примеры панелей заточены под нашу поставку Prometheus Operator, однако легко модифицируются через переменные в настройках.
Наконец, в рамках работ по мониторингу loghouse мы собрали актуальный Docker-образ с релизом
You must be registered for see links
0.1.0 от Percona Labs, так как автор
You must be registered for see links
забросил свой репозиторий.Планы на будущее
- Сделать возможным развертывание кластера ClickHouse в Kubernetes.
- Сделать работу с выборкой логов асинхронной и вынести её из Ruby-части бэкенда.
- В Ruby-приложении есть известные узкие места, над исправлением которых мы работаем.
- Возможно, частично переписать бэкенд на Go.
- Сделать фильтрацию логов.
Вместо заключения
Приятно видеть, что проект loghouse нашёл свою аудиторию, не только завоевав звёздочки в GitHub (600+), но и побудив реальных пользователей рассказывать о своих успехах и проблемах.
Создав loghouse более 2 лет назад, мы не были уверены в его перспективах, ожидая, что рынок и/или Open Source-сообщество предложат лучшие решения. Однако на сегодняшний день видим, что это жизнеспособный путь, который мы сами по-прежнему выбираем и используем на множестве обслуживаемых Kubernetes-кластеров.
Будем рады любому содействию в улучшении и развитии loghouse. Если вам чего-то не хватает в loghouse — пишите в комментариях. Также мы, конечно, будем рады активности на
You must be registered for see links
.P.S.
Читайте также в нашем блоге:
- «
You must be registered for see links»;
- «
You must be registered for see links».