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 AKS (Serviço de Kubernetes do Azure), você tem várias opções:

Este tópico descreve algumas das maneiras pelas quais você pode monitorar a atividade e o status do Flux.

Monitorar as configurações do Flux no portal do Azure

Após você criar as configurações do Flux no seu cluster, você poderá exibir informações de status no portal do Azure navegando até um cluster e selecionando GitOps.

Exibir detalhes sobre conformidade e objetos do cluster

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

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

Captura de tela da conformidade do cluster e outros valores no portal do Azure.

Para ajudar a depurar problemas de reconciliação para um cluster, selecione objetos de configuração. Aqui, você pode exibir 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.

Captura de tela mostrando condições detalhadas de um objeto de configuração.

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 menu de serviço 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. Você também pode adicionar qualquer filtro de rótulo que possa estar usando em seus aplicativos para ajudar a restringir a pesquisa.

Exibir o estado e os detalhes da configuração do Flux

Para cada configuração do Flux, a coluna Estado indicará se o objeto de configuração do Flux foi criado com sucesso 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 branch do repositório
  • Links para exibir kustomizations diferentes

Captura de tela da página Visão geral de uma configuração do Flux no portal do Azure.

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 exibir 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:

Monitorar o status de implantação e conformidade

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

Observação

Estas etapas descrevem o processo de importação do painel para Espaço Gerenciado do Azure para Grafana. Você também pode importar esse painel para qualquer instância do Grafana. Com essa opção, uma entidade de serviço deve ser usada; não há suporte para a identidade gerenciada para conexão de dados fora do Espaço Gerenciado do Azure para Grafana.

  1. Crie uma instância do Espaço Gerenciado do Azure para Grafana usando o portal do Azure ou CLI do Azure. Verifique se você pode acessar o Grafana selecionando seu ponto de extremidade na página Visão Geral. Você precisa de pelo menos editor do Grafana permissões de nível para exibir e editar painéis. Você pode verificar seu acesso acessando o controle de acesso (IAM) na instância do Grafana.

  2. Se você estiver usando uma identidade gerenciada para a instância do Espaço Gerenciado do Azure para Grafana, siga estas etapas para atribuir a função Leitor de Monitoramento na assinatura em que você criou sua instância do Espaço Gerenciado do Azure para Grafana:

    1. No portal do Azure, navegue até a assinatura que você deseja adicionar.
    2. Selecione IAM (Controle de acesso) .
    3. Selecione Adicionar atribuição de função.
    4. Selecione a função Leitor de Monitoramento e selecione Próximo.
    5. Na guia Membros, selecione Identidade gerenciada e escolha Selecionar membros.
    6. Na lista Identidade gerenciada, selecione a assinatura, depois selecione Espaço Gerenciado do Azure para Grafana e o nome da sua instância do Espaço Gerenciado do Azure para Grafana.
    7. Selecione Examinar + Atribuir.

    Se você estiver usando uma entidade de serviço, conceda a função Leitor de monitoramento à entidade de serviço que você usará para sua conexão de fonte de dados. Siga estas mesmas etapas, mas selecione Usuário, grupo ou entidade de serviço na guia Membros e selecione sua entidade de serviço. (Se você não estiver usando o Espaço Gerenciado do Azure para Grafana, deverá usar uma entidade de serviço para acesso à conexão de dados.)

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

  4. Baixe o GitOps Flux – Application Deployments Dashboard.

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

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

Captura de tela do Painel de Implantações do Aplicativo Flux.

A tabela Status de Implantação de Extensão do Flux lista todos os clusters em que a extensão Flux é implantada, juntamente com o status de implantação atual.

Captura de tela mostrando a tabela Status das Implantações de Extensão do Flux no painel Implantações de Aplicativos.

A tabela Status de Conformidade de Configuração do Flux lista todas as configurações do Flux criadas nos clusters, juntamente com seu status de conformidade. Para ver os logs de status e de erro para objetos de configuração, como versões do Helm e kustomizations, selecione o link não compatível na coluna ComplianceState.

Captura de tela mostrando a tabela Status de Conformidade de Configuração do Flux no painel Implantações de Aplicativos.

O gráfico Contagem de Implantações de Extensão do Flux por Status mostra a contagem de clusters, com base em seu estado de provisionamento.

Captura de tela do gráfico de pizza Implantações de Extensão do Flux por Status no painel Implantações de Aplicativos.

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

Captura de tela do gráfico Configuração do Flux por Status de Conformidade no painel Implantações de Aplicativos.

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

Você pode filtrar dados no GitOps Flux – Painel de Implantações de Aplicativos 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 nas listas suspensas de nível superior ou em qualquer cabeçalho de coluna nas tabelas.

Por exemplo, na tabela Status de Conformidade de Configuração do Flux, 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

Após você importar o dashboard como descrito na seção anterior, você poderá configurar alertas. Esses alertas notificam você quando as extensões do Flux ou as configurações do Flux apresentam falhas.

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

  1. No menu de navegação à esquerda do painel, selecione Alertas.

  2. Selecione Regras de alertas.

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

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

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

    • Selecione uma fonte 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.

    • Insira a consulta que você deseja usar. 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 de alerta.

    Captura de tela mostrando o processo de criação de alertas.

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

    • Para Condição, selecione a consulta ou expressão para disparar a regra de alerta.
    • Para Avaliar cada, insira a frequência de avaliação como um múltiplo de 10 segundos.
    • Para Avaliar para, especifique por quanto tempo a condição deve ser verdadeira antes da criação do alerta.
    • Em Configurar nenhum tratamento de dados e 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 Versão Prévia.
  7. Adicione o local de armazenamento, grupo de regras e quaisquer outros metadados que você queira associar à regra.

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

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

Monitorar o consumo e as reconciliações de recursos

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

  1. Siga as etapas para criar um Workspace do Azure Monitor.

  2. Crie uma instância do Espaço Gerenciado do Azure para Grafana usando o portal do Azure ou CLI do Azure.

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

  4. Configure o Agente do Azure Monitor 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. Baixe os painéis do Flux Control Plane e Flux Cluster Stats.

  6. Vincular o workspace do Prometheus Gerenciado à instância do Grafana Gerenciada. Esse processo leva alguns minutos para ser concluído.

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

Após você importar os dashboards, eles exibirão informações dos clusters que você está monitorando. Para mostrar informações somente para um determinado cluster ou namespace, use os filtros próximos à parte superior de cada painel.

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

Captura de tela do Painel de Controle do Flux.

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

Captura de tela do painel Estatísticas de Clusters do Flux.

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

Após você importar o dashboard como descrito na seção anterior, você poderá configurar alertas. Esses alertas notificam você sobre problemas de consumo de recursos e reconciliação que podem exigir atenção.

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

Após você baixar o modelo Bicep e fazer suas 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óximas etapas