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


Включение мониторинга для кластеров AKS

Как описано в мониторинге Kubernetes в Azure Monitor, несколько функций Azure Monitor работают вместе, чтобы обеспечить полный мониторинг кластеров Службы Azure Kubernetes (AKS). В этой статье описывается, как включить следующие функции для кластеров AKS:

  • Метрики Prometheus
  • Управляемая платформа Grafana
  • Ведение журнала контейнеров
  • Журналы контрольной плоскости

Предварительные условия

Создание рабочих областей

В следующей таблице описаны рабочие области, необходимые для поддержки функций Azure Monitor, включенных в этой статье. Если у вас ещё нет рабочей области для каждого из требуемых типов, вы можете создать их в рамках процесса подключения. См. Руководство по проектированию архитектуры рабочей области Log Analytics, чтобы узнать, сколько рабочих областей следует создать и где их разместить.

Функция Рабочая область Примечания.
Управляемый Prometheus Рабочая область Azure Monitor Если при подключении не указана существующая рабочая область Azure Monitor, будет использоваться рабочая область по умолчанию для группы ресурсов. Если рабочая область по умолчанию еще не существует в регионе кластера, одна с именем в формате DefaultAzureMonitorWorkspace-<mapped_region> будет создана в группе ресурсов с именем DefaultRG-<cluster_region>.

Contributor достаточно разрешений, чтобы включить надстройку для отправки данных в рабочую область Azure Monitor. Вам потребуется разрешение уровня Owner для подключения рабочей области Azure Monitor к Azure Managed Grafana для просмотра метрик. Для этого необходимо, чтобы пользователь, выполняющий шаг подключения, имел возможность назначить управляемой системе идентификацию Grafana роль Monitoring Reader в рабочей области Azure Monitor для выполнения запросов метрик.
Ведение журнала контейнеров
Журналы контрольной плоскости
Рабочая область Log Analytics Кластер можно подключить к рабочей области Log Analytics в другой подписке Azure в том же клиенте Microsoft Entra, но необходимо использовать Azure CLI или шаблон Azure Resource Manager. В настоящее время эту конфигурацию невозможно выполнить с помощью портал Azure.

Если вы подключаете существующий кластер к рабочей области Log Analytics в другой подписке, поставщик ресурсов Microsoft.ContainerService должен быть зарегистрирован в подписке в рабочей области Log Analytics. Дополнительные сведения см. в разделе Регистрация поставщика ресурсов.

Если вы не указываете существующую рабочую область Log Analytics, будет использоваться рабочая область по умолчанию для группы ресурсов. Если рабочая область по умолчанию еще не существует в регионе кластера, она будет создана с именем в формате DefaultWorkspace-<GUID>-<Region>.

Список поддерживаемых пар сопоставлений, используемых для рабочей области по умолчанию, см. в разделе Сопоставление регионов, поддерживаемое Container Insights. Сведения о настройке рабочей области с периметром безопасности сети см. в статье "Настройка Azure Monitor с периметром сетевой безопасности".
Управляемая платформа Grafana Рабочая область Azure Managed Grafana Свяжите рабочую область Grafana с рабочей областью Azure Monitor, чтобы сделать метрики Prometheus, собранные из кластера, доступными для панелей мониторинга Grafana.

Включение метрик Prometheus и ведения журнала контейнеров

При включении Prometheus и ведения журнала контейнера в кластере устанавливается контейнерная версия агента Azure Monitor. Эти функции можно настроить одновременно в новом или существующем кластере или включить каждую функцию отдельно.

Включите управляемую Grafana для кластера параллельно с включением сбора метрик Prometheus. См. Привязка рабочей области Grafana для получения вариантов подключения рабочей области Azure Monitor и рабочей области Azure Managed Grafana.

Предварительные условия

  • Кластер должен использовать аутентификацию с использованием управляемой учётной записи.
  • Следующие поставщики ресурсов должны быть зарегистрированы в подписке кластера и рабочей области Azure Monitor:
    • Microsoft.ContainerService
    • Microsoft.Insights
    • Microsoft.AlertsManagement
    • Microsoft.Monitor
  • Следующие поставщики ресурсов должны быть зарегистрированы в подписке рабочей области Grafana:
    • Microsoft.Dashboard

