Avaliação e alertas de regras geridas

O Google Cloud Managed Service for Prometheus suporta a avaliação de regras e os alertas compatíveis com o Prometheus. Este documento descreve como configurar a avaliação de regras geridas.

Avaliação da regra

O Managed Service for Prometheus fornece um componente de avaliação de regras que lhe permite escrever regras em segurança no contexto de um back-end global do Prometheus, impedindo que interfira com os dados de outros utilizadores em organizações maiores. O componente é implementado automaticamente como parte da recolha gerida quando executado em clusters do Kubernetes.

Pode escrever regras e alertas sobre métricas do Managed Service for Prometheus e métricas do Cloud Monitoring. Tem de usar o recurso GlobalRules quando escreve regras para métricas do Cloud Monitoring.

Regras

O avaliador de regras gerido usa o recurso Rules para configurar regras de registo e alerta. Segue-se um exemplo de um recurso de regras:

 apiVersion: monitoring.googleapis.com/v1 kind: Rules metadata:   namespace: NAMESPACE_NAME   name: example-rules spec:   groups:   - name: example     interval: 30s     rules:     - record: job:up:sum       expr: sum without(instance) (up)     - alert: AlwaysFiring       expr: vector(1) 

O formato do elemento .spec.groups é idêntico à matriz Prometheus rule_group a montante. As regras de alerta e registo definidas em Rules têm âmbito project_id, cluster e namespace do recurso. Por exemplo, a regra job:up:sum no recurso acima consulta efetivamente sum without(instance) (up{project_id="test-project", cluster="test-cluster", namespace="NAMESPACE_NAME"}). Esta garantia assegura que as regras de alerta ou de registo não avaliam acidentalmente métricas de aplicações que pode nem conhecer.

Para aplicar as regras de exemplo ao seu cluster, execute o seguinte comando:

 kubectl apply -n NAMESPACE_NAME -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.15.3/examples/rules.yaml 

Após alguns minutos, a métrica job:up:sum fica disponível. O alerta AlwaysFiring também começa a ser acionado. Para informações sobre como enviar alertas para um Alertmanager, consulte a configuração do Alertmanager.

Os recursos ClusterRules e GlobalRules fornecem a mesma interface que o recurso Rules, mas aplicam as regras a âmbitos mais amplos. As ClusterRules selecionam dados através das etiquetas project_id e cluster, e as GlobalRules selecionam todos os dados no âmbito das métricas consultadas sem restringir etiquetas.

Para ver a documentação de referência sobre todos os recursos personalizados do Managed Service for Prometheus, consulte a referência da API prometheus-engine/doc/api.

Conversão de regras do Prometheus em regras

O recurso Rules fornece uma interface compatível com as regras do Prometheus para fornecer um caminho de migração simples para incorporar regras existentes na avaliação de regras geridas. Pode incluir as suas regras existentes num recurso Rules. Por exemplo, o seguinte é uma regra do Prometheus:

 groups: - name: example   interval: 30s   rules:   - record: job:up:sum     expr: sum without(instance) (up)   - alert: AlwaysFiring     expr: vector(1) 

Segue-se o recurso Rules correspondente, com a regra Prometheus original em negrito:

 apiVersion: monitoring.googleapis.com/v1 kind: Rules metadata:   namespace: NAMESPACE_NAME   name: example-rules spec:   groups:   - name: example     interval: 30s     rules:     - record: job:up:sum       expr: sum without(instance) (up)     - alert: AlwaysFiring       expr: vector(1) 

ClusterRules

Pode usar o recurso ClusterRules para configurar regras de gravação e alerta que podem avaliar todas as séries cronológicas enviadas para o Managed Service for Prometheus de todos os espaços de nomes num cluster específico. As especificações são idênticas às de Rules. A regra do Prometheus de exemplo anterior torna-se o seguinte recurso ClusterRules:

 apiVersion: monitoring.googleapis.com/v1 kind: ClusterRules metadata:   name: example-clusterrules spec:   groups:   - name: example     interval: 30s     rules:     - record: job:up:sum       expr: sum without(instance) (up)     - alert: AlwaysFiring       expr: vector(1) 

