- PVSM.RU - https://www.pvsm.ru -
Обслуживая множество инсталляций Kubernetes в проектах разного масштаба, мы столкнулись с проблемой сбора и просмотра логов со всех контейнеров кластера. Изучив имеющиеся решения, пришли к необходимости создания нового — разумного в потреблении ресурсов и дискового пространства, а также предлагающего удобный интерфейс для просмотра логов в реальном времени с возможностью их фильтрации по нужным критериям.
Так родился проект loghouse [1], и я рад представить его альфа-версию DevOps-инженерам и системным администраторам, которым знакомы обозначенные проблемы.
В основу loghouse была взята замечательная столбцовая СУБД с открытым кодом — ClickHouse [2], — за что отдельное спасибо коллегам из компании Яндекс. Как легко догадаться, это же обстоятельство стало причиной для названия нового проекта. Ориентированность ClickHouse на Big Data и соответствующие оптимизации в производительности и подходе к хранению данных — жизненно необходимое условие для сборщика логов Kubernetes, в котором мы нуждались.
Другим важным компонентом текущей реализации loghouse является fluentd [3] — Open Source-проект при фонде CNCF, который, обеспечивая хорошую производительность (10 тысяч записей в секунду при занятых в памяти 300 Мб), помогает в сборе и обработке логов, а также их последующей отправке в ClickHouse.
Наконец, поскольку решение ориентировано на Kubernetes, в нём используются его базовые механизмы, позволяющие интегрировать различные компоненты loghouse в единую систему, которую легко и быстро разворачивать в кластере.
Русскоязычная документация [4] проекта объясняет суть:
На каждый узел кластера Kubernetes устанавливается под с fluentd для сбора логов. Технически для этого в Kubernetes создается DaemonSet, который имеет tolerations для всех возможных taints и попадает на все узлы кластера. Каталоги с логами со всех хост-систем монтируются в поды fluentd из этого DaemonSet, где за ними «наблюдает» служба fluentd. Для всех логов Docker-контейнеров применяется фильтр kubernetes_metadata [5], который собирает дополнительную информацию о контейнерах из Kubernetes API. После этого данные преобразуются с помощью фильтра record_modifier [6]. После преобразования данных они попадают в fluentd output plugin, который вызывает расположенную в контейнере с fluentd консольную утилиту clickhouse-client [7] для записи данных в ClickHouse.
Важное архитектурное замечание состоит в том, что на данный момент поддерживается запись в единственный экземпляр СУБД ClickHouse — Deployment, который по умолчанию попадает на случайный узел K8s. Выбрать конкретный узел для его размещения можно с помощью nodeSelector и tolerations. В дальнейшем мы планируем реализовать и другие варианты инсталляции (с экземплярами ClickHouse на каждом узле кластера и в виде кластера ClickHouse).
Пользовательская часть loghouse, которую мы называем loghouse-dashboard, состоит из двух компонентов:
Интерфейс оформлен в стиле Papertrail:
Среди имеющихся фич — выбор периода (за указанные «от и до» или последний час, день и т.п.), бесконечная прокрутка записей, сохранение произвольных запросов, ограничение доступа пользователям по заданным пространствам имен Kubernetes, экспорт результатов текущего запроса в CSV.
Официальный статус — альфа-версия, а сами мы используем loghouse в production второй месяц. Для установки loghouse потребуется наличие Helm и в простейшем случае:
# helm repo add loghouse https://flant.github.io/loghouse/charts/
# helm fetch loghouse/loghouse --untar
# vim loghouse/values.yaml
# helm install -n loghouse loghouse
(Подробнее см. в документации [4].)
После установки будет поднят веб-интерфейс, доступный по заданному в конфиге values.yaml
адресу (loghouse_host
) с базовой аутентификацией в соответствии с параметром auth
из того же values.yaml
.
Среди запланированных улучшений в loghouse:
Более подробный план появится в ближайшее время в виде issues [8] проекта на GitHub.
Исходный код loghouse опубликован на GitHub [1] под свободной лицензией Apache License 2.0. Как и в случае с dapp [9], мы приглашаем DevOps-инженеров и Open Source-энтузиастов к участию в проекте — тем более, что он ещё очень молод и посему вдвойне нуждается в «активном» взгляде со стороны. Задавайте вопросы (можно прямо здесь в комментариях), указывайте на проблемы [8], предлагайте улучшения [10]. Спасибо за внимание!
Читайте также в нашем блоге:
Автор: Wimbo
Источник [14]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/open-source/267166
Ссылки в тексте:
[1] loghouse: https://github.com/flant/loghouse
[2] ClickHouse: https://github.com/yandex/ClickHouse
[3] fluentd: https://www.fluentd.org/
[4] Русскоязычная документация: https://github.com/flant/loghouse/tree/master/docs/ru
[5] kubernetes_metadata: https://github.com/fabric8io/fluent-plugin-kubernetes_metadata_filter
[6] record_modifier: https://github.com/repeatedly/fluent-plugin-record-modifier
[7] clickhouse-client: https://clickhouse.yandex/docs/en/interfaces/cli.html
[8] issues: https://github.com/flant/loghouse/issues
[9] dapp: https://github.com/flant/dapp
[10] улучшения: https://github.com/flant/loghouse/pulls
[11] Официально представляем dapp — DevOps-утилиту для сопровождения CI/CD: https://habrahabr.ru/company/flant/blog/333682/
[12] Собираем Docker-образы для CI/CD быстро и удобно вместе с dapp (обзор и видео): https://www.pvsm.ruhttp://htthttps://habrahabr.ru/company/flant/blog/324274/
[13] Наш опыт с Kubernetes в небольших проектах: https://habrahabr.ru/company/flant/blog/331188/
[14] Источник: https://habrahabr.ru/post/341386/
Нажмите здесь для печати.