Вопрос или проблема
Наш контейнер создает файлы журналов в /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
-
Вывод логов в stdout: В первую очередь, следует настроить ваши контейнеры таким образом, чтобы логи отправлялись в стандартный поток вывода (stdout). Это позволяет Kubernetes эффективно управлять логами и упрощает их сбор.
-
Использование Fluent Bit для потоковой передачи логов: Если необходимо сохранять логи на файловой системе пода, но также передавать их в Azure Log Analytics, вы можете применить Fluent Bit:
- Конфигурация Fluent Bit: Fluent Bit поддерживает отправку логов в Azure Log Analytics. Для этого он предлагает выход "azure" (более подробная информация доступна здесь).
- Использование входа
tail
: Конфигурацияtail
позволяет Fluent Bit отслеживать изменения в лог-файлах. Таким образом, Fluent Bit будет считывать и обрабатывать логи с файловой системы пода (инструкция).
-
Деплой Fluent Bit как DaemonSet: Добавьте Fluent Bit в вашем кластере AKS через DaemonSet:
- Создание DaemonSet: Позволяет развернуть копию Fluent Bit на каждом узле кластера, что обеспечит сбор логов с каждого пода. Это достигается за счет монтирования необходимых директорий через VolumeMount, чтобы Fluent Bit имел доступ к лог-файлам.
-
Настройка 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, позволяя команде принять меры на основе данных, полученных в реальном времени.