☸️ Как мониторить логи Kubernetes подов в режиме реального времени с помощью Stern |

☸️ Как мониторить логи Kubernetes подов в режиме реального времени с помощью Stern

Мануал

Stern – это инструмент с открытым исходным кодом, который упрощает передачу логов Kubernetes в режиме реального времени на ваш терминал.

Вы можете использовать Stern для одновременного мониторинга логов из нескольких контейнеров, что дает вам комбинированное представление об активности внутри подов.

Зачем использовать Stern?

Kubectl предлагает встроенную фильтрацию логов с помощью команды kubectl logs.

Хотя это может хорошо работать в простых случаях, в ней отсутствует поддержка агрегирования логов из нескольких источников с последующей фильтрацией результатов.

Это может сделать его громоздким в использовании, когда вам нужно контролировать несколько подсистем или вы работаете с подробными данными.

Stern предлагает опыт работы с логами Kubernetes с первоклассной поддержкой нескольких подов и контейнеров.

Каждый контейнер в потоке логов имеет уникальную окраску, поэтому вы можете быстро идентифицировать строки, прокручиваемые перед вами.

Stern позволяет выбирать контейнеры для включения в логи с помощью сложных запросов, построенных на основе регулярных выражений.

Также есть встроенные возможности фильтрации для выбора логов на основе временной метки, статуса контейнера и селектора Kubernetes.

В этой статье мы покажем, как использовать все эти возможности для ускорения доступа к логам Kubernetes.

Начало работы

Stern распространяется в виде предварительно скомпилированных бинарных файлов для Windows, macOS и Linux на странице релизов проекта на GitHub.

Выберите подходящую загрузку для вашей системы и добавьте двоичный файл в PATH.

Пользователи macOS могут выбрать установку через Homebrew, выполнив команду brew install stern.

Stern использует существующие конфигурационные файлы Kubernetes для подключения к кластеру.

По умолчанию он загружает .kube/config.

Используйте флаг –kubeconfig или установите переменную окружения KUBECONFIG, если вам нужно изменить этот путь.

Контексты Kubernetes также поддерживаются без проблем.

Добавьте флаг –context, чтобы указать конкретный контекст в текущем загруженном файле конфигурации.

Вы также можете использовать флаг —namespace, чтобы вручную выбрать пространство имен в вашем кластере.

Stern будет отправлять в tail только логи от объектов в указанном контексте и пространстве имен; флаг –all-namespaces можно использовать для потоковой передачи логов со всего кластера.

Базовое использование

Основной синтаксис Stern требует только одного аргумента:

stern api-server

Введите имя пода для потоковой передачи логов, происходящих в контейнерах этого пода.

Однако такое использование не раскрывает истинных возможностей Stern: имя пода – это только один из примеров запроса Pod.

Запросы подов

Stern использует запросы пода для определения потоков логов, которые необходимо вывести на поверхность.

Запросы представляют собой регулярные выражения, поэтому вы можете составлять расширенные подборки подов, используя стандартный синтаксис.

Приведенный выше пример stern api-server будет соответствовать любому поду, содержащему api-server в своем имени.

Если вы измените это на stern .*-server, вы увидите логи, исходящие от всех ваших Pod, имена которых заканчиваются на -server.

Это позволяет быстро собирать потоки логов, которые объединяют строки из нескольких компонентов в вашем стеке.

Запросы влияют только на выбранные поды.

Stern автоматически включает логи из всех контейнеров в этих подах.

Вы можете управлять этим с помощью дополнительного флага –container, который принимает другой regex, определяющий допустимые имена контейнеров.

stern .*-server --container .*-0

Аналогично, вы можете исключить определенные контейнеры с помощью флага –exclude-container и символа regex:

stern .*-server --exclude-container .*-helper

Также поддерживаются селекторы меток.

Установите флаг –selector, указав в нем регекс, определяющий метки, по которым будут сопоставляться поды.
По умолчанию это значение равно .*, включая все поды, соответствующие исходному запросу.
stern .*-server --selector app-version=v1.*

Фильтрация на основе состояния контейнера

По умолчанию Stern показывает только логи запущенных контейнеров.

Используйте флаг –container-state, чтобы получить строки, записанные контейнерами в другом состоянии.

Поддерживаются параметры running, waiting и terminated:

# Show logs from stopped containers
stern .*-server --container-state terminated

Фильтрация отдельных строк логов

После того как вы выбрали подходящий набор подов и контейнеров, можно переходить к фильтрации фактических данных журнала.

Stern предоставляет вам несколько опций, которые помогут вам уменьшить ненужный мусор и сосредоточиться на значимых данных:

–since – Получить логи, записанные в пределах относительных временных рамок, удобных для чтения человеком, например, 5 м или 1 ч.
–tail – Количество строк от конца логов, которые нужно показать. По умолчанию -1, при этом показываются все логи.
–exclude – Исключить строки логов, соответствующие данному регулярному выражению. Вы можете использовать этот флаг несколько раз; условия будут объединены как логическое предложение “AND”.

Вот пример получения ограниченного набора последних значимых логов из веб-службы:

stern web-server --since 1h --tail 100 --exclude .*GET /robots.txt.*

Заключение

Stern – это удобный инструмент Kubernetes, который делает логи Pod более полезными и доступными.

Вы можете легко следить за несколькими подами и контейнерами благодаря цветному выводу, сложным селекторам и настраиваемым форматам вывода.

см. также:

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий