Partilhar via


Habilitar a monitorização para os clusters AKS

Conforme descrito em Monitoramento do Kubernetes no Azure Monitor, vários recursos do Azure Monitor trabalham juntos para fornecer monitoramento completo de seus clusters do Serviço Kubernetes do Azure (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

Criar áreas de trabalho

A tabela a seguir descreve os espaços de trabalho necessários para dar suporte aos recursos do Azure Monitor habilitados 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 Criar uma arquitetura de espaço de trabalho do Log Analytics para obter orientação sobre quantos espaços de trabalho criar e onde eles devem ser colocados.

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

Contributor permissão é suficiente para habilitar o complemento para enviar dados para o espaço de trabalho do Azure Monitor. Você precisará de permissão de nível Owner para vincular o seu espaço de trabalho do Azure Monitor e exibir métricas no Azure Managed Grafana. Isso é necessário porque o usuário que executa a etapa de integração precisa ser capaz de atribuir a função Identidade Monitoring Reader do Sistema Grafana Gerenciado do Azure no Espaço de Trabalho do Azure Monitor para consultar as métricas.
Registro de contêineres
Registos do plano de controlo
Área de trabalho do Log Analytics Você pode anexar um cluster a um espaço de trabalho do Log Analytics em uma assinatura diferente do Azure no mesmo locatário do Microsoft Entra, mas deve usar a CLI do Azure ou um modelo do Azure Resource Manager. No momento, não é possível executar essa configuração com o portal do Azure.

Se você estiver conectando um cluster existente a um espaço de trabalho do Log Analytics em outra assinatura, o provedor de recursos Microsoft.ContainerService deverá estar registrado na assinatura com o espaço de trabalho do Log Analytics. Para obter mais informações, consulte Registar fornecedor de recursos.

Se você não especificar um espaço de trabalho existente do Log Analytics, o espaço de trabalho padrão para o grupo de recursos será usado. Se ainda não existir um espaço de trabalho padrão na região do cluster, será 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 Configurar o Monitor do Azure com Perímetro de Segurança de Rede para obter orientação 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 Vincule seu espaço de trabalho do Grafana ao espaço de trabalho do Azure Monitor para disponibilizar as métricas do Prometheus coletadas do cluster para os painéis do Grafana.

Habilite as métricas do Prometheus e o registro em log de contêineres

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 você habilita o Prometheus e o log de contêiner em um cluster, uma versão em contêiner do agente do Azure Monitor é instalada 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 Vincular um espaço de trabalho do Grafana para obter opções para conectar seu espaço de trabalho do Azure Monitor e o espaço de trabalho do Azure Managed Grafana.

Pré-requisitos

  • O cluster tem de utilizar a autenticação de identidade gerida.
  • Os seguintes provedores de recursos devem ser registrados na assinatura do cluster e no espaço de trabalho do Azure Monitor:
    • Serviço de Contentores da Microsoft
    • Microsoft.Insights
    • Microsoft.GestãoDeAlertas
    • Microsoft.Monitor
  • Os seguintes provedores de recursos devem estar registrados na assinatura do espaço de trabalho Grafana:
    • Microsoft.Dashboard

Pré-requisitos

  • A autenticação de identidade gerenciada é padrão na CLI versão 2.49.0 ou superior.
  • A extensão aks-preview deve ser desinstalada dos clusters AKS usando o comando az extension remove --name aks-preview.

Métricas Prometheus

Use a -enable-azure-monitor-metrics opção com az aks create ou az aks update, dependendo se está a criar um novo cluster ou a atualizar um cluster existente para instalar o complemento de métricas que recolhe as métricas do Prometheus. Isso usará a configuração descrita em Configuração de métricas padrão do Prometheus no Azure Monitor. Para modificar essa configuração, consulte Personalizar a coleta de métricas do Prometheus no serviço gerido pelo Azure Monitor para Prometheus.

Veja os exemplos a seguir.

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

Exemplo

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"

Parâmetros opcionais

Cada um dos comandos acima permite 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 habilitar os grupos de regras de gravação necessários para o funcionamento adequado dos painéis do Windows.

Nota

Observe que os parâmetros definidos usando - ksm-metric-annotations-allow-list e ksm-metric-labels-allow-list podem ser substituídos ou, alternativamente, definidos usando o ama-metrics-settings-configmap

Logs de contêiner

Use a opção --addon monitoring com az aks create para um novo cluster ou az aks enable-addon para atualizar um cluster existente para habilitar a coleta de logs de contentor. Consulte abaixo para modificar as configurações de coleta de log.

Veja os exemplos a seguir.

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

Exemplo

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"

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 você não fornecer um arquivo de configuração, as configurações padrão identificadas na tabela abaixo serão usadas.

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

Cada uma das configurações na configuração é descrita na tabela a seguir.

Nome Descrição
interval Determina a frequência com que o agente coleta dados. Os valores válidos são de 1m a 30m em intervalos de 1m Se o valor estiver fora do intervalo permitido, o padrão será 1 m.

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 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-KubeEventos KubeEvents
Microsoft-KubeMonAgentEvents KubeMonAgentEventos
Microsoft-KubeNodeInventory KubeNodeInventory
Microsoft-KubePodInventory KubePodInventory
Microsoft-InventárioKubePV KubePVInventory
Microsoft-KubeServices KubeServices
Microsoft-Perf Perf
Microsoft-ContainerInsights-Group-Default Fluxo de grupo que abrange todos os fluxos acima. 2

1 Não use o Microsoft-ContainerLogV2 e o 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 a seguir listam as tabelas no espaço de trabalho do Log Analytics juntamente com as configurações que se aplicam 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 configurações de coleta de dados só são aplicáveis para as métricas que coletam 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 registros do agente ama-logs. Como resultado, mesmo que o namespace kube-system esteja listado entre namespaces excluídos, os registros associados ao contêiner do agente ama-logs ainda serão 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

Verifique as referências abaixo para obter os requisitos de configuração para cenários específicos.

Habilitar logs de plano de controle

Os logs de plano de controle são implementados como logs de 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 seus logs de contêiner.

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

O exemplo a seguir cria uma configuração de diagnóstico que envia todas as categorias do Kubernetes para um espaço de trabalho do Log Analytics. Isso inclui o modo específico de recursos para enviar os logs para tabelas específicas listadas em Logs 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

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

A coleta de métricas do Windows está habilitada para clusters AKS a partir da versão 6.4.0-main-02-22-2023-3ee44b9e do contêiner de complemento Managed Prometheus. A integração ao complemento Azure Monitor Metrics permite que os pods DaemonSet do Windows comecem a ser executados em seus pools de nós. O Windows Server 2019 e o Windows Server 2022 são suportados. Siga estas etapas para que os pods possam recolher métricas dos seus pools de nós Windows.

Nota

Não há limite de CPU/memória em windows-exporter-daemonset.yaml, por isso pode provisionar em excesso os nós do 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 superprovisionar os nós do Windows e, em casos extremos, tornar os nós inoperacionais.

Instalar o Windows exporter

Instale manualmente o windows-exporter em nós de AKS para aceder às métricas do Windows através da implantação do ficheiro YAML windows-exporter-daemonset. Habilite os seguintes coletores. Para obter mais coletores, consulte Prometheus exporter for Windows metrics.

  • [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

Habilitar 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 a integração estiver usando um modelo ARM, Bicep ou Política do Azure, configure enableWindowsRecordingRules para true no arquivo de parâmetros.
  • Se o cluster já estiver integrado, use este modelo ARM e este ficheiro de parâmetros 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 nós do Windows foram implantados 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

Registro de contêineres

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 nós do Windows foram implantados 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 aks show comando para descobrir se a solução está habilitada, o ID do recurso do espaço de trabalho do Log Analytics e informações resumidas sobre o cluster.

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

O comando retornará informações formatadas em 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
    },
}

Próximos passos