Как получить доступ к пользовательским логам контейнера в Azure Kubernetes?

Вопрос или проблема

Наш контейнер создает файлы журналов в /var/appname/app1/java log и другие несколько файлов журналов. В процессе разработки мы подключались к контейнеру напрямую и получали доступ к файлу журнала с помощью привязки томов. Можете ли вы предложить, как справиться с этим в Azure Kubernetes AKS? Раздел журналов в мониторинге показывает только стандартные журналы.

Я могу получить доступ к журналам с помощью команды kubectl или с использованием томов. Но нам нужно, чтобы это было видно в разделе журналов портала Azure Kubernetes, чтобы мы могли видеть ежедневную статистику.

Можете ли вы, пожалуйста, предложить, как это сделать?

Официальная документация содержит несколько рекомендаций по отладке работающих подов:

Просмотр журналов подов: выполняя kubectl logs ${POD_NAME} ${CONTAINER_NAME} или kubectl logs --previous ${POD_NAME} ${CONTAINER_NAME}, если ваш контейнер ранее завершился аварийно.

Отладка с использованием container exec: запуск команд внутри конкретного контейнера с помощью kubectl exec: kubectl exec ${POD_NAME} -c ${CONTAINER_NAME} -- ${CMD} ${ARG1} ${ARG2} ... ${ARGN}.

Отладка с использованием эфемерного контейнера: эфемерные контейнеры полезны для интерактивной отладки, когда kubectl exec недостаточно из-за аварийного завершения контейнера или отсутствия утилит отладки в образе контейнера. Пример можно найти здесь.

Отладка через оболочку на узле: если ни один из этих подходов не работает, вы можете найти машину-хост, на которой работает под, и подключиться к ней по SSH.

AKS также помогает с этим, предлагая Container Insights:

> Container Insights предоставляют видимость производительности, собирая метрики памяти и процессора из контроллеров, узлов и контейнеров, доступных в Kubernetes через API метрик. Также собираются журналы контейнеров.

Больше источников можно найти ниже:

Включение мониторинга нового кластера Azure Kubernetes Service (AKS).

Мониторинг производительности вашего кластера Kubernetes с помощью Container Insights.

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

Это запоздалый ответ, но, надеюсь, кому-то будет полезен. Kubernetes ожидает, что ваши журналы будут отправляться в stdout, а не в файл на файловой системе. Если вы устроите это в своем контейнере, они будут доступны через kubectl logs.

В случае конкретного вопроса об доступе к журналам в файловой системе пода, самым быстрым методом, вероятно, будет использование kubectl exec (https://kubernetes.io/docs/reference/kubectl/generated/kubectl_exec/) для получения интерактивной оболочки внутри пода и затем просмотреть журналы, используя ваш обычный инструментарий.

В очень специфичном случае, когда вы хотите, чтобы журналы хранились в файловой системе, но также передавались в сервис журналов AKS, я не могу полностью помочь, но могу дать несколько подсказок. Я знаю, что можно настроить FluentBit для передачи журналов непосредственно в Azure Log Analytics (https://docs.fluentbit.io/manual/pipeline/outputs/azure); также известно, что входной канал FluentBit tail (https://docs.fluentbit.io/manual/pipeline/inputs/tail) можно настроить для поиска по файловой системе. Если вы добавите FluentBit в свой под или выполните его как DaemonSet на узлах AKS и смонтируете ваш каталог журналов на узел с использованием VolumeMount, вы можете достигнуть этой цели.

Ответ или решение

Для доступа к кастомным логам контейнеров в Azure Kubernetes Service (AKS) и их отображения в разделе "Логи" на портале Azure, необходимо предпринять ряд действий, адаптированных под особенности работы Kubernetes и AKS.

Шаги для интеграции логов с Azure Log Analytics

  1. Вывод логов в stdout: В первую очередь, следует настроить ваши контейнеры таким образом, чтобы логи отправлялись в стандартный поток вывода (stdout). Это позволяет Kubernetes эффективно управлять логами и упрощает их сбор.

  2. Использование Fluent Bit для потоковой передачи логов: Если необходимо сохранять логи на файловой системе пода, но также передавать их в Azure Log Analytics, вы можете применить Fluent Bit:

    • Конфигурация Fluent Bit: Fluent Bit поддерживает отправку логов в Azure Log Analytics. Для этого он предлагает выход "azure" (более подробная информация доступна здесь).
    • Использование входа tail: Конфигурация tail позволяет Fluent Bit отслеживать изменения в лог-файлах. Таким образом, Fluent Bit будет считывать и обрабатывать логи с файловой системы пода (инструкция).
  3. Деплой Fluent Bit как DaemonSet: Добавьте Fluent Bit в вашем кластере AKS через DaemonSet:

    • Создание DaemonSet: Позволяет развернуть копию Fluent Bit на каждом узле кластера, что обеспечит сбор логов с каждого пода. Это достигается за счет монтирования необходимых директорий через VolumeMount, чтобы Fluent Bit имел доступ к лог-файлам.
  4. Настройка Azure Log Analytics: Обеспечьте корректное подключение к Azure Log Analytics:

    • Создание Workspace в Azure Log Analytics: Убедитесь, что у вас настроен правильный Workspace для сборки и анализа логов.
    • Конфигурация ключа и ID: Вам потребуется Workspace ID и ключ для авторизации в Azure Log Analytics через Fluent Bit.

Дополнительные рекомендации

  • Проверка логов через kubectl: Помимо стандартной проверки логов с помощью kubectl logs, доступна возможность использовать kubectl exec для доступа к контейнерам и проверки логов непосредственно с файловой системы.

  • Контейнерная аналитика Azure: Запустите Container Insights через Azure Monitor, чтобы получить дополнительные данные о производительности ваших подов, узлов и контроллеров.

Заключение

Эти шаги позволят вам интегрировать специальные лог-файлы контейнеров с сервисом логов Azure, обеспечивая тем самым видимость и анализ логов через Azure Portal. Это улучшит мониторинг и управление вашей инфраструктурой в AKS, позволяя команде принять меры на основе данных, полученных в реальном времени.

Оцените материал
Добавить комментарий

Капча загружается...