Предварительные условия

  • Проверка подлинности управляемого удостоверения по умолчанию используется в CLI версии 2.49.0 или более поздней.
  • Расширение aks-preview должно быть удалено из кластеров AKS с помощью команды az extension remove --name aks-preview.

Метрики Prometheus

-enable-azure-monitor-metrics Используйте параметр az aks create или az aks update в зависимости от того, создаете ли вы новый кластер или обновляете существующий кластер, чтобы установить надстройку метрик, которая удаляет метрики Prometheus. Это будет использовать конфигурацию, описанную в конфигурации метрик Prometheus по умолчанию в Azure Monitor. Сведения об изменении этой конфигурации см. в разделе "Настройка очистки метрик Prometheus" в управляемой службе Azure Monitor для Prometheus.

См. следующие примеры.

### Use default Azure Monitor workspace
az aks create/update --enable-azure-monitor-metrics --name <cluster-name> --resource-group <cluster-resource-group>

### Use existing Azure Monitor workspace
az aks create/update --enable-azure-monitor-metrics --name <cluster-name> --resource-group <cluster-resource-group> --azure-monitor-workspace-resource-id <workspace-name-resource-id>

### Use an existing Azure Monitor workspace and link with an existing Grafana workspace
az aks create/update --enable-azure-monitor-metrics --name <cluster-name> --resource-group <cluster-resource-group> --azure-monitor-workspace-resource-id <azure-monitor-workspace-name-resource-id> --grafana-resource-id  <grafana-workspace-name-resource-id>

### Use optional parameters
az aks create/update --enable-azure-monitor-metrics --name <cluster-name> --resource-group <cluster-resource-group> --ksm-metric-labels-allow-list "namespaces=[k8s-label-1,k8s-label-n]" --ksm-metric-annotations-allow-list "pods=[k8s-annotation-1,k8s-annotation-n]"

Пример

az aks create/update --enable-azure-monitor-metrics --name "my-cluster" --resource-group "my-resource-group" --azure-monitor-workspace-resource-id "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/my-resource-group/providers/microsoft.monitor/accounts/my-workspace"

Необязательные параметры

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

Параметр Имя и описание
Ключи аннотаций --ksm-metric-annotations-allow-list

Список разделенных запятыми ключей аннотаций Kubernetes, используемых в метрике ресурса kube_resource_annotations. Например, kube_pod_annotations — это метрика заметок для ресурса pod. По умолчанию эта метрика содержит только метки имени и пространства имен. Чтобы включить дополнительные заметки, укажите список имён ресурсов в их множественном числе и ключи заметок Kubernetes, разрешённые для них. Для каждого ресурса можно предоставить только один *, чтобы допускать любые аннотации, но это серьезно влияет на производительность. Например, pods=[kubernetes.io/team,...],namespaces=[kubernetes.io/team],....
Ключи меток --ksm-metric-labels-allow-list

Разделенный запятыми список дополнительных ключей меток Kubernetes, используемых в метрике kube_resource_labels ресурса. Например, kube_pod_labels — это метрика меток для ресурса pod. По умолчанию эта метрика содержит только метки имени и пространства имен. Для включения дополнительных меток предоставьте список имен ресурсов во множественном числе и ключи меток Kubernetes, которые вы хотите разрешить для них. Для каждого ресурса можно предоставить отдельный *, чтобы разрешить любые метки, но это может вызвать серьёзные проблемы с производительностью. Например, pods=[app],namespaces=[k8s-label-1,k8s-label-n,...],....
Правила записи --enable-windows-recording-rules

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

Примечание.

Обратите внимание, что параметры, заданные с помощью ksm-metric-annotations-allow-list и ksm-metric-labels-allow-list, можно переопределить или задать с помощью ama-metrics-settings-configmap

Журналы контейнеров

--addon monitoring Используйте параметр az aks create для нового кластера или az aks enable-addon, чтобы обновить существующий кластер и включить сбор журналов контейнеров. См. ниже, чтобы изменить параметры сбора журналов.

См. следующие примеры.

### Use default Log Analytics workspace
az aks enable-addons --addon monitoring --name <cluster-name> --resource-group <cluster-resource-group-name>

### Use existing Log Analytics workspace
az aks enable-addons --addon monitoring --name <cluster-name> --resource-group <cluster-resource-group-name> --workspace-resource-id <workspace-resource-id>

