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


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

Внимание

Юридические условия, применимые к функциям Azure, которые находятся в состоянии бета-версии, предварительной версии или иным образом еще не выпущены в общедоступной версии, см. на странице Дополнительные условия использования предварительных версий в Microsoft 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-preview

Внимание

Предварительные версии функций 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 CLI.

az aks update --resource-group={resource_group} --name={cluster_name} --enable-azure-monitor-app-monitoring 

Подсказка

Кластеры AKS можно подготовить к этой функции во время создания кластера. Дополнительные сведения см. в статье "Подготовка кластера во время создания кластера AKS".

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

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

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

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

Подсказка

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

apiVersion: monitor.azure.com/v1
kind: Instrumentation
metadata:
  name: default
  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.settings.autoInstrumentationPlatforms: одно или несколько значений на основе языков, на которых выполняются модули pod.
  • spec.destination.applicationInsightsConnectionString: строка подключений ресурса Application Insights.

Подсказка

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

Используйте онбординг для каждого развертывания, чтобы обеспечить инструментирование развертываний с определенными языками или направление телеметрии в отдельные ресурсы 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. Создайте конфигурации подключения для каждого развертывания , которые переопределяют конфигурацию по умолчанию для определенных ресурсов.

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

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

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

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

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

Убедитесь, что у вас нет инструментированных развертываний. Чтобы неинструментировать инструментированное развертывание, удалите связанный пользовательский ресурс инструментирования и запустите kubectl rollout restart его в развертывании. Затем выполните следующую команду.

az aks update --resource-group={resource_group} --name={cluster_name} --disable-azure-monitor-app-monitoring 

Примечание.

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

Аннотации

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

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

  • Ява: 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 только для таких микрослужб.

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

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

Внимание

Чтобы избежать ненужного дублирования и увеличения затрат, включите журналы в 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

Следующие шаги