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.
Defina o contexto para o 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 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
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
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
Abra o recurso OperatorConfig para edição:
kubectl -n gmp-public edit operatorconfig config
Adicione o texto apresentado em negrito ao recurso:
Certifique-se de que também adiciona estas credenciais àapiVersion: monitoring.googleapis.com/v1 kind: OperatorConfig metadata: namespace: gmp-public name: config rules: credentials: name: gmp-test-sa key: key.json
collection
secção para que a recolha gerida funcione.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 umVerticalPodAutoscaler
recurso, 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:
Crie um ficheiro de configuração local com as definições do Alertmanager (consulte os modelos de configuração de exemplo):
touch alertmanager.yaml
Atualize o ficheiro com as definições do Alertmanager pretendidas e crie um segredo denominado
alertmanager
no espaço de nomesgmp-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:
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
Abra o recurso OperatorConfig para edição:
kubectl -n gmp-public edit operatorconfig config
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:
Abra o recurso OperatorConfig para edição:
kubectl -n gmp-public edit operatorconfig config
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.