### Use custom log configuration file
az aks enable-addons --addon monitoring --name <cluster-name> --resource-group <cluster-resource-group-name> --workspace-resource-id <workspace-resource-id> --data-collection-settings dataCollectionSettings.json

### Use legacy authentication
az aks enable-addons --addon monitoring --name <cluster-name> --resource-group <cluster-resource-group-name> --workspace-resource-id <workspace-resource-id> --enable-msi-auth-for-monitoring false

Пример

az aks enable-addons --addon monitoring --name "my-cluster" --resource-group "my-resource-group" --workspace-resource-id "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/my-resource-group/providers/Microsoft.OperationalInsights/workspaces/my-workspace"

Файл конфигурации журнала

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

{
  "interval": "1m",
  "namespaceFilteringMode": "Include",
  "namespaces": ["kube-system"],
  "enableContainerLogV2": true, 
  "streams": ["Microsoft-Perf", "Microsoft-ContainerLogV2"]
}

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

Имя Описание
interval Определяет частоту сбора данных агентом. Допустимые значения: от 1 м до 30 м с интервалами в 1 м. Если значение выходит за пределы допустимого диапазона, то по умолчанию оно составляет 1 м.

Значение по умолчанию: 1 м.
namespaceFilteringMode Включить: собирает только данные из значений в поле пространств имен.
Исключить: Собирает данные из всех пространств имен, за исключением значений в поле пространств имен.
Off: игнорирует выбранные пространства имен и собирает данные во всех пространствах имен.

Значение по умолчанию: выключение
namespaces Массив пространств имен Kubernetes, разделенных запятыми, для сбора данных об инвентаризации и производительности на основе namespaceFilteringMode.
Например, пространства имен = ["kube-system", "default"] с параметром Include собирают только эти два пространства имен. С параметром Исключить агент собирает данные из всех других пространств имен, за исключением kube-system и default. С параметром Off агент собирает данные из всех пространств имен, включая kube-system и по умолчанию. Недопустимые и неопознанные пространства имен игнорируются.

Нет.
enableContainerLogV2 Логический флаг для активации схемы ContainerLogV2. Если задано значение true, отправляются журналы stdout/stderr в таблицу ContainerLogV2. В противном случае журналы контейнеров отправляются в таблицу ContainerLog , если иное не указано в ConfigMap. При указании отдельных потоков необходимо включить соответствующую таблицу для ContainerLog или ContainerLogV2.

Значение по умолчанию: True
streams Массив потоков таблиц. Ознакомьтесь со значениями Stream для списка допустимых потоков и соответствующих таблиц.

По умолчанию: ContainerLogV2, KubeEvents, KubePodInventory

Потоковые значения

При указании таблиц для сбора с помощью CLI или ARM необходимо указать имя потока, соответствующее определенной таблице в рабочей области Log Analytics. В следующей таблице перечислены имена потока для каждой таблицы.

Примечание.

Если вы знакомы со структурой правила сбора данных, имена потоков в этой таблице указываются в разделе потоков данных DCR.

Stream Таблица аналитики контейнеров
Microsoft-ContainerInventory ContainerInventory
Microsoft-ContainerLog ContainerLog
Microsoft-ContainerLogV2 ContainerLogV2
Microsoft-ContainerLogV2-HighScale ContainerLogV2 (режим высокой шкалы)1
Microsoft-ContainerNodeInventory Инвентарь контейнерного узла
Microsoft-InsightsMetrics InsightsMetrics
Microsoft-KubeEvents KubeEvents
Microsoft-KubeMonAgentEvents KubeMonAgentEvents
Microsoft-KubeNodeInventory KubeNodeInventory
Microsoft-KubePodInventory KubePodInventory
Microsoft-KubePVInventory KubePVInventory
Microsoft-KubeServices KubeServices
Microsoft-Perf Перф
Microsoft-RetinaNetworkFlowLogs RetinaNetworkFlowLogs

1 Не используйте Microsoft-ContainerLogV2 и Microsoft-ContainerLogV2-HighScale вместе. Это приведет к тому, что данные будут повторяться.

Применимые таблицы и метрики

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

