Partilhar via


Ativar monitorização para Azure Kubernetes Service (AKS) clusters

Como descrito em Kubernetes em Azure Monitor, várias funcionalidades do Azure Monitor colaboram para proporcionar uma monitorização completa dos seus clusters do Azure Kubernetes Service (AKS). Este artigo descreve como habilitar os seguintes recursos para clusters AKS:

  • Métricas Prometheus
  • Grafana Gerido
  • Registro de contêineres
  • Registos do plano de controlo

Pré-requisitos

Importante

Se os seus clusters se conectarem ao espaço de trabalho do Azure Monitor ou ao Log Analytics usando a ligação privada do Azure, veja Ative a ligação privada para monitorizar máquinas virtuais e clusters Kubernetes no Azure Monitor.

Criar áreas de trabalho

A tabela seguinte descreve os espaços de trabalho necessários para suportar as funcionalidades do Azure Monitor ativadas neste artigo. Se você ainda não tiver um espaço de trabalho existente de cada tipo, poderá criá-los como parte do processo de integração. Consulte Desenhar uma arquitetura de espaço de trabalho do Log Analytics para orientações sobre quantos espaços de trabalho criar e onde devem ser colocados.

Caraterística Área de trabalho Notas
Serviço Gerido de Prometheus Espaço de trabalho do Azure Monitor Se não especificar um espaço de trabalho Azure Monitor existente durante o onboarding, é usado o espaço de trabalho predefinido para o grupo de recursos. Se ainda não existir um espaço de trabalho predefinido na região do cluster, um com um nome no formato DefaultAzureMonitorWorkspace-<mapped_region> é criado num grupo de recursos com o nome DefaultRG-<cluster_region>.

Contributor permissão é suficiente para permitir que o addon envie dados para o espaço de trabalho Azure Monitor. Precisarás de permissão ao nível Owner para ligar o teu Azure Monitor Workspace a fim de ver métricas no Azure Managed Grafana. Isto é necessário porque o utilizador que executa a etapa de integração precisa de ser capaz de atribuir a função de Identidade do Sistema Azure Managed Grafana Monitoring Reader no Azure Monitor Workspace para consultar as métricas.
Registro de contêineres
Registos do plano de controlo
Informações sobre contêineres
Log Analytics Ambiente de Trabalho Pode anexar um cluster a um espaço de trabalho do Log Analytics numa subscrição diferente do Azure no mesmo tenant do Microsoft Entra, mas deve usar o CLI do Azure ou um modelo do Azure Resource Manager. Atualmente, não consegues fazer esta configuração com o portal do Azure.

Se estiver a ligar um cluster existente a um espaço de trabalho Log Analytics noutra subscrição, o fornecedor de recursos Microsoft.ContainerService deve estar registado na subscrição com o espaço de trabalho Log Analytics. Para obter mais informações, consulte Registar fornecedor de recursos.

Se não especificar um espaço de trabalho Log Analytics existente, é usado o espaço de trabalho padrão para o grupo de recursos. Se ainda não existir um workspace predefinido na região do cluster, é criado um com um nome no formato DefaultWorkspace-<GUID>-<Region>.

Para obter uma lista dos pares de mapeamento suportados a serem usados para o espaço de trabalho padrão, consulte Mapeamentos de região suportados pelo Container insights. Consulte Configure Azure Monitor com o Perímetro de Segurança de Rede para orientações sobre como configurar o espaço de trabalho com perímetro de segurança de rede.
Grafana Gerido Espaço de trabalho do Azure Managed Grafana Liga o teu espaço de trabalho Grafana ao teu espaço de trabalho Azure Monitor para disponibilizar os indicadores Prometheus recolhidos do teu cluster nos dashboards Grafana.

Métricas Prometheus e informações sobre contentores

Nota

Utilizar o Application Insights para monitorizar as aplicações que estão a correr no seu cluster AKS, utilizando o Protocolo OpenTelemetry (OTLP) para instrumentação e recolha de dados, está agora em visualização pública. Veja Monitorizar aplicações AKS com OpenTelemetry Protocol (OTLP) em Versão Preliminar Limitada.

Quando ativas o Prometheus e o Container Insights num cluster, instala-se uma versão containerizada do agente Azure Monitor no cluster. Você pode configurar esses recursos ao mesmo tempo em um cluster novo ou existente ou habilitar cada recurso separadamente.

Habilite o Managed Grafana para seu cluster ao mesmo tempo em que habilita a raspagem das métricas do Prometheus. Consulte Ligar um espaço de trabalho Grafana para opções para conectar o seu espaço de trabalho Azure Monitor e o espaço de trabalho Azure Managed Grafana.

