Partilhar via


Monitorar o status e a atividade do GitOps (Flux v2)

Para monitorar o status e a atividade relacionados ao GitOps com o Flux v2 em seus clusters Kubernetes habilitados para Azure Arc ou clusters do Serviço Kubernetes do Azure (AKS), você tem várias opções:

  • Use o portal do Azure para monitorar configurações e recursos do Flux em clusters individuais.
  • Use um painel do Grafana para monitorar a implantação e o status de conformidade.
  • Use os painéis Flux Control Plane e Flux Cluster Stats para monitorar o consumo de recursos e as reconciliações.
  • Habilite a raspagem do Prometheus a partir de clusters e crie seus próprios painéis usando os dados no espaço de trabalho do Azure Monitor.
  • Crie alertas no Azure Monitor usando os dados disponíveis por meio da raspagem do Prometheus.

Este tópico descreve algumas das maneiras de monitorar sua atividade e status do Flux.

Monitorar configurações do Flux no portal do Azure

Depois de criar as configurações do Flux em seu cluster, você pode exibir informações de status no portal do Azure navegando até um cluster e selecionando GitOps.

Exibir detalhes sobre conformidade de cluster e objetos

O estado de Conformidade mostra se o estado atual do cluster corresponde ao estado desejado. Valores possíveis:

  • Compatível: o estado do cluster corresponde ao estado desejado.
  • Pendente: Um estado desejado atualizado foi detetado, mas esse estado ainda não foi reconciliado no cluster.
  • Não compatível: o estado atual não corresponde ao estado desejado.

Screenshot of cluster compliance and other values in the Azure portal.

Para ajudar a depurar problemas de reconciliação para um cluster, selecione Objetos de configuração. Aqui, você pode visualizar logs de cada um dos objetos de configuração que o Flux cria para cada configuração do Flux. Selecione um nome de objeto para exibir seus logs.

Screenshot showing detailed conditions for a configuration object.

Para exibir os objetos do Kubernetes que foram criados como resultado da aplicação das configurações do Flux, selecione Cargas de trabalho na seção Recursos do Kubernetes do painel de navegação esquerdo do cluster. Aqui, você pode exibir todos os detalhes de quaisquer recursos que foram criados no cluster.

Por padrão, você pode filtrar por namespace e nome do serviço. Também pode adicionar qualquer filtro de etiqueta que possa estar a utilizar nas suas aplicações para ajudar a restringir a pesquisa.

Ver estado de configuração e detalhes do Flux

Para cada configuração do Flux, a coluna State indica se o objeto de configuração do Flux foi criado com êxito no cluster.

Selecione qualquer configuração do Flux para ver sua página Visão geral , incluindo as seguintes informações:

  • ID de confirmação de origem para a última sincronização
  • Carimbo de data/hora da atualização de origem mais recente
  • Carimbo de data/hora de atualização de status (indicando quando as estatísticas mais recentes foram obtidas)
  • URL e sucursal do repositório
  • Links para visualizar diferentes kustomizations

Screenshot of the Overview page of a Flux configuration in the Azure portal.

Usar painéis para monitorar o status e a atividade do GitOps

Fornecemos painéis para ajudá-lo a monitorar o status, a conformidade, o consumo de recursos e a atividade de reconciliação do GitOps com o Flux v2. Esses painéis JSON podem ser importados para o Grafana para ajudá-lo a visualizar e analisar seus dados em tempo real. Você também pode configurar alertas para essas informações.

Para importar e usar esses painéis, você precisa:

  • Um ou mais clusters Kubernetes habilitados para Arc ou clusters AKS existentes.
  • A extensão microsoft.flux instalada nos clusters.
  • Pelo menos uma configuração do Flux criada nos clusters.

Monitorar a implantação e o status de conformidade

Siga estas etapas para importar painéis que permitem monitorar a implantação e o status da extensão do Flux em clusters e o status de conformidade da configuração do Flux nesses clusters.

Nota