Имя таблицы Интервал? Пространство имен? Замечания
ContainerInventory Да Да
Инвентарь контейнерного узла Да нет Параметр сбора данных для пространств имен не применяется, так как узел Kubernetes не является ресурсом с областью действия пространства имен
KubeNodeInventory Да нет Параметр сбора данных для пространств имен неприменим, так как узлы Kubernetes не являются ресурсами с областью видимости пространства имен.
KubePodInventory Да Да
KubePVInventory Да Да
KubeServices Да Да
KubeEvents нет Да Параметр сбора данных для интервала не применим для событий Kubernetes
Перф Да Да Настройка сбора данных для пространств имен неприменима к метрикам, связанным с узлом Kubernetes, так как узел Kubernetes не является объектом с областью имен.
InsightsMetrics Да Да Параметры сбора данных применимы только для метрик, которые собирают следующие пространства имен: container.azm.ms/kubestate, container.azm.ms/pv и container.azm.ms/gpu

Примечание.

Фильтрация пространства имен не применяется к записям агента ama-logs. В результате, даже если пространство имен kube-system указано среди исключенных пространств имен, записи, связанные с контейнером агента ama-logs, по-прежнему будут обрабатываться.

Пространство имен метрик Интервал? Пространство имен? Замечания
Взаимосвязи.контейнер/узлы Да нет Узел не является ресурсом, имеющим область действия в рамках пространства имён
Insights.Контейнер/Подсистемы Да Да
Insights.контейнер/контейнеры Да Да
Insights.container/persistentvolumes Да Да

Специальные сценарии

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

Включение журналов плоскости управления

Журналы плоскости управления реализуются в виде журналов ресурсов в Azure Monitor. Чтобы собрать эти журналы, создайте параметр диагностики для кластера. Отправьте их в ту же рабочую область Log Analytics, что и журналы контейнеров.

Используйте команду az monitor diagnostic-settings create , чтобы создать параметр диагностики с помощью Azure CLI. См. документацию по этой команде для описания его параметров.

В следующем примере создается параметр диагностики, который отправляет все категории Kubernetes в рабочую область Log Analytics. Это включает в себя режим, зависящий от ресурса , для отправки журналов в определенные таблицы, перечисленные в поддерживаемых журналах ресурсов для Microsoft.ContainerService/fleets.

az monitor diagnostic-settings create \
--name 'Collect control plane logs' \
--resource  /subscriptions/<subscription ID>/resourceGroups/<resource group name>/providers/Microsoft.ContainerService/managedClusters/<cluster-name> \
--workspace /subscriptions/<subscription ID>/resourcegroups/<resource group name>/providers/microsoft.operationalinsights/workspaces/<log analytics workspace name> \
--logs '[{"category": "karpenter-events","enabled": true},{"category": "kube-audit","enabled": true},
{"category": "kube-apiserver","enabled": true},{"category": "kube-audit-admin","enabled": true},{"category": "kube-controller-manager","enabled": true},{"category": "kube-scheduler","enabled": true},{"category": "cluster-autoscaler","enabled": true},{"category": "cloud-controller-manager","enabled": true},{"category": "guard","enabled": true},{"category": "csi-azuredisk-controller","enabled": true},{"category": "csi-azurefile-controller","enabled": true},{"category": "csi-snapshot-controller","enabled": true},{"category": "fleet-member-agent","enabled": true},{"category": "fleet-member-net-controller-manager","enabled": true},{"category": "fleet-mcs-controller-manager","enabled": true}]'
--metrics '[{"category": "AllMetrics","enabled": true}]' \
--export-to-resource-specific true

Включение метрик Windows (предварительная версия)

Коллекция метрик Windows включена для кластеров AKS в версии 6.4.0-main-02-22-2023-3ee44b9e контейнера дополнения Managed Prometheus. Подключение к надстройке метрик Azure Monitor позволяет модулям pod Windows DaemonSet запускаться в пулах узлов. Поддерживаются Windows Server 2019 и Windows Server 2022. Выполните следующие действия, чтобы разрешить подам собирать метрики с Windows узловых пулов.

Примечание.

В windows-exporter-daemonset.yaml нет ограничения на ЦП/память, поэтому оно может перераспределить узлы Windows. Дополнительные сведения см. в разделе "Резервирование ресурсов"

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

Установка экспортера Windows

