Логирование — это критически важный аспект работы с любым приложением в Kubernetes. Оно помогает отслеживать работоспособность и эффективность приложения, быстро устранять неисправности. Команда VK Cloud перевела статью о логах и лучших приемах логирования в среде Kubernetes.
Что такое логирование в Kubernetes
Логирование в Kubernetes — это процесс сбора и хранения данных лога, генерируемых кластером и работающими на нем приложениями. Эти данные включают в себя информацию об эффективности работы приложения, ошибки, предупреждения и другие события. Логи Kubernetes критически важны для отладки и устранения проблем в распределенной системе; разработчики, операторы и команды по информационной безопасности используют их для мониторинга и поддержания работоспособности приложения.
Как работает логирование в Kubernetes
Логи Kubernetes генерируют разные компоненты кластера Kubernetes: API-сервер Kubernetes, kubelet, среда запуска контейнеров и приложения, работающие в кластере. Эти логи собирает и агрегирует агент логирования, который работает как под Kubernetes. Он отправляет логи в централизованное хранилище для хранения и анализа.
Чаще всего в качестве агента логирования в Kubernetes используется Fluentd. Это Open-Source-приложение для сбора данных, которое собирает, преобразует и направляет данные логов в разные системы, в том числе Elasticsearch, Splunk и Kafka. Другие популярные агенты логирования — это Logstash и Fluent Bit.
На этой схеме показано, как работает логирование в Fluentd:
Современные методы логирования в Kubernetes
Вот несколько советов по логированию в Kubernetes:
- Используйте централизованное решение логирования. Такое решение позволяет централизованно хранить и анализировать логи. С ним проще устранять неисправности и отслеживать эффективность работы приложения. Наиболее популярные централизованные решения логирования в Kubernetes — это Elasticsearch, Splunk и Loggly.
- Используйте структурированное логирование. Оно форматирует сообщения логов, придает им определенную структуру, упрощает поиск, фильтрацию и анализ данных из логов. Используйте JSON или другие структурированные форматы логирования вместо plain text — так будет проще извлекать информацию из логов.
- Не включайте в логи Kubernetes конфиденциальную информацию, например пароли, ключи API и другие учетные данные. Для защищенного хранения такой информации используйте переменные среды или секреты.
- Добавьте в логи контекстуальную информацию. Если в них есть метки времени, имя хоста и ID запроса, это упрощает корреляцию событий и устранение проблем.
- Создавайте теги для закрытой информации. Чтобы защитить конфиденциальную информацию, имеет смысл создавать для нее теги или маски. Для идентификации и маскировки конфиденциальных данных, таких как пароли, номера кредитных карт или идентифицирующие личность персональные данные (PII), можно использовать стандартизированный формат, например priv или ****.
- Используйте разные уровни логирования. Таким образом можно классифицировать сообщения логов по степени критичности или важности. Обычно логи подразделяют на DEBUG, INFO, WARNING, ERROR и CRITICAL. Используя соответствующие уровни логов, можно фильтровать и расставлять приоритеты для сообщений логов по степени значимости с точки зрения устранения проблем и отладки.
- Организуйте потоковую передачу логов на сервер логов. Советуем не полагаться сугубо на локальные файлы логов, а организовать их потоковую передачу на централизованный сервер логов или в систему управления логами. Таким образом сбор и хранение логов осуществляется централизованно, упрощая поиск, анализ и длительное хранение логов. К популярным серверам и системам управления логами относятся Elasticsearch, Splunk и Graylog.
- Включите ротацию логов. Если настроить ротацию логов, файлы логов перестанут увеличиваться до бесконечности и занимать слишком много дискового пространства. Указав параметры ротации логов, можно контролировать размер файла лога, количество сохраняемых файлов и периодичность ротации. Такой подход обеспечивает эффективную работу с логами и предотвращает проблемы с дисковым пространством.
kubectl logs
— это стандартная команда Kubernetes для извлечения логов; но есть еще несколько Open-Source-CLI-инструментов, поддерживающих дополнительные функции и улучшенные возможности сбора логов. Один из таких инструментов — это kubetail, с помощью которого можно просматривать логи сразу с нескольких подов. Вот несколько Open-Source-CLI-инструментов, с помощью которых можно собирать логи в Kubernetes:- Kubetail. Простая утилита, с помощью которой можно просматривать логи с нескольких подов в кластере Kubernetes. Она собирает логи с разных подов в кластере Kubernetes и в потоковом режиме направляет их на терминал, позволяя в реальном времени одновременно просматривать логи из разных источников. Kubetail особенно хорошо подходит для устранения неисправностей в распределенных системах или для мониторинга работы приложения в нескольких подах.
- Stern. Еще один мощный инструмент для просмотра логов, разработанный специально для Kubernetes. Он позволяет просматривать логи из разных подов и контейнеров в кластере, подсвечивая результаты разными цветами, чтобы в них проще было разобраться. Stern также поддерживает фильтры на основе регулярных выражений, помогающие сосредотачиваться на конкретных сообщениях или паттернах лога.
- Kail. Это CLI-инструмент, поддерживающий потоковую передачу и просмотр логов из разных подов в кластере Kubernetes. Он выводит результаты как в исходном формате, так и в JSON, что обеспечивает определенную гибкость для разных сценариев использования. Kail также поддерживает фильтрацию логов по меткам или пространствам имен, позволяя по необходимости сузить результаты поиска по логам.
- Logcli. Он входит в состав экосистемы Loki. Это интерфейс командной строки для выполнения запросов к логам, хранящимся в Loki, горизонтально масштабируемой системе агрегирования логов. Logcli позволяет искать и извлекать логи по разным параметрам, в том числе по меткам, диапазонам времени и уровням логов. Он подойдет, если вы используете централизованное решение логирования на основе Loki и хотите эффективно выполнять запросы и анализ логов.
Эти Open-Source-CLI-инструменты делают сбор и анализ логов в Kubernetes более гибким благодаря дополнительным функциям. В зависимости от конкретных требований можно выбрать инструмент, который лучше всего подходит под ваши потребности и хорошо интегрируется с вашей инфраструктурой логирования.
Если вы используете сторонние инструменты, убедитесь, что они попали к вам из надежных источников, и изучите инструкции по установке и эксплуатации в документации к ним.
В среде Kubernetes есть разные команды для проверки логов. Вот список команд, которые можно использовать с kubetail для проверки логов Kubernetes:
1. Для просмотра логов из конкретного пода:
kubetail <pod-name>
Эта команда выполняет потоковую передачу и отображение логов из конкретного пода. Можно указать несколько имен для одновременного просмотра логов из нескольких подов.
2. Для просмотра логов из подов, соответствующих селектору меток:
kubetail -l <label-selector>
Эта команда выполняет потоковую передачу и отображение логов со всех подов, соответствующих указанному селектору меток.
3. Для просмотра логов с подов в конкретном пространстве имен:
kubetail -n <namespace>
Эта команда выполняет потоковую передачу и отображение логов со всех подов из указанного пространства имен.
4. Для просмотра логов из нескольких подов с помощью Wildcard-выражений:
kubetail <pod-name-1> <pod-name-2> ...
С помощью этой команды можно указать имена нескольких подов или использовать Wildcard-выражения, чтобы просматривать логи из нескольких подов. Например:
kubetail my-app-*
Таким образом можно просматривать логи со всех подов, которые начинаются с my-app-.
5. Для добавления в результаты меток времени:
kubetail -t <pod-name>
С помощью этой команды логи отображаются с метками времени. Так можно увидеть, когда были созданы сообщения лога.
6. Для прекращения просмотра логов с конкретного пода:
kubetail --stop <pod-name>
Эта команда останавливает потоковую передачу и отображение логов из конкретного пода.
Это распространенные команды, которые можно использовать с kubetail для эффективного просмотра логов из нескольких подов в кластере Kubernetes. Прежде чем использовать их, обязательно установите и настройте kubetail. Инструкции по установке и информацию о дополнительных функциях можно найти в его документации.
При использовании kubetail можно также просматривать логи компонентов панели управления Kubernetes, указав имена подов. Вот некоторые команды:
1. Чтобы просмотреть логи API-сервера Kubernetes:
kubetail -n kube-system kube-apiserver-<node-name>
Замените
<node-name>
на фактическое имя ноды, на которой работает под API-сервера. Эта команда позволяет просматривать логи API-сервера.2. Чтобы просмотреть логи диспетчера контроллера Kubernetes:
kubetail -n kube-system kube-controller-manager-<node-name>
Замените
<node-name>
на имя ноды, на которой работает под диспетчера контроллера. Эта команда позволяет просматривать логи диспетчера контроллера.3. Чтобы просмотреть логи планировщика Kubernetes:
kubetail -n kube-system kube-scheduler-<node-name>
Замените
<node-name>
на имя ноды, на которой работает под планировщика. Эта команда позволяет просматривать логи планировщика.
4. Чтобы просмотреть логи кластера etcd:
kubetail -n kube-system etcd-<node-name>
Замените
<node-name>
на имя ноды, на которой работает под etcd. Эта команда позволяет просматривать логи кластера etcd.С помощью флага
-n kube-system
укажите пространство имен, в котором обычно развертываются компоненты панели управления.Просматривая логи этих компонентов панели управления, можно отслеживать их действия, выявлять неисправности или ошибки и получать аналитику по работе кластера Kubernetes.
Заключение
Логирование в Kubernetes — это критически важный аспект работы приложений. К передовым приемам логирования в среде Kubernetes относятся централизованное решение логирования, структурированное логирование, грамотная работа с конфиденциальной информацией и добавление контекстуальных данных. Применяя эти приемы, можно обеспечить защищенное хранение логов Kubernetes, удобство поиска и анализа и быстрое устранение проблем и неисправностей.
Вы прямо сейчас можете воспользоваться Kubernetes от VK Cloud. Для тестирования мы начисляем новым пользователям 3000 бонусных рублей и будем рады вашей обратной связи.
Stay tuned
Присоединяйтесь к телеграм-каналу «Вокруг Kubernetes», чтобы быть в курсе новостей из мира K8s: регулярные дайджесты, полезные статьи, а также анонсы конференций и вебинаров.
Делимся результатами исследования State of Kubernetes — о том, как компании работают с K8s в России.