Estas etapas descrevem o processo de importação do painel para o Azure Managed Grafana. Você também pode importar esse painel para qualquer instância do Grafana. Com esta opção, deve ser utilizada uma entidade de serviço; identidade gerenciada não é suportada para conexão de dados fora do Azure Managed Grafana.

  1. Crie uma instância do Azure Managed Grafana usando o portal do Azure ou a CLI do Azure. Certifique-se de que você é capaz de acessar o Grafana selecionando seu ponto de extremidade na página Visão geral. Você precisa de pelo menos permissões de nível do Grafana Editor para visualizar e editar painéis. Você pode verificar seu acesso indo para Controle de acesso (IAM) na instância do Grafana.

  2. Se estiver a utilizar uma identidade gerida para a instância do Azure Managed Grafana, siga estes passos para lhe atribuir a função de Leitor de Monitorização na(s) subscrição(ões):

    1. No portal do Azure, navegue até a assinatura que você deseja adicionar.
    2. Selecione Controlo de acesso (IAM) .
    3. Selecione Adicionar atribuição de função.
    4. Selecione a função Leitor de monitoramento e, em seguida, selecione Avançar.
    5. No separador Membros, selecione Identidade gerida e, em seguida, selecione Selecionar membros.
    6. Na lista Identidade gerenciada, selecione a assinatura na qual você criou sua Instância do Azure Managed Grafana. Em seguida, selecione Azure Managed Grafana e o nome da sua instância do Azure Managed Grafana .
    7. Selecione Rever + Atribuir.

    Se você estiver usando uma entidade de serviço, conceda a função Leitor de Monitoramento à entidade de serviço que usará para sua conexão de fonte de dados. Siga estes mesmos passos, mas selecione Utilizador, grupo ou entidade de serviço no separador Membros e, em seguida, selecione a entidade de serviço. (Se você não estiver usando o Azure Managed Grafana, deverá usar uma entidade de serviço para acesso à conexão de dados.)

  3. Crie a conexão da Fonte de Dados do Azure Monitor em sua instância do Azure Managed Grafana. Essa conexão permite que o painel acesse os dados do Azure Resource Graph.

  4. Faça o download do GitOps Flux - Application Deployments Dashboard.

  5. Siga as etapas para importar o painel JSON para o Grafana.

Depois de importar o painel, ele exibirá informações dos clusters que você está monitorando, com vários painéis que fornecem detalhes. Para obter mais detalhes sobre um item, selecione o link para visitar o portal do Azure, onde você pode encontrar mais informações sobre configurações, erros e logs.

Screenshot of the Flux Application Deployments Dashboard.

A tabela Status da implantação da extensão Flux lista todos os clusters em que a extensão Flux está implantada, juntamente com o status atual da implantação.

Screenshot showing the Flux Extension Deployments Status table in the Application Deployments dashboard.

A tabela Flux Configuration Compliance Status lista todas as configurações do Flux criadas nos clusters, juntamente com seu status de conformidade. Para ver os logs de status e erros de objetos de configuração, como liberações de leme e kustomizations, selecione o link Não compatível na coluna ComplianceState .

Screenshot showing the Flux Configuration Compliance Status table in the Application Deployments dashboard.

O gráfico Contagem de implantações de extensão de fluxo por status mostra a contagem de clusters, com base em seu estado de provisionamento.

Screenshot of the Flux Extension Deployments by Status pie chart in the Application Deployments dashboard.

O gráfico Contagem de configurações de fluxo por status de conformidade mostra a contagem de configurações de fluxo, com base em seu status de conformidade em relação ao repositório de origem.

Screenshot of the Flux Configuration by Compliance Status chart on the Application Deployments dashboard.

Filtrar dados do painel para acompanhar implantações de aplicativos

Você pode filtrar dados no GitOps Flux - Application Deployments Dashboard para alterar as informações mostradas. Por exemplo, você pode mostrar dados apenas para determinadas assinaturas ou grupos de recursos ou limitar dados a um cluster específico. Para fazer isso, selecione a opção de filtro nos menus suspensos de nível superior ou em qualquer cabeçalho de coluna nas tabelas.

Por exemplo, na tabela Flux Configuration Compliance Status , você pode selecionar uma confirmação específica na coluna SourceLastSyncCommit . Ao fazer isso, você pode acompanhar o status de uma implantação de configuração para todos os clusters afetados por essa confirmação.

