Como criar políticas de alerta

Nesta página, mostramos como criar políticas de alertas para GDCV para clusters Bare Metal.

Antes de começar

Para criar políticas de alertas, é necessário ter as seguintes permissões:

  • monitoring.alertPolicies.create
  • monitoring.alertPolicies.delete
  • monitoring.alertPolicies.update

Você terá essas permissões se tiver um dos seguintes papéis:

  • monitoring.alertPolicyEditor
  • monitoring.editor
  • Editor do projeto
  • Proprietário do projeto

Para verificar seus papéis, acesse a página do IAM no Console do Google Cloud.

Como criar um exemplo de política: "Servidor de API indisponível"

Neste exercício, você cria uma política de alertas para os servidores da API Kubernetes dos clusters. Com essa política em vigor, é possível ser notificado sempre que o servidor da API de um cluster ficar inativo.

  1. Faça o download do arquivo de configuração da política: apiserver-unavailable.json.

  2. Crie a política:

    gcloud alpha monitoring policies create --policy-from-file=POLICY_CONFIG

    Substitua POLICY_CONFIG pelo caminho do arquivo de configuração que você acabou de receber.

  3. Veja suas políticas de alertas:

    Console

    1. No Console do Google Cloud, acesse a página Monitoring.

      Acessar Monitoring

    2. À esquerda, selecione Alertas.

    3. Em Políticas, é possível ver uma lista das suas políticas de alertas.

      Na lista, selecione Servidor da API de cluster do Anthos indisponível (crítico) para ver detalhes sobre a nova política. Em Condições, você pode ver uma descrição da política. Exemplo:

      Policy violates when ANY condition is met
      Anthos cluster API server uptime is absent for 5m
      

    gcloud

    gcloud alpha monitoring policies list

    A resposta mostra informações detalhadas sobre a política. Exemplo:

    combiner: OR
    conditions:
    - conditionAbsent:
        aggregations:
        - alignmentPeriod: 60s
          crossSeriesReducer: REDUCE_MEAN
          groupByFields:
          - resource.label.project_id
          - resource.label.location
          - resource.label.cluster_name
          - resource.label.namespace_name
          - resource.label.container_name
          - resource.label.pod_name
          perSeriesAligner: ALIGN_MAX
        duration: 300s
        filter: resource.type = "k8s_container" AND metric.type = "kubernetes.io/anthos/container/uptime"
          AND resource.label."container_name"=monitoring.regex.full_match("kube-apiserver")
        trigger:
          count: 1
      displayName: Anthos cluster API server uptime is absent for 5m
      name: projects/…/alertPolicies/…/conditions/…
    displayName: Anthos cluster API server unavailable (critical)
    enabled: true
    mutationRecord:
      mutateTime: 
      mutatedBy: 
    name: projects/…/alertPolicies/…
    

Como criar outras políticas de alertas

Nesta seção, fornecemos descrições e arquivos de configuração para um conjunto de políticas de alertas recomendadas.

Para criar uma política, siga as mesmas etapas usadas no exercício anterior:

  1. Para fazer o download do arquivo de configuração, clique no link na coluna da direita.

  2. Se preferir, ajuste as condições para atender melhor às suas necessidades específicas. Por exemplo, é possível adicionar mais filtros para um subconjunto de clusters ou ajustar os valores do limite para equilibrar entre ruído e crítico.

  3. Para criar a política, execute gcloud alpha monitoring policies create.

É possível fazer o download e instalar todos os exemplos de política de alertas descritos neste documento com o seguinte script:

# 1. Create a directory named alert_samples:

mkdir alert_samples && cd alert_samples
declare -a alerts=("apiserver-unavailable.json" "controller-manager-unavailable.json" "scheduler-unavailable.json" \
  "pod-crash-looping.json" "pod-not-ready-1h.json" "container-cpu-usage-high-reaching-limit.json" \
  "container-memory-usage-high-reaching-limit.json" "persistent-volume-usage-high.json" "node-cpu-usage-high.json" \
  "node-disk-usage-high.json" "node-memory-usage-high.json" "node-not-ready-1h.json" "apiserver-error-ratio-high.json" \
  "etcd-leader-changes-or-proposal-failures-frequent.json" "etcd-server-not-in-quorum.yaml" "etcd-storage-usage-high.json")