Recomendamos que use recursos ClusterRules apenas em métricas horizontais, como as produzidas por uma malha de serviços. Para métricas de implementações individuais, use recursos de regras para garantir que a avaliação não inclui dados não intencionais.

GlobalRules

Pode usar o recurso GlobalRules para configurar regras de registo e alerta que podem avaliar todas as séries cronológicas enviadas para o Managed Service for Prometheus em todos os projetos num âmbito de métricas. As especificações são idênticas às de Rules. A regra do Prometheus de exemplo anterior torna-se o seguinte recurso GlobalRules:

 apiVersion: monitoring.googleapis.com/v1 kind: GlobalRules metadata:   name: example-globalrules spec:   groups:   - name: example     interval: 30s     rules:     - record: job:up:sum       expr: sum without(instance) (up)     - alert: AlwaysFiring       expr: vector(1) 

Uma vez que as métricas do Cloud Monitoring não estão no âmbito de um espaço de nomes ou de um cluster, tem de usar o recurso GlobalRules quando escreve regras ou alertas para métricas do Cloud Monitoring. A utilização de GlobalRules também é necessária quando são enviados alertas sobre métricas do sistema do Google Kubernetes Engine.

Se a sua regra não preservar as etiquetas project_id ou location, estas assumem por predefinição os valores do cluster.

Para métricas do Managed Service for Prometheus, recomendamos que use GlobalRules apenas para esses casos de utilização raros em que um alerta pode precisar de dados em todos os clusters de uma só vez. Para métricas de implementações individuais, use recursos de regras ou de regras de cluster para maior fiabilidade e para garantir que a avaliação não inclui dados não intencionais. Recomendamos vivamente que preserve as etiquetas cluster e namespace nos resultados da avaliação de regras, a menos que o objetivo da regra seja agregar essas etiquetas. Caso contrário, o desempenho das consultas pode diminuir e pode deparar-se com limites de cardinalidade. A remoção de ambas as etiquetas é fortemente desaconselhada.

Avaliação de regras globais e de vários projetos

Quando implementado no Google Kubernetes Engine, o avaliador de regras usa o Google Cloud projeto associado ao cluster, que o avaliador de regras deteta automaticamente. Para avaliar regras que abrangem projetos, tem de configurar o avaliador de regras que executa o recurso GlobalRules para usar um projeto com um âmbito de métricas de vários projetos. Pode fazê-lo de duas formas:

  • Coloque o recurso GlobalRules num projeto que tenha um âmbito de métricas de vários projetos.
  • Defina o campo queryProjectID no OperatorConfig para usar um projeto com um âmbito de métricas de vários projetos.

Também tem de atualizar as autorizações da conta de serviço usada pelo avaliador de regras (que é normalmente a conta de serviço predefinida no nó) para que a conta de serviço possa ler a partir do projeto de âmbito e escrever em todos os projetos monitorizados no âmbito das métricas.

Se o âmbito das suas métricas contiver todos os seus projetos, as regras são avaliadas globalmente. Para mais informações, consulte o artigo Âmbitos das métricas.

Alertas com métricas do Cloud Monitoring

Pode usar o recurso GlobalRules para enviar alertas sobre Google Cloud métricas do sistema através do PromQL. Para obter instruções sobre como criar uma consulta válida, consulte o artigo PromQL para métricas do Cloud Monitoring.

Configurar regras e alertas com o Terraform

Pode automatizar a criação e a gestão de recursos Rules, ClusterRules e GlobalRules através do kubernetes_manifest tipo de recurso do Terraform ou do kubectl_manifest tipo de recurso do Terraform, que lhe permitem especificar recursos personalizados arbitrários.

Para informações gerais sobre a utilização do Google Cloud com o Terraform, consulte Terraform com o Google Cloud.

Forneça credenciais explicitamente

