Поделиться через


Автоинструментация для службы Azure Kubernetes (предварительная версия)

Это важно

Ознакомьтесь с Дополнительными условиями использования для предварительных версий Microsoft Azure, чтобы узнать юридические условия, применимые к функциям Azure, которые находятся в статусе бета, предварительного просмотра или иначе еще не выпущены в общий доступ.

В этом руководстве описывается, как настроить Azure Monitor Application Insights для рабочих нагрузок Службы Azure Kubernetes (AKS) без изменения исходного кода.

Мы рассмотрим установку расширения Azure CLI для aks-preview, регистрации флага компонента AzureMonitorAppMonitoringPreview, подготовки кластера, подключения развертываний и перезапуска развертываний. Эти шаги приводят к тому, что в "pods" приложения автоматически внедряется дистрибутив Azure Monitor OpenTelemetry для создания телеметрии. Дополнительные сведения об автоинструментации и ее преимуществах см. в статье "Что такое автоинструментация для Azure Monitor Application Insights?".

Предпосылки

Предупреждение

  • Эта функция несовместима с пулами узлов Windows (любой архитектуры) и Linux Arm64.

Установка расширения Azure CLI для предварительной версии AKS

Это важно

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

aks-preview Установите расширение:

az extension add --name aks-preview

Обновите до последней версии расширения:

az extension update --name aks-preview

Убедитесь, что установленная версия Azure CLI соответствует требованию в разделе предварительных требований :

az version

Если версия не соответствует требованию, выполните описанные ранее действия, чтобы установить и обновить Azure CLI.

Регистрация флага компонента AzureMonitorAppMonitoringPreview

# Log into Azure CLI
az login

# Register the feature flag for Azure Monitor App Monitoring in preview
az feature register --namespace "Microsoft.ContainerService" --name "AzureMonitorAppMonitoringPreview"

# List the registration state of the Azure Monitor App Monitoring Preview feature
# It could take hours for the registration state to change from Registering to Registered
az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/AzureMonitorAppMonitoringPreview')].{Name:name,State:properties.state}"

# Once the feature shows as Registered in the prior step, re-register the Microsoft.ContainerService provider to apply the new feature settings
az provider register --namespace "Microsoft.ContainerService"

# Check the registration state of the Microsoft.ContainerService provider
az provider show --namespace "Microsoft.ContainerService" --query "registrationState"

Подготовка кластера

Вы можете подготовить кластер с помощью портала Azure или Azure CLI.

Используйте портал Azure для подготовки кластера.

  1. Выберите область "Монитор ".
  2. Установите флажок "Включить мониторинг приложений".
  3. Нажмите кнопку "Просмотр и активация".

Снимок экрана портала Azure, показывающий, как включить мониторинг приложений для кластера AKS в параметрах монитора вместе с параметрами Prometheus, Grafana и Log Analytics.

Развертывание на борту

Развертывания можно подключить двумя способами: на уровне пространства имен или по одному развертыванию. Используйте метод на уровне пространства имен для подключения всех развертываний в пространстве имен. Для выборочного или вариативной настройки включения в нескольких развертываниях используйте подход на уровне каждого развертывания.

Подключение по всему пространству имен

Используйте портал Azure для настройки развертывания в пределах пространства имен.

  1. В области "Пространства имен" выберите пространство имен для инструментирования.

Представление портала Azure с пространствами имен и кнопкой мониторинга приложений.

  1. Выберите "Мониторинг приложений".

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

  1. Выберите языки для инструментирования.
  2. Оставьте поле "Выполнить перезапуск всех развертываний" неотмеченным. Позже следует перезапустить развертывания вручную.
  3. Выберите и настройте.

Представление портала Azure, показывающее конфигурацию мониторинга приложений для пространства имен, где для автоинструментации выбраны как Node.js, так и Java.

  1. Проследите за ходом выполнения мониторинга приложений и дождитесь его завершения.

Замечание

  • Прежде чем изменения вступили в силу, необходимо перезапустить затронутые развертывания.
  • Если вы наблюдаете сбои в прогрессе, вручную перезапустите развертывания.

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

  1. Вернитесь к разделу "Мониторинг приложений ".
  2. Проверьте состояние инструментированного пространства имен для каждого пространства имен в развертывании.

Снимок экрана портала Azure, на котором показаны развертывания как инструментированные.