# 2. Download all alert samples into the alert_samples/ directory:

for x in "${alerts[@]}"
do
  wget https://cloud.google.com/anthos/clusters/docs/bare-metal/1.16/samples/${x}
done

# 3. (optional) Uncomment and provide your project ID to set the default project
# for gcloud commands:

# gcloud config set project <PROJECT_ID>

# 4. Create alert policies for each of the downloaded samples:

for x in "${alerts[@]}"
do
  gcloud alpha monitoring policies create --policy-from-file=${x}
done

Disponibilidade dos componentes do plano de controle

Nome do alerta Descrição Definição da política de alertas no Cloud Monitoring
Servidor de API indisponível (crítico) A métrica de tempo de atividade do servidor de API não está disponível apiserver-unavailable.json
Programador indisponível (crítico) A métrica de tempo de atividade do programador não está disponível scheduler-unavailable.json
Gerenciador indisponível (crítico) A métrica de tempo de atividade do gerenciador do controlador não está disponível controller-manager-unavailable.json

Sistema Kubernetes

Nome do alerta Descrição Definição da política de alertas no Cloud Monitoring
Loop de falha do pod (aviso) O pod continua reiniciando e pode estar em um status de loop de falha pod-crash-looping.json
O pod não está pronto por mais de uma hora (crítico) O pod leva mais de uma hora para ficar pronto pod-not-ready-1h.json
O uso da CPU do contêiner excede 80% (aviso) O uso da CPU do contêiner está 80% acima do limite container-cpu-usage-high-reaching-limit.json
O uso da memória do contêiner excede 85 por cento (aviso) O uso da memória do contêiner está 85% acima do limite container-memory-usage-high-reaching-limit.json
Uso elevado de volume permanente (crítico) O volume permanente reivindicado tem menos de 3% de espaço livre persistent-volume-usage-high.json
O uso da CPU do nó excede 80% (aviso) O uso de CPU do nó é mais de 80% do total alocável por 5 min node-cpu-usage-high.json
O uso do disco do nó excede 85 por cento (aviso) Menos de 15% é livre por ponto de montagem no disco por 10 minutos. node-disk-usage-high.json
O uso da memória do nó excede 80% (aviso) O uso de memória do nó é mais de 80% do total alocável por 5 min node-memory-usage-high.json
O nó não está pronto por mais de uma hora (crítico) O nó leva mais de uma hora para ficar pronto node-not-ready-1h.json

Desempenho do Kubernetes

Nome do alerta Descrição Definição da política de alertas no Cloud Monitoring
A proporção de erros do servidor da API excede 20% (crítico) O servidor da API gera erros 5xx ou 429 em mais de 20% de todas as solicitações por verbo por 15 min apiserver-error-ratio-high.json
Alteração no líder do ETCD ou falha na proposta com muita frequência (aviso) As mudanças do líder etcd ou falhas na proposta ocorrem com muita frequência etcd-leader-changes-or-proposal-failures-frequent.json
O servidor ETCD não está no quórum (crítico) Nenhuma proposta de servidor etcd confirmada por cinco minutos. Talvez ela tenha perdido quórum etcd-server-not-in-quorum.yaml
O armazenamento ETCD excede o limite de 90% (aviso) O uso do armazenamento etcd é superior a 90% do limite etcd-storage-usage-high.json

Políticas de alertas com PromQL

As consultas nas políticas de alertas também podem ser expressas em PromQL em vez de MQL. Por exemplo, a versão PromQL da política API server error ratio exceeds 20 percent (critical) está disponível para download: apiserver-error-ratio-high-promql.json.

Para mais informações, consulte Usar o serviço gerenciado para Prometheus da documentação do GDCV para Bare Metal e Políticas de alertas com PromQL para a documentação do Cloud Monitoring.

Como receber notificações

Depois de criar uma política de alertas, é possível definir um ou mais canais de notificação para essa política. Há vários tipos de canais de notificação. Por exemplo, é possível ser notificado por e-mail, um canal do Slack ou um app para dispositivos móveis. Você pode escolher os canais mais adequados.

Para instruções sobre como configurar canais de notificação, consulte Como gerenciar canais de notificação.