Pré-requisitos

  • O cluster tem de utilizar a autenticação de identidade gerida.
  • Os seguintes fornecedores de recursos devem estar registados na subscrição do cluster e no espaço de trabalho do Azure Monitor:
    • Microsoft. ContainerService
    • Microsoft.Insights
    • Microsoft. AlertsManagement
    • Microsoft.Monitor
  • Os seguintes provedores de recursos devem estar registrados na assinatura do espaço de trabalho Grafana:
    • Microsoft.Dashboard
  • A autenticação de identidade gerenciada é padrão na CLI versão 2.49.0 ou superior.
  • A aks-preview extensão deve ser desinstalada dos clusters AKS usando o comando az extension remove --name aks-preview.

Ativar métricas Prometheus para um cluster AKS

Ative as métricas Prometheus num cluster AKS usando a --enable-azure-monitor-metrics opção com o az aks create comando para um novo cluster ou o az aks update comando para um cluster existente. Esta opção utiliza a configuração descrita na configuração padrão de métricas Prometheus no Azure Monitor. Para modificar esta configuração, veja Personalizar a raspagem de métricas do Prometheus no serviço gerido para Prometheus do Azure Monitor.

Comandos de exemplo:

### 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]"

Parâmetros opcionais

Os comandos de exemplo permitem os seguintes parâmetros opcionais. O nome do parâmetro é diferente para cada um, mas seu uso é o mesmo.

Parâmetro Nome e descrição
Teclas de anotação --ksm-metric-annotations-allow-list

Lista de chaves de anotações do Kubernetes, separadas por vírgulas, usadas na métrica do kube_resource_annotations recurso. Por exemplo, kube_pod_annotations é a métrica de anotações para o recurso pods. Por padrão, essa métrica contém apenas rótulos de nome e namespace. Para incluir mais anotações, forneça uma lista de nomes de recursos em sua forma plural e chaves de anotação do Kubernetes que você deseja permitir para eles. Pode ser fornecido um único * para cada recurso, permitindo quaisquer anotações, mas isso tem sérias implicações de desempenho. Por exemplo, pods=[kubernetes.io/team,...],namespaces=[kubernetes.io/team],....
Teclas de rótulos --ksm-metric-labels-allow-list

Lista separada por vírgulas de mais chaves de rótulo do Kubernetes que são usadas na métrica kube_resource_labels do recurso. Por exemplo, kube_pod_labels é a métrica de rótulos para o recurso pods. Por padrão, essa métrica contém apenas rótulos de nome e namespace. Para incluir mais rótulos, forneça uma lista de nomes de recursos em sua forma plural e chaves de rótulo do Kubernetes que você deseja permitir para eles Um único * pode ser fornecido para cada recurso para permitir quaisquer rótulos, mas isso tem graves implicações de desempenho. Por exemplo, pods=[app],namespaces=[k8s-label-1,k8s-label-n,...],....
Regras de gravação --enable-windows-recording-rules

Permite-te ativar os grupos de regras de gravação necessários para o bom funcionamento dos dashboards do Windows.

Nota

Os parâmetros definidos usando --ksm-metric-annotations-allow-list e --ksm-metric-labels-allow-list podem ser sobrepostos ou, alternativamente, definidos usando o ama-metrics-settings-configmap.

Ativar monitorização de contentores e registo de logs num cluster AKS

Ative insights de contentores e registo de contentores num cluster AKS usando a --addon monitoring opção com o az aks create comando para um novo cluster ou o az aks enable-addon comando para atualizar um cluster existente.

Comandos de exemplo:

### 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

Arquivo de configuração de log

Para personalizar as configurações de coleta de log para o cluster, você pode fornecer a configuração como um arquivo JSON usando o seguinte formato. Se não fornecer um ficheiro de configuração, são usadas as definições padrão identificadas na tabela.

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

A tabela seguinte descreve cada uma das definições no ficheiro de configuração do log:

Nome Descrição
interval Determina a frequência com que o agente coleta dados. Valores válidos são 1m - 30m em intervalos de 1m. Se o valor estiver fora do intervalo permitido, então por defeito será definido como 1m.

Padrão: 1m.
namespaceFilteringMode Include: Coleta apenas dados dos valores no campo namespaces .
Excluir: recolhe dados de todos os namespaces, exceto pelos valores no campo de namespaces.
Desativado: ignora todas as seleções de namespace e coleta dados em todos os namespaces.

Padrão: Desativado
namespaces Matriz de namespaces Kubernetes separados por vírgulas para coletar dados de inventário e perf com base no namespaceFilteringMode.
Por exemplo, namespaces = ["kube-system", "default"] com uma configuração Include coleta apenas esses dois namespaces. Com uma configuração Exclude , o agente coleta dados de todos os outros namespaces, exceto kube-system e default. Com uma configuração Off , o agente coleta dados de todos os namespaces, incluindo kube-system e default. Namespaces inválidos e não reconhecidos são ignorados.