Настройка при каждом развертывании

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

  1. Создайте уникальный настраиваемый ресурс инструментирования для каждого сценария. Избегайте использования имени default, которое используется для подключения на уровне пространства имен.

    Создайте пользовательские ресурсы для инструментирования, чтобы настроить Application Insights в каждом неймспейсе. Обновите applicationInsightsConnectionString, чтобы она содержала строку подключения вашего ресурса Application Insights.

    Подсказка

    Вы можете получить строку подключения на странице обзора вашего ресурса Application Insights.

    apiVersion: monitor.azure.com/v1
    kind: Instrumentation
    metadata:
      name: cr1
      namespace: mynamespace1
    spec:
      settings:
        autoInstrumentationPlatforms: []
      destination: # required
        applicationInsightsConnectionString: "InstrumentationKey=11111111-1111-1111-1111-111111111111;IngestionEndpoint=https://eastus2-3.in.applicationinsights.azure.com/;LiveEndpoint=https://eastus2.livediagnostics.monitor.azure.com/"
    

    Как минимум, требуется следующая конфигурация:

    • spec.destination.applicationInsightsConnectionString: строка подключений ресурса Application Insights.
  2. Свяжите каждое развертывание с соответствующим пользовательским ресурсом с помощью заметок. Аннотация переопределяет язык, установленный в пользовательском ресурсе.

    Это важно

    Чтобы избежать добавления их в заметки развертывания по ошибке, добавьте заметки на spec.template.metadata.annotations уровне развертывания.

    Примеры.

    • Ява: instrumentation.opentelemetry.io/inject-java: "cr1"
    • Node.js: instrumentation.opentelemetry.io/inject-nodejs: "cr1"

    Размещение заметок должно выглядеть следующим образом.

    apiVersion: apps/v1
    kind: Deployment
    ...
    spec:
      template:
        metadata:
          annotations:
            instrumentation.opentelemetry.io/inject-nodejs: "cr1"
    

Подсказка

Перезапустите развертывания , чтобы параметры вступили в силу.

Подключение в смешанном режиме

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

  1. Реализуйте подключение по всему пространству имен для определения конфигурации по умолчанию.
  2. Создайте конфигурации подключения для каждого развертывания , которые переопределяют конфигурацию по умолчанию для определенных ресурсов.

Перезапуск развертывания

Развертывание можно перезапустить с помощью портала Azure или средства командной строки Kubernetes.kubectl

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

kubectl rollout restart deployment <deployment-name> -n mynamespace1

Эта команда приводит к тому, что автоинструментация вступает в силу, включая Application Insights. Вы можете проверить, включен ли Application Insights, создав трафик и перейдя к ресурсу. Приложение представлено как облачная роль в возможностях Application Insights. Вы можете использовать все возможности Application Insights, кроме динамических метрик и функций анализа кода Application Insights. Дополнительные сведения о доступных возможностях Application Insights см. здесь.

Удаление автоматической инструментализации для AKS

Вы можете удалить автоинструментацию AKS с помощью портала Azure или Azure CLI.

Подсказка

  • Удаление автоинструментации AKS с помощью портала Azure или Azure CLI удаляет его из всего кластера.
  • Чтобы удалить автоинструментирование из одного пространства имен, удалите связанный пользовательский ресурс инструментирования (CR). (например, kubectl delete instrumentation <instrumentation-name> -n <namespace-name>)

Используйте портал Azure, чтобы снять автоматическую инструментализацию с кластера.

  1. Выберите раздел "Монитор ".
  2. Снимите флажок "Включить мониторинг приложений ".
  3. Выберите "Просмотр и включение".

Представление портала Azure области параметров монитора для кластера AKS с возможностями мониторинга.

Annotations

Отключение автоинструментации

Следующие аннотации отключают автоинструментацию.

  • Ява: instrumentation.opentelemetry.io/inject-java

  • Node.js: instrumentation.opentelemetry.io/inject-nodejs

    instrumentation.opentelemetry.io/inject-java: "false"
    

Чтобы включить автоинструментацию после отключения.

instrumentation.opentelemetry.io/inject-java: "true"

Размещение заметок должно выглядеть следующим образом.

apiVersion: apps/v1
kind: Deployment
...
spec:
  template:
    metadata:
      annotations:
        instrumentation.opentelemetry.io/inject-java: "false"

Включение журналов в Application Insights

Вы можете выбрать сбор журналов в Application Insights в качестве дополнения или замены журналов Container Insights.

