O serviço gerenciado do Google Cloud para Prometheus é compatível com a avaliação e os alertas de regras compatíveis com o Prometheus. Neste documento, você verá como configurar a avaliação de regras gerenciadas.
Avaliação de regras
O serviço gerenciado para o Prometheus fornece um componente de avaliação de regras que permite criar regras com segurança no contexto de um back-end global do Prometheus, impedindo a interferência com dados de outros usuários em organizações maiores. O componente é implantado automaticamente como parte da coleção gerenciada ao ser executado em clusters do Kubernetes.
É possível gravar regras e alertas nas métricas do Managed Service para Prometheus e das métricas do Cloud Monitoring. É preciso usar o recurso GlobalRules ao gravar regras para métricas do Cloud Monitoring.
Regras
O avaliador de regras gerenciadas usa o recurso Rules para configurar as regras de gravação e alerta. Veja a seguir um exemplo de 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 upstream rule_group
do Prometheus. As regras de alerta e gravação
definidas em Rules
têm como escopo 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"})
.
Isso garante que as regras de alerta ou gravação não avaliem acidentalmente
as métricas de aplicativos que você talvez não conheça.
Para aplicar as regras de exemplo ao cluster, execute o seguinte comando:
kubectl apply -n NAMESPACE_NAME -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.12.0/examples/rules.yaml
Após alguns minutos, a métrica job:up:sum
ficará disponível.
O alerta AlwaysFiring
também começa a ser disparado. Para mais informações sobre
como enviar alertas para um Alertmanager, consulte
Configuração do Alertmanager.
Os recursos ClusterRules e
GlobalRules fornecem a mesma interface
que o recurso Rules
, mas aplicam as regras a escopos mais amplos.
O ClusterRules seleciona dados usando os rótulos project_id
e cluster
,
e os GlobalRules selecionam todos os dados no escopo das métricas consultadas sem restringir
os rótulos.
Para a documentação de referência sobre todos os recursos personalizados do Managed Service para Prometheus, consulte a referência do prometheus-engine/doc/api.
Como converter regras em regras do Prometheus
O recurso de regras fornece uma interface compatível com as regras do Prometheus para um caminho de migração perfeito para incorporar regras atuais à avaliação de regras gerenciadas. Você pode incluir suas regras em um recurso de regras. Por exemplo, veja a seguir uma regra do Prometheus:
groups: - name: example interval: 30s rules: - record: job:up:sum expr: sum without(instance) (up) - alert: AlwaysFiring expr: vector(1)
O recurso de regras correspondente, com a regra original do Prometheus em negrito, segue o seguinte:
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
É possível usar o recurso ClusterRules para configurar regras de gravação e alerta que podem avaliar todas as séries temporais enviadas ao serviço gerenciado para o Prometheus de todos os namespaces em um cluster específico.
A especificação é idêntica à de Rules
. O exemplo de regra do Prometheus anterior se torna 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 você use os recursos do ClusterRules somente para métricas horizontais, como aquelas produzidas por uma malha de serviço. Para métricas de implantações individuais, use recursos de regras para garantir que a avaliação não inclua dados não intencionais.
GlobalRules
Use o recurso GlobalRules
para configurar regras de gravação e
alerta que podem avaliar todas as séries temporais enviadas ao
serviço gerenciado para o Prometheus em todos os projetos de um escopo de métricas.
A especificação é idêntica à de Rules
. O
exemplo anterior de regra do Prometheus se torna 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)
Como as métricas do Cloud Monitoring não têm escopo para um namespace ou cluster, é preciso usar o recurso GlobalRules ao gravar regras ou alertas para métricas do Cloud Monitoring. O uso de GlobalRules também é necessário ao alertar sobre métricas do sistema do Google Kubernetes Engine.
Se as regras não preservam os rótulos project_id
ou location
, o padrão será os valores do cluster.
Para métricas do Managed Service para Prometheus, recomendamos que você use
GlobalRules apenas para casos de uso raros em que um alerta pode precisar de dados em
todos os clusters de uma só vez. Para métricas de implantações
individuais, use os recursos Rules ou ClusterRules para aumentar a confiabilidade e garantir que a avaliação não inclua dados indesejados. É altamente recomendável preservar os rótulos cluster
e namespace
nos resultados da avaliação da regra, a menos que o objetivo da regra seja agregar esses rótulos, caso contrário, o desempenho da consulta poderá diminuir e você poderá encontrar limites de cardinalidade. Não é indicado remover os dois
rótulos.
Avaliação de regras globais e de vários projetos
Quando implantado no Google Kubernetes Engine, o avaliador de regras usa o projeto do Google Cloud associado ao cluster que ele detecta automaticamente. Para avaliar regras que abrangem projetos, configure o avaliador de regras que executa o recurso GlobalRules para usar um projeto com um escopo de métricas de vários projetos. Faça isso de duas maneiras:
- Coloque o recurso GlobalRules em um projeto que tenha um escopo de métricas de vários projetos.
- Defina o campo
queryProjectID
dentro do OperatorConfig para usar um projeto com um escopo de métricas de vários projetos.
Também é necessário atualizar as permissões da conta de serviço usada pelo avaliador de regras, que geralmente é a conta de serviço padrão do nó, para que a conta possa ler o projeto do escopo e gravar em todos os projetos monitorados no escopo de métricas.
Se o escopo das métricas contiver todos os projetos, as regras serão avaliadas globalmente. Saiba mais em Escopos de métricas.
Alertas de uso das métricas do Cloud Monitoring
Use o recurso GlobalRules para alertar sobre métricas do sistema do Google Cloud usando o PromQL. Para instruções sobre como criar uma consulta válida, consulte PromQL para métricas do Cloud Monitoring.
Como configurar regras e alertas usando o Terraform
É possível automatizar a criação e o gerenciamento de regras, clustersRules e
recursos GlobalRules usando o tipo de recurso kubernetes_manifest
do Terraform ou tipo de recurso
kubectl_manifest
do Terraform, que permite
especificar recursos personalizados arbitrários.
Para informações gerais sobre como usar o Google Cloud com o Terraform, consulte Terraform com o Google Cloud.
Fornecer credenciais explicitamente
Durante a execução no GKE, o avaliador de regras recupera as credenciais automaticamente do ambiente com base na conta de serviço do nó. Em clusters que não são do Kubernetes, as credenciais precisam ser explicitamente fornecidas por meio do recurso OperatorConfig no namespace gmp-public.
Defina o contexto para seu projeto de destino:
gcloud config set project PROJECT_ID
Crie uma conta de serviço:
gcloud iam service-accounts create gmp-test-sa
Conceda as permissõ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
Crie e faça o download de 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
Adicione o arquivo de chave como secret ao cluster que não é do GKE:
kubectl -n gmp-public create secret generic gmp-test-sa \ --from-file=key.json=gmp-test-sa-key.json
Abra o recurso OperatorConfig para edição:
kubectl -n gmp-public edit operatorconfig config
Adicione o texto exibido 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
Também é necessário adicionar essas credenciais à seçãocollection
para que a coleta gerenciada funcione.Salve o arquivo e feche o editor. Depois que a alteração é aplicada, os pods são recriados e começam a autenticar no back-end da métrica com a conta de serviço especificada.
Como escalonar a avaliação de regras
O avaliador de regras é executado como uma implantação de réplica única com limites e solicitações de recursos fixos. Talvez você note interrupções na carga de trabalho, como falhar no processo de OOMKille ao avaliar um grande número de regras. Para atenuar isso, implante um
VerticalPodAutoscaler
para escalonar verticalmente a implantação. Primeiro, verifique se o Escalonamento automático vertical de pods está ativado no cluster do Kubernetes. Em seguida, aplique um recursoVerticalPodAutoscaler
como o seguinte: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
Para conferir se o escalonador automático está funcionando, verifique o status dele:
kubectl get vpa --namespace gmp-system rule-evaluator
Se o escalonador automático estiver funcionando, ele informará 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ção do Alertmanager
É possível usar o recurso OperatorConfig para configurar o avaliador de regras gerenciado para enviar alertas a um Alertmanager do Prometheus. É possível enviar alertas para o Alertmanager gerenciado e implantado automaticamente, além de qualquer gerenciador de alerta autoimplantado.
Alertmanager gerenciado
O serviço gerenciado para Prometheus implanta uma instância gerenciada do Alertmanager, para onde os avaliadores de regras são configurados automaticamente para encaminhar alertas. Por padrão, essa configuração é definida com um secret do Kubernetes especificamente chamado que contém um arquivo de configuração do Alertmanager.
Para ativar e configurar relatórios na instância implantada do Alertmanager, faça o seguinte:
Crie um arquivo de configuração local que contenha as configurações do Alertmanager (consulte os modelos de configuração de exemplo):
touch alertmanager.yaml
Atualize o arquivo com as configurações do Alertmanager desejadas e crie um Secret chamado
alertmanager
no namespacegmp-public
:kubectl create secret generic alertmanager \ -n gmp-public \ --from-file=alertmanager.yaml
Depois de alguns momentos, o Managed Service para Prometheus retira o novo Secret de configuração e ativa o Alertmanager gerenciado com suas configurações.
Como personalizar o nome do Secret de configuração
O Alertmanager gerenciado também é compatível com nomes do Secret personalizados para carregar a configuração. Esse recurso é útil quando você tem vários Secrets de configuração e quer que a instância do Alertmanager alterne entre as configurações correspondentes. Por exemplo, talvez você queira mudar os canais de notificação de alerta com base na rotação de turnos na chamada ou em uma configuração experimental do Alertmanager para testar uma nova rota de alertas.
Para especificar um nome de Secret não padrão usando o recurso OperatorConfig, faça o seguinte:
Crie um Secret a partir do arquivo de configuração local do Alertmanager:
kubectl create secret generic SECRET_NAME \ -n gmp-public \ --from-file=FILE_NAME
Abra o recurso OperatorConfig para edição:
kubectl -n gmp-public edit operatorconfig config
Para ativar os relatórios do Alertmanager gerenciado, edite o recurso modificando a seção
managedAlertmanager
, conforme mostrado no texto em negrito a seguir:apiVersion: monitoring.googleapis.com/v1 kind: OperatorConfig metadata: namespace: gmp-public name: config managedAlertmanager: configSecret: name: SECRET_NAME key: FILE_NAME
Se você precisar fazer alterações na configuração do Alertmanager, edite a configuração desse AlertManager atualizando o Secret criado anteriormente.
Personalizar o URL externo
É possível configurar o URL externo do Gerenciador de alertas gerenciado para que as notificações de alerta possam fornecer um link de callback para a IU de alertas. Isso é equivalente a usar a sinalização
--web.external-url
do Prometheus Alertmanager.apiVersion: monitoring.googleapis.com/v1 kind: OperatorConfig metadata: namespace: gmp-public name: config managedAlertmanager: externalURL: EXTERNAL_URL
Alertmanager autoimplantado
Para configurar o avaliador de regras para um AlertManager autoimplantado, faça o seguinte:
Abra o recurso OperatorConfig para edição:
kubectl -n gmp-public edit operatorconfig config
Configure o recurso para enviar alertas ao 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 em um cluster diferente do avaliador de regras, talvez seja necessário configurar um recurso do Endpoints. Por exemplo, se o OperatorConfig informar que os endpoints do Alertmanager podem ser encontrados no objeto do Endpoints
ns=alertmanager/name=alertmanager
, crie esse objeto manualmente ou de maneira programática e preencha-o com IPs acessíveis do outro cluster. A seção de configuração do AlertmanagerEndpoints fornece opções para configuração de autorização, se necessário.