Criar alertas para falhas de extensão e configuração

Depois de importar o painel conforme descrito na seção anterior, você pode configurar alertas. Esses alertas notificam quando as extensões ou configurações do Flux apresentam falhas.

Siga as etapas abaixo para criar um alerta. Consultas de exemplo são fornecidas para detetar falhas de provisionamento ou atualização de extensão ou para detetar falhas de estado de conformidade.

  1. No menu de navegação esquerdo do painel, selecione Alerta.

  2. Selecione Regras de alerta.

  3. Selecione + Criar regra de alerta. A página da nova regra de alerta é aberta, com a opção de alertas gerenciados do Grafana selecionada por padrão.

  4. Em Nome da regra, adicione um nome descritivo. Esse nome é exibido na lista de regras de alerta e será usado como o alertname rótulo para cada instância de alerta criada a partir dessa regra.

  5. Em Definir uma condição de consulta e alerta:

    • Selecionar uma origem de dados. A mesma fonte de dados usada para o painel pode ser usada aqui.

    • Para Serviço, selecione Azure Resource Graph.

    • Selecione as assinaturas na lista suspensa.

    • Introduza a consulta que pretende utilizar. Por exemplo, para falhas de provisionamento ou atualização de extensão, você pode inserir esta consulta:

      kubernetesconfigurationresources
      | where type == "microsoft.kubernetesconfiguration/extensions"
      | extend provisioningState = tostring(properties.ProvisioningState)
      | where provisioningState == "Failed"
      | summarize count() by provisioningState
      

      Ou, para falhas de estado de conformidade, você pode inserir esta consulta:

      kubernetesconfigurationresources
      | where type == "microsoft.kubernetesconfiguration/fluxconfigurations"
      | extend complianceState=tostring(properties.complianceState)
      | where complianceState == "Non-Compliant"
      | summarize count() by complianceState
      
    • Para a caixa Limite, selecione A para o tipo de entrada e defina o limite como 0 para receber alertas, mesmo que apenas uma extensão falhe no cluster. Marque isso como a condição Alerta.

    Screenshot showing the alert creation process.

  6. Especifique o intervalo de avaliação do alerta:

    • Em Condição, selecione a consulta ou expressão para acionar a regra de alerta.
    • Em Avaliar todos, insira a frequência de avaliação como um múltiplo de 10 segundos.
    • Em Avaliar para, especifique por quanto tempo a condição deve ser verdadeira antes que o alerta seja criado.
    • Em Configurar ausência de dados e tratamento de erros, indique o que deve acontecer quando a regra de alerta não retornar dados ou retornar um erro.
    • Para verificar os resultados da execução da consulta, selecione Pré-visualizar.
  7. Adicione o local de armazenamento, o grupo de regras e quaisquer metadados adicionais que você queira associar à regra.

    • Em Pasta, selecione a pasta onde a regra deve ser armazenada.
    • Para Grupo, especifique um grupo predefinido.
    • Se desejar, adicione uma descrição e um resumo para personalizar as mensagens de alerta.
    • Adicione URL, painel, painel e IDs de alerta do Runbook conforme necessário.
  8. Se desejar, adicione rótulos personalizados. Em seguida, selecione Guardar.

Você também pode configurar pontos de contato e políticas de notificação para seus alertas.

Monitorar o consumo de recursos e as reconciliações