Включение логов в Application Insights позволяет получить коррелированные логи, что обеспечивает пользователям легкий доступ к просмотру распределенных трассировок вместе с их связанными логами. Кроме того, некоторые микрослужбы не записывают журналы в консоль, поэтому Аналитика контейнеров не может собирать их, и только инструментация Application Insights собирает эти журналы.

И наоборот, Application Insights может не иметь возможности инструментировать все микрослужбы. Например, те, кто использует NGINX или неподдерживаемые языки. Пользователи могут использовать журналы контейнеров только для таких микрослужб.

Вы также можете включить оба источника для журналов, если у вас есть несколько команд наблюдения, например инженеры инфраструктуры, использующие Container Insights, и разработчики, использующие Application Insights.

Просмотрите конфигурации ведения журнала консоли в коде приложения, чтобы определить, следует ли включить журналы Application Insights, журналы контейнеров или оба варианта. Если вы отключите сбор журналов контейнеров, см. раздел Фильтрация журналов контейнеров с помощью ConfigMap.

Это важно

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

Используйте следующую аннотацию для включения журналов в Application Insights

  • monitor.azure.com/enable-application-logs

Это важно

Чтобы избежать добавления их в заметки развертывания по ошибке, добавьте заметки на spec.template.metadata.annotations уровне развертывания.

monitor.azure.com/enable-application-logs: "true"

Подготовьте кластер при создании кластера AKS

Кластеры AKS можно подготовить к этой функции во время создания кластера. Выполните следующую команду Azure CLI, если вы предпочитаете, чтобы кластер был предварительно создан во время создания. Мониторинг приложений не включается автоматически при подготовке кластера. Необходимо развернуть приложение и подключить приложение к этой функции.

az aks create --resource-group={resource_group} --name={cluster_name} --enable-azure-monitor-app-monitoring --generate-ssh-keys

Часто задаваемые вопросы

Автоинструментация для службы Azure Kubernetes

Поддерживает ли автоинструментация службы Azure Kubernetes (AKS) пользовательские метрики?

Если вы хотите использовать пользовательские метрики в Node.js, вручную настраивайте приложения с помощью дистрибутива Azure Monitor OpenTelemetry

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


Работает ли автоинструментация AKS с приложениями, инструментированными с помощью SDK программного обеспечения с открытым исходным кодом (OSS) OpenTelemetry?

Автоинструментация AKS может нарушить работу телеметрии, отправляемой сторонним получателям через SDK OpenTelemetry с открытым исходным кодом.

Может ли AKS автоинструментирование сосуществовать с ручным инструментированием?

Автоинструментация AKS предназначена для совместного использования с обоими ручными вариантами инструментирования: классическим пакетом SDK API Application Insights и дистрибутивом OpenTelemetry.

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

См. эту диаграмму, чтобы определить, имеет ли приоритет автоинструментация или ручное инструментирование.

Language Приоритет
Node.js Ручное инструментирование
Ява Автоинструментирование

Как убедиться, что я использую последние и самые безопасные версии дистрибутива Azure Monitor OpenTelemetry?

Уязвимости, обнаруженные в дистрибутиве Azure Monitor OpenTelemetry, определяются по приоритету, исправлены и выпущены в следующей версии.

Автоинструментация AKS внедряет последнюю версию дистрибутива OpenTelemetry Azure Monitor в поды приложений каждый раз при изменении или перезапуске развертывания.

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

Как узнать больше о дистрибутиве OpenTelemetry в Azure Monitor?

Эта функция обеспечивает автоинструментацию путем внедрения дистрибутива Azure Monitor OpenTelemetry в поды приложений.

Для Java эта функция интегрирует автономный дистрибутив Azure Monitor OpenTelemetry для Java. Дополнительные сведения о двоичном инструментировании Java см. в нашей документации по дистрибутиву Java.

Для Node.js мы внедряем двоичный файл для автоинструментации на основе дистрибутива OpenTelemetry от Azure Monitor. Дополнительные сведения см. в документации по дистрибутивамNode.js. Помните, что у нас нет автономной автоинструментации для Node.js поэтому наша документация по дистрибутиву ориентирована на ручное инструментирование. Вы можете игнорировать действия по настройке на основе кода, связанные с инструментированием вручную. Однако все остальное в нашей документации по дистрибутивам, таким как параметры по умолчанию и конфигурации переменных среды, применимы к этой функции.

Где можно получить дополнительные сведения об автоинструментации для AKS?

Дополнительные сведения см. в разделе "Автоинструментация" для AKS.

Дальнейшие шаги