Вручную установите "windows-exporter" на узлах AKS для доступа к метрикам Windows, развернув файл YAML "windows-exporter-daemonset". Включите следующие сборщики. Для получения дополнительных сведений о сборщиках см. "Экспортер Prometheus" для метрик Windows.

  • [defaults]
  • container
  • memory
  • process
  • cpu_info

Разверните файл windows-exporter-daemonset YAML. Если в узле применены какие-либо пятна, необходимо применить соответствующие терпимости.

kubectl apply -f windows-exporter-daemonset.yaml

Включение метрик Windows

Установите логические значения windowsexporter и windowskubeproxy в true в параметрах конфигурации метрик ConfigMap и примените его к кластеру. См . раздел "Настройка коллекции метрик Prometheus" из кластера Kubernetes с помощью ConfigMap.

Включение правил записи

Включите правила записи, необходимые для встроенных панелей мониторинга:

  • При подключении с помощью командной строки добавьте опцию --enable-windows-recording-rules.
  • При подключении с помощью шаблона ARM, Bicep или политики Azure установите enableWindowsRecordingRules равным true в файле параметров.
  • Если кластер уже подключен, используйте этот шаблон ARM и этот файл параметров для создания групп правил. Это добавляет необходимые правила записи и не является операцией ARM в кластере и не влияет на текущее состояние мониторинга кластера.

Проверка развертывания

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

Управляемый Prometheus

Убедитесь, что daemonSet был развернут правильно в пулах узлов Linux

kubectl get ds ama-metrics-node --namespace=kube-system

Количество podов должно быть равно количеству узлов Linux в кластере. Выходные данные должны выглядеть примерно так:

User@aksuser:~$ kubectl get ds ama-metrics-node --namespace=kube-system
NAME               DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
ama-metrics-node   1         1         1       1            1           <none>          10h

Убедитесь, что узлы Windows были развернуты правильно

kubectl get ds ama-metrics-win-node --namespace=kube-system

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

User@aksuser:~$ kubectl get ds ama-metrics-node --namespace=kube-system
NAME                   DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
ama-metrics-win-node   3         3         3       3            3           <none>          10h

Убедитесь, что два ReplicaSets были развернуты для Prometheus

kubectl get rs --namespace=kube-system

Выходные данные должны выглядеть примерно так:

User@aksuser:~$kubectl get rs --namespace=kube-system
NAME                            DESIRED   CURRENT   READY   AGE
ama-metrics-5c974985b8          1         1         1       11h
ama-metrics-ksm-5fcf8dffcd      1         1         1       11h

Ведение журнала контейнеров

Убедитесь, что daemonSets были развернуты правильно в пулах узлов Linux

kubectl get ds ama-logs --namespace=kube-system

Количество podов должно быть равно количеству узлов Linux в кластере. Выходные данные должны выглядеть примерно так:

User@aksuser:~$ kubectl get ds ama-logs --namespace=kube-system
NAME       DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
ama-logs   2         2         2         2            2           <none>          1d

Убедитесь, что узлы Windows были развернуты правильно

kubectl get ds ama-logs-windows --namespace=kube-system

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

User@aksuser:~$ kubectl get ds ama-logs-windows --namespace=kube-system
NAME                   DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE SELECTOR     AGE
ama-logs-windows           2         2         2         2            2       <none>            1d

Проверка развертывания решения для ведения журнала контейнеров

kubectl get deployment ama-logs-rs --namespace=kube-system

Выходные данные должны выглядеть примерно так:

User@aksuser:~$ kubectl get deployment ama-logs-rs --namespace=kube-system
NAME          READY   UP-TO-DATE   AVAILABLE   AGE
ama-logs-rs   1/1     1            1           24d

Просмотр конфигурации с помощью CLI

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

az aks show --resource-group <resourceGroupofAKSCluster> --name <nameofAksCluster>

Команда вернет сведения о решении в формате JSON. Этот addonProfiles раздел должен содержать сведения о omsagent как в следующем примере.

"addonProfiles": {
    "omsagent": {
        "config": {
            "logAnalyticsWorkspaceResourceID": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/my-resource-group/providers/microsoft.operationalinsights/workspaces/my-workspace",
            "useAADAuth": "true"
        },
        "enabled": true,
        "identity": null
    },
}

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