Siga estas etapas para importar painéis que permitem monitorar o consumo de recursos do Flux, reconciliações, solicitações de API e status do reconciliador.

  1. Siga as etapas para criar um Espaço de Trabalho do Azure Monitor.

  2. Crie uma instância do Azure Managed Grafana usando o portal do Azure ou a CLI do Azure.

  3. Habilite a coleta de métricas do Prometheus nos clusters AKS e/ou clusters Kubernetes habilitados para Arc que você deseja monitorar.

  4. Configure o Azure Monitor Agent para raspar as métricas do Azure Managed Flux criando um configmap:

    kind: ConfigMap
    apiVersion: v1
    data:
      schema-version:
          #string.used by agent to parse config. supported versions are {v1}. Configs with other schema versions will be rejected by the agent.
        v1
      config-version:
        #string.used by customer to keep track of this config file's version in their source control/repository (max allowed 10 chars, other chars will be truncated)
        ver1
      default-scrape-settings-enabled: |-
        kubelet = true
        coredns = false
        cadvisor = true
        kubeproxy = false
        apiserver = false
        kubestate = true
        nodeexporter = true
        windowsexporter = false
        windowskubeproxy = false
        kappiebasic = true
        prometheuscollectorhealth = false
      # Regex for which namespaces to scrape through pod annotation based scraping.
      # This is none by default. Use '.*' to scrape all namespaces of annotated pods.
      pod-annotation-based-scraping: |-
        podannotationnamespaceregex = "flux-system"
      default-targets-scrape-interval-settings: |-
        kubelet = "30s"
        coredns = "30s"
        cadvisor = "30s"
        kubeproxy = "30s"
        apiserver = "30s"
        kubestate = "30s"
        nodeexporter = "30s"
        windowsexporter = "30s"
        windowskubeproxy = "30s"
        kappiebasic = "30s"
        prometheuscollectorhealth = "30s"
        podannotations = "30s"
    metadata:
      name: ama-metrics-settings-configmap
      namespace: kube-system
    
  5. Faça o download dos painéis Flux Control Plane e Flux Cluster Stats .

  6. Vincule o espaço de trabalho Managed Prometheus à instância do Managed Grafana. Este processo demora alguns minutos para ser concluído.

  7. Siga as etapas para importar esses painéis JSON para o Grafana.

Depois de importar os painéis, eles exibirão informações dos clusters que você está monitorando. Para mostrar informações apenas para um cluster ou namespace específico, use os filtros próximos à parte superior de cada painel.

O painel do Plano de Controle de Fluxo mostra detalhes sobre o consumo de recursos de status, reconciliações no nível do cluster e solicitações de API do Kubernetes.

Screenshot of the Flux Control Plane dashboard.

O painel Flux Cluster Stats mostra detalhes sobre o número de reconciliadores, juntamente com o status e a duração de execução de cada reconciliador.

Screenshot of the Flux Cluster Stats dashboard.

Criar alertas para problemas de consumo de recursos e reconciliação

Depois de importar o painel conforme descrito na seção anterior, você pode configurar alertas. Esses alertas notificam sobre problemas de consumo de recursos e reconciliação que podem exigir atenção.

Para habilitar esses alertas, implante um modelo Bicep semelhante ao mostrado aqui. As regras de alerta neste modelo são exemplos que podem ser modificados conforme necessário.

Depois de baixar o modelo Bicep e fazer as alterações, siga estas etapas para implantar o modelo.

param azureMonitorWorkspaceName string
param alertReceiverEmailAddress string

param kustomizationLookbackPeriodInMinutes int = 5
param helmReleaseLookbackPeriodInMinutes int = 5
param gitRepositoryLookbackPeriodInMinutes int = 5
param bucketLookbackPeriodInMinutes int = 5
param helmRepoLookbackPeriodInMinutes int = 5
param timeToResolveAlerts string = 'PT10M'
param location string = resourceGroup().location

resource azureMonitorWorkspace 'Microsoft.Monitor/accounts@2023-04-03' = {
  name: azureMonitorWorkspaceName
  location: location
}

resource fluxRuleActionGroup 'Microsoft.Insights/actionGroups@2023-01-01' = {
  name: 'fluxRuleActionGroup'
  location: 'global'
  properties: {
    enabled: true
    groupShortName: 'fluxGroup'
    emailReceivers: [
      {
        name: 'emailReceiver'
        emailAddress: alertReceiverEmailAddress
      }
    ]
  }
}

resource fluxRuleGroup 'Microsoft.AlertsManagement/prometheusRuleGroups@2023-03-01' = {
  name: 'fluxRuleGroup'
  location: location
  properties: {
    description: 'Flux Prometheus Rule Group'
    scopes: [
      azureMonitorWorkspace.id
    ]
    enabled: true
    interval: 'PT1M'
    rules: [
      {
        alert: 'KustomizationNotReady'
        expression: 'sum by (cluster, namespace, name) (gotk_reconcile_condition{type="Ready", status="False", kind="Kustomization"}) > 0'
        for: 'PT${kustomizationLookbackPeriodInMinutes}M'
        labels: {
          description: 'Kustomization reconciliation failing for last ${kustomizationLookbackPeriodInMinutes} minutes.'
        }
        annotations: {
          description: 'Kustomization reconciliation failing for last ${kustomizationLookbackPeriodInMinutes} minutes.'
        }
        enabled: true
        severity: 3
        resolveConfiguration: {
          autoResolved: true
          timeToResolve: timeToResolveAlerts
        }
        actions: [
          {
            actionGroupId: fluxRuleActionGroup.id
          }
        ]
      }
      {
        alert: 'HelmReleaseNotReady'
        expression: 'sum by (cluster, namespace, name) (gotk_reconcile_condition{type="Ready", status="False", kind="HelmRelease"}) > 0'
        for: 'PT${helmReleaseLookbackPeriodInMinutes}M'
        labels: {
          description: 'HelmRelease reconciliation failing for last ${helmReleaseLookbackPeriodInMinutes} minutes.'
        }
        annotations: {
          description: 'HelmRelease reconciliation failing for last ${helmReleaseLookbackPeriodInMinutes} minutes.'
        }
        enabled: true
        severity: 3
        resolveConfiguration: {
          autoResolved: true
          timeToResolve: timeToResolveAlerts
        }
        actions: [
          {
            actionGroupId: fluxRuleActionGroup.id
          }
        ]
      }
      {
        alert: 'GitRepositoryNotReady'
        expression: 'sum by (cluster, namespace, name) (gotk_reconcile_condition{type="Ready", status="False", kind="GitRepository"}) > 0'
        for: 'PT${gitRepositoryLookbackPeriodInMinutes}M'
        labels: {
          description: 'GitRepository reconciliation failing for last ${gitRepositoryLookbackPeriodInMinutes} minutes.'
        }
        annotations: {
          description: 'GitRepository reconciliation failing for last ${gitRepositoryLookbackPeriodInMinutes} minutes.'
        }
        enabled: true
        severity: 3
        resolveConfiguration: {
          autoResolved: true
          timeToResolve: timeToResolveAlerts
        }
        actions: [
          {
            actionGroupId: fluxRuleActionGroup.id
          }
        ]
      }
      {
        alert: 'BucketNotReady'
        expression: 'sum by (cluster, namespace, name) (gotk_reconcile_condition{type="Ready", status="False", kind="Bucket"}) > 0'
        for: 'PT${bucketLookbackPeriodInMinutes}M'
        labels: {
          description: 'Bucket reconciliation failing for last ${bucketLookbackPeriodInMinutes} minutes.'
        }
        annotations: {
          description: 'Bucket reconciliation failing for last ${bucketLookbackPeriodInMinutes} minutes.'
        }
        enabled: true
        severity: 3
        resolveConfiguration: {
          autoResolved: true
          timeToResolve: timeToResolveAlerts
        }
        actions: [
          {
            actionGroupId: fluxRuleActionGroup.id
          }
        ]
      }
      {
        alert: 'HelmRepositoryNotReady'
        expression: 'sum by (cluster, namespace, name) (gotk_reconcile_condition{type="Ready", status="False", kind="HelmRepository"}) > 0'
        for: 'PT${helmRepoLookbackPeriodInMinutes}M'
        labels: {
          description: 'HelmRepository reconciliation failing for last ${helmRepoLookbackPeriodInMinutes} minutes.'
        }
        annotations: {
          description: 'HelmRepository reconciliation failing for last ${helmRepoLookbackPeriodInMinutes} minutes.'
        }
        enabled: true
        severity: 3
        resolveConfiguration: {
          autoResolved: true
          timeToResolve: timeToResolveAlerts
        }
        actions: [
          {
            actionGroupId: fluxRuleActionGroup.id
          }
        ]
      }
    ]
  }
}

Próximos passos