Quando executado no GKE, o avaliador de regras obtém automaticamente as credenciais do ambiente com base na conta de serviço do nó. Em clusters Kubernetes não GKE, as credenciais têm de ser fornecidas explicitamente através do recurso OperatorConfig no espaço de nomes gmp-public.

  1. Defina o contexto para o projeto de destino:

     gcloud config set project PROJECT_ID 
  2. Crie uma conta de serviço:

     gcloud iam service-accounts create gmp-test-sa 

  3. Conceda as autorizações necessárias à conta de serviço:

     gcloud projects add-iam-policy-binding PROJECT_ID \   --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \   --role=roles/monitoring.viewer \ && \ gcloud projects add-iam-policy-binding PROJECT_ID\   --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \   --role=roles/monitoring.metricWriter 

  4. Crie e transfira uma chave para a conta de serviço:

     gcloud iam service-accounts keys create gmp-test-sa-key.json \   --iam-account=gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com 
  5. Adicione o ficheiro de chave como um segredo ao seu cluster não GKE:

     kubectl -n gmp-public create secret generic gmp-test-sa \   --from-file=key.json=gmp-test-sa-key.json 

  6. Abra o recurso OperatorConfig para edição:

     kubectl -n gmp-public edit operatorconfig config 
    1. Adicione o texto apresentado em negrito ao recurso:

       apiVersion: monitoring.googleapis.com/v1 kind: OperatorConfig metadata:   namespace: gmp-public   name: config rules:   credentials:     name: gmp-test-sa     key: key.json 
      Certifique-se de que também adiciona estas credenciais à collectionsecção para que a recolha gerida funcione.

    2. Guarde o ficheiro e feche o editor. Após a aplicação da alteração, os pods são recriados e começam a autenticar-se no back-end de métricas com a conta de serviço fornecida.

    Dimensionar a avaliação de regras

    O avaliador de regras é executado como uma implementação de réplica única com pedidos e limites de recursos fixos. Pode reparar que a carga de trabalho sofre interrupções, como a eliminação por falta de memória (OOMKilled) quando avalia um número elevado de regras. Para mitigar esta situação, pode implementar um VerticalPodAutoscaler para dimensionar verticalmente a implementação. Primeiro, certifique-se de que a escala automática vertical de pods está ativada no seu cluster do Kubernetes. Em seguida, aplique um VerticalPodAutoscalerrecurso, como um dos seguintes:

     apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata:   name: rule-evaluator   namespace: gmp-system spec:   resourcePolicy:     containerPolicies:     - containerName: evaluator       controlledResources:         - memory       maxAllowed:         memory: 4Gi       minAllowed:         memory: 16Mi       mode: Auto   targetRef:     apiVersion: apps/v1     kind: Deployment     name: rule-evaluator   updatePolicy:     updateMode: Auto 

    Pode verificar se o redimensionador automático está a funcionar verificando o estado do redimensionador automático:

     kubectl get vpa --namespace gmp-system rule-evaluator 

    Se o dimensionamento automático estiver a funcionar, indica que calculou as recomendações de recursos para a carga de trabalho na coluna "PROVIDED":

     NAME             MODE   CPU   MEM        PROVIDED   AGE rule-evaluator   Auto   2m    11534336   True       30m 

    Configurações de compressão

    Se tiver muitos recursos de regras, pode ficar sem espaço no ConfigMap. Para corrigir este problema, ative a compressão gzip no recurso OperatorConfig:

       apiVersion: monitoring.googleapis.com/v1   kind: OperatorConfig   metadata:     namespace: gmp-public     name: config   features:     config:       compression: gzip 

    Configuração do Alertmanager

    Pode usar o recurso OperatorConfig para configurar o avaliador de regras gerido para enviar alertas para um Alertmanager do Prometheus. Pode enviar alertas para o Alertmanager gerido implementado automaticamente, além de quaisquer Alertmanagers implementados por si.

    Managed Alertmanager

    O Managed Service for Prometheus implementa uma instância gerida do Alertmanager, para a qual os avaliadores de regras são configurados automaticamente para encaminhar alertas. Por predefinição, esta configuração é definida com um segredo do Kubernetes com um nome específico que contém um ficheiro de configuração do Alertmanager.

    Para ativar e configurar os relatórios para a instância do Alertmanager implementada, faça o seguinte:

    1. Crie um ficheiro de configuração local com as definições do Alertmanager (consulte os modelos de configuração de exemplo):

       touch alertmanager.yaml 
    2. Atualize o ficheiro com as definições do Alertmanager pretendidas e crie um segredo denominado alertmanager no espaço de nomes gmp-public:

       kubectl create secret generic alertmanager \   -n gmp-public \   --from-file=alertmanager.yaml 

    Após alguns momentos, o Managed Service for Prometheus seleciona o novo segredo de configuração e ativa o Alertmanager gerido com as suas definições.

    Personalizar o nome do Secret de configuração

    O Alertmanager gerido também suporta nomes de segredos personalizados para carregar a configuração. Esta capacidade é útil quando tem vários segredos de configuração e quer que a instância do Alertmanager alterne entre as configurações correspondentes. Por exemplo, pode querer alterar os canais de notificação de alerta com base em turnos de disponibilidade rotativos ou pode querer substituir uma configuração experimental do Alertmanager para testar uma nova rota de alerta.

    Para especificar um nome de segredo não predefinido através do recurso OperatorConfig, faça o seguinte:

    1. Crie um segredo a partir do ficheiro de configuração do Alertmanager local:

       kubectl create secret generic SECRET_NAME \   -n gmp-public \   --from-file=FILE_NAME 
    2. Abra o recurso OperatorConfig para edição:

       kubectl -n gmp-public edit operatorconfig config 
    3. Para ativar os relatórios do Alertmanager geridos, edite o recurso modificando a secção managedAlertmanager, conforme mostrado no texto em negrito seguinte:

       apiVersion: monitoring.googleapis.com/v1 kind: OperatorConfig metadata:   namespace: gmp-public   name: config managedAlertmanager:   configSecret:     name: SECRET_NAME     key: FILE_NAME 

    Se precisar de fazer alterações à configuração do Alertmanager, pode editar a configuração deste Alertmanager atualizando o segredo que criou anteriormente.

    Personalizar o URL externo

    Pode configurar o URL externo para o Alertmanager gerido, de modo que as notificações de alerta possam fornecer um link de retorno para a sua IU de alertas. Isto é equivalente a usar a flag --web.external-url do Alertmanager do Prometheus a montante.

     apiVersion: monitoring.googleapis.com/v1 kind: OperatorConfig metadata:   namespace: gmp-public   name: config managedAlertmanager:   externalURL: EXTERNAL_URL 

    Alertmanager implementado automaticamente

    Para configurar o avaliador de regras para um Alertmanager implementado automaticamente, faça o seguinte:

    1. Abra o recurso OperatorConfig para edição:

       kubectl -n gmp-public edit operatorconfig config 
    2. Configure o recurso para enviar alertas para o seu serviço Alertmanager:

       apiVersion: monitoring.googleapis.com/v1 kind: OperatorConfig metadata:   namespace: gmp-public   name: config rules:   alerting:     alertmanagers:     - name: SERVICE_NAME       namespace: SERVICE_NAMESPACE       port: PORT_NAME 

    Se o Alertmanager estiver localizado num cluster diferente do avaliador de regras, pode ter de configurar um recurso de pontos finais. Por exemplo, se o seu OperatorConfig indicar que os pontos finais do Alertmanager podem ser encontrados no objeto Endpoints ns=alertmanager/name=alertmanager, pode criar este objeto manualmente ou através de programação e preenchê-lo com IPs acessíveis do outro cluster. A secção de configuração AlertmanagerEndpoints oferece opções de configuração de autorização, se necessário.

    Conservar recursos quando estiver inativo

    Quando não estão configurados recursos Rules, ClusterRules ou GlobalRules, o GKE dimensiona as implementações do avaliador de regras e do Alertmanager para zero, de modo a conservar os recursos do cluster para os clientes que não usam regras nem alertas geridos. Estas implementações são dimensionadas automaticamente quando aplica um novo recurso de regras. Pode forçar a sua expansão aplicando um recurso de regras que não faz nada.