Nenhum.
enableContainerLogV2 Sinalizador booleano para habilitar o esquema ContainerLogV2. Se definido como true, os logs stdout/stderr são ingeridos na tabela ContainerLogV2. Caso contrário, os logs de contêiner são ingeridos na tabela ContainerLog , a menos que especificado de outra forma no ConfigMap. Ao especificar os fluxos individuais, você deve incluir a tabela correspondente para ContainerLog ou ContainerLogV2.

Padrão: True
streams Uma matriz de fluxos de tabela para recolher. Consulte Valores de fluxo para obter uma lista dos fluxos válidos e suas tabelas correspondentes.

Padrão: Microsoft-ContainerInsights-Group-Default

Valores de fluxo

Quando especifica as tabelas a recolher usando CLI ou BICEP/ARM, especifica nomes de fluxos que correspondem a tabelas específicas no espaço de trabalho do Log Analytics. A tabela seguinte lista os nomes dos cursos de água e a respetiva tabela.

Nota

Se você estiver familiarizado com a estrutura de uma regra de coleta de dados, os nomes de fluxo nesta tabela serão especificados na seção Fluxos de dados do DCR.

Stream Tabela de informações do contêiner
Microsoft-ContainerInventory ContainerInventory
Microsoft-ContainerLog ContainerLog
Microsoft-ContainerLogV2 ContainerLogV2
Microsoft-ContainerLogV2-HighScale ContainerLogV2 (modo de alta escala)1
Microsoft-ContainerNodeInventory Inventário do Nó de Contêiner
Microsoft-InsightsMetrics InsightsMetrics
Microsoft-KubeEvents KubeEvents
Microsoft-KubeMonAgentEvents KubeMonAgentEventos
Microsoft-KubeNodeInventory KubeNodeInventory
Microsoft-KubePodInventory KubePodInventory
Microsoft-KubePVInventory KubePVInventory
Microsoft-KubeServices KubeServices
Microsoft-Perf Perf
Microsoft-ContainerInsights-Group-Default Fluxo de grupo que abrange todos os fluxos acima. 2

1 Não uses Microsoft-ContainerLogV2 e Microsoft-ContainerLogV2-HighScale juntos. Isso resultará em dados duplicados. 2 Use o fluxo de grupo como abreviação para especificar todos os fluxos individuais. Se quiseres recolher um conjunto específico de streams, então especifica cada stream individualmente em vez de usares o stream de grupo.

Tabelas e métricas aplicáveis

As configurações de frequência de coleta e filtragem de namespace não se aplicam a todos os dados de log. As tabelas seguintes listam as tabelas no espaço de trabalho Log Analytics, juntamente com as definições aplicáveis a cada uma.

Nome da tabela Intervalo? Namespaces? Observações
ContainerInventory Yes Yes
Inventário do Nó de Contêiner Yes Não A configuração de coleta de dados para namespaces não é aplicável, pois o Nó do Kubernetes não é um recurso com escopo de namespace
KubeNodeInventory Yes Não A configuração de coleta de dados para namespaces não é aplicável. O nó Kubernetes não é um recurso vinculado a um namespace.
KubePodInventory Yes Yes
KubePVInventory Yes Yes
KubeServices Yes Yes
KubeEvents Não Yes A configuração de coleta de dados para intervalo não é aplicável aos Eventos do Kubernetes
Perf Yes Yes A configuração de coleta de dados para namespaces não é aplicável para as métricas relacionadas ao Nó Kubernetes, pois o Nó Kubernetes não é um objeto com escopo de namespace.
InsightsMetrics Yes Yes As definições de recolha de dados são aplicáveis apenas para as métricas que recolhem os seguintes namespaces: container.azm.ms/kubestate, container.azm.ms/pv, e container.azm.ms/gpu.

Nota

A filtragem de namespace não se aplica aos registos do agente do ama-logs. Como resultado, mesmo que o namespace kube-system esteja listado entre namespaces excluídos, os registos associados ao contentor do agente ama-logs continuam a ser ingeridos.

Espaço de nomes de métricas Intervalo? Namespaces? Observações
Insights.container/nós Yes Não O nó não é um recurso com escopo de namespace
Insights.contentor/pods Yes Yes
Insights.contenedor/contenedores Yes Yes
Insights.container/persistentvolumes Yes Yes

Cenários especiais

Utilize os seguintes recursos para requisitos de configuração para cenários específicos:

Ativar os registos do plano de controlo num cluster AKS

Os registos do plano de controlo são implementados como registos recursos no Azure Monitor. Para coletar esses logs, crie uma configuração de diagnóstico para o cluster. Envie-os para o mesmo espaço de trabalho do Log Analytics que os seus registos de contentores.

Use o comando az monitor diagnostic-settings create para criar uma definição de diagnóstico com o CLI do Azure. Consulte a documentação deste comando para obter descrições de seus parâmetros.

O exemplo seguinte cria uma definição de diagnóstico que envia todas as categorias do Kubernetes para um espaço de trabalho Log Analytics. Isto inclui o modo específico de recursos para enviar os registos para tabelas específicas listadas nos registos de recursos suportados para 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

Ativar métricas do Windows (Pré-visualização)

A recolha métrica do Windows está ativada para clusters AKS a partir da versão 6.4.0-main-02-22-2023-3ee44b9e do contentor de addons Managed Prometheus. A integração do complemento Azure Monitor Metrics permite que os pods DaemonSet do Windows comecem a executar nos seus pools de nós. Tanto o Windows Server 2019 como o Windows Server 2022 são suportados. Siga os seguintes passos para ativar os pods na recolha de métricas dos seus grupos de nós do Windows.

Nota

Não há limite de CPU/Memória em windows-exporter-daemonset.yaml, por isso pode sobreprovisionar os nós Windows. Para obter detalhes, consulte Reserva de recursos

À medida que você implanta cargas de trabalho, defina a memória de recursos e os limites de CPU em contêineres. Isso também subtrai do NodeAllocatable e ajuda o agendador de todo o cluster a determinar quais pods colocar em quais nós. Agendar pods sem limites pode sobrecarregar os nós do Windows e, em casos extremos, torná-los instáveis.

Instalar o exportador do Windows

Instale manualmente o windows-exporter nos nós AKS para aceder a métricas Windows implementando o ficheiro windows-exporter-daemonset YAML. Habilite os seguintes coletores. Para mais coletores, veja Prometheus exporter para métricas do Windows.

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

Desdobre o ficheiro YAML windows-exporter-daemonset. Se houver alguma mancha aplicada no nó, você precisa aplicar as tolerâncias apropriadas.

kubectl apply -f windows-exporter-daemonset.yaml

Ativar métricas do Windows

Defina o windowsexporter e windowskubeproxy Booleans como true em suas configurações de métricas ConfigMap e aplique-o ao cluster. Consulte Personalize a recolha de métricas do Prometheus do seu cluster Kubernetes usando ConfigMap.

Ativar regras de gravação

Habilite as regras de gravação necessárias para os painéis prontos para uso:

  • Se a integração estiver usando CLI, inclua a opção --enable-windows-recording-rules.
  • Se for integrado usando um template ARM, Bicep ou Azure Policy, defina enableWindowsRecordingRules para true no ficheiro de parâmetros.
  • Se o cluster já estiver integrado, use this ARM template e this parameter file para criar os grupos de regras. Isso adiciona as regras de gravação necessárias e não é uma operação ARM no cluster e não afeta o estado atual de monitoramento do cluster.

Verificar a implementação

Utilize a ferramenta de linha de comando kubectl para verificar se o agente está implantado corretamente.

Serviço Gerido de Prometheus

Verifique se o DaemonSet foi implantado corretamente nos pools de nós do Linux

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

O número de pods deve ser igual ao número de nós Linux no cluster. A saída deve ser semelhante ao seguinte exemplo:

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

Verifique se os nodes do Windows foram implementados corretamente

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

O número de pods deve ser igual ao número de nós do Windows no cluster. A saída deve ser semelhante ao seguinte exemplo:

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

Verifique se os dois ReplicaSets foram implantados para o Prometheus

kubectl get rs --namespace=kube-system

A saída deve ser semelhante ao seguinte exemplo:

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

Análise e registo de contentores

Verifique se os DaemonSets foram implantados corretamente nos pools de nós do Linux

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

O número de pods deve ser igual ao número de nós Linux no cluster. A saída deve ser semelhante ao seguinte exemplo:

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

Verifique se os nodes do Windows foram implementados corretamente

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

O número de pods deve ser igual ao número de nós do Windows no cluster. A saída deve ser semelhante ao seguinte exemplo:

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

Verificar a implantação da solução de log de contêiner

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

A saída deve ser semelhante ao seguinte exemplo:

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

Ver configuração com CLI

Use o comando aks show para saber se a solução está ativada, o ID do recurso Log Analytics workspace e informações resumidas sobre o cluster.

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

O comando devolve informação em formato JSON sobre a solução. A addonProfiles seção deve incluir informações sobre o omsagent como no exemplo a seguir:

"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
    },
}