Neste documento, fornecemos exemplos de políticas de alertas. As amostras são escritas em JSON e usam filtros do Monitoring. É possível criar políticas em JSON ou YAML, independentemente de você definir a política usando filtros do Monitoring ou a linguagem de consulta do Monitoring (MQL, na sigla em inglês). A Google Cloud CLI pode ler e gravar JSON e YAML, enquanto a API REST pode ler JSON.
Para amostras de políticas de alertas que usam o MQL, consulte os seguintes documentos:
Para informações sobre como configurar campos da política de alertas, consulte:
- Criar políticas de alertas com base em métricas usando o console do Google Cloud
- Criar políticas de alertas com base em métricas usando a API
Gerar YAML para políticas atuais
Para gerar representações YAML das políticas de alertas atuais, use o comando gcloud alpha monitoring policies list
para listar as políticas e o comando gcloud alpha monitoring policies describe
para imprimir a política.
Para gerar representações YAML dos canais de notificação existentes, use o comando gcloud alpha monitoring channels list
para listar seus canais e o comando gcloud alpha monitoring channels describe
para imprimir a configuração do canal.
Se você não incluir a sinalização --format
nos comandos da Google Cloud CLI, o formato será YAML por padrão para os dois comandos gcloud ... describe
.
Por exemplo, o comando gcloud alpha monitoring policies describe
a seguir
recupera uma única política chamada
projects/a-gcp-project/alertPolicies/12669073143329903307
, e o redirecionamento
(>
) copia a saída para o arquivo test-policy.yaml
:
gcloud alpha monitoring policies describe projects/a-gcp-project/alertPolicies/12669073143329903307 > test-policy.yaml
Gerar JSON para políticas existentes
Para gerar representações JSON das políticas de alertas e dos canais de notificação atuais, siga um destes procedimentos:
Adicione a sinalização
--format="json"
aos comandos da CLIgcloud
descritos em Gerar YAML para políticas atuais. Por exemplo, para listar políticas, execute o seguinte comando:"gcloud alpha monitoring policies list --format=json"
Use o widget da APIs Explorer na página de referência de cada método de API:
Para políticas de alertas, consulte os métodos
alertPolicies.list
ealertPolicies.get
.Para canais de notificação, consulte os métodos
notificationChannels.list
enotificationChannels.get
.
Para mais informações, consulte APIs Explorer.
Amostras de política
Conforme mostrado no exemplo de backup/restauração, é possível usar políticas salvas para criar novas cópias delas.
É possível usar uma política salva em um projeto para criar uma nova ou semelhante em outro projeto. No entanto, você precisa primeiro fazer as seguintes alterações em uma cópia da política salva:
- Remova os campos a seguir de todos os canais de notificação:
name
verificationStatus
- Crie canais de notificação antes de consultar os canais nas políticas de alertas. São necessários os novos identificadores de canal.
- Remova os campos a seguir de todas as políticas de alertas que você estiver recriando:
name
condition.name
creationRecord
mutationRecord
As políticas neste documento são organizadas usando a mesma terminologia que o Monitoring no console do Google Cloud usa, por exemplo, "política de taxa de mudança", e há dois tipos de condições:
- Uma condição de limite: quase todos os tipos de política mencionados na UI são variantes de uma condição de limite.
- Uma condição de ausência
Nos exemplos a seguir, essas condições correspondem a conditionThreshold
e conditionAbsent
. Para mais informações, consulte a página de referência de
Condition
.
É possível criar muitas dessas políticas manualmente usando o console do Google Cloud, mas algumas podem ser criadas somente usando a API Monitoring. Para mais informações, consulte Como criar uma política de alertas (UI) ou Criar políticas de alertas usando a API.
Política de limite de métrica
Uma política de limite de métrica detecta quando algum valor ultrapassa um limite predeterminado. As políticas de limite permitem que você saiba que algo está se aproximando de um ponto importante, portanto, você pode realizar alguma ação. Por exemplo, a condição de uma política de limite de métrica é atendida quando o espaço em disco disponível se torna menos de 10% do espaço total em disco.
A política de alertas a seguir usa o uso médio da CPU como um indicador da integridade de um grupo de VMs. A condição da política é atendida quando a utilização média da CPU das VMs em um projeto, medida em intervalos de 60 segundos, excede um limite de 90% de utilização por 15 minutos (900 segundos):
{
"displayName": "Very high CPU usage",
"combiner": "OR",
"conditions": [
{
"displayName": "CPU usage is extremely high",
"conditionThreshold": {
"aggregations": [
{
"alignmentPeriod": "60s",
"crossSeriesReducer": "REDUCE_MEAN",
"groupByFields": [
"project"
],
"perSeriesAligner": "ALIGN_MAX"
}
],
"comparison": "COMPARISON_GT",
"duration": "900s",
"filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\"
AND resource.type=\"gce_instance\"",
"thresholdValue": 0.9,
"trigger": {
"count": 1
}
}
}
],
}
Política de ausência de métrica
Uma condição de ausência de métrica é atendida quando nenhum dado é gravado em uma métrica dentro do período definido pelo campo duration
.
Uma maneira de demonstrar isso é criar uma métrica personalizada.
Veja um descritor de amostra para uma métrica personalizada. É possível criar a métrica usando o APIs Explorer.
{
"description": "Number of times the pipeline has run",
"displayName": "Pipeline runs",
"metricKind": "GAUGE",
"type": "custom.googleapis.com/pipeline_runs",
"labels": [
{
"description": "The name of the pipeline",
"key": "pipeline_name",
"valueType": "STRING"
},
],
"unit": "1",
"valueType": "INT64"
}
Consulte Visão geral das métricas definidas pelo usuário para mais informações.
A condição na política de alertas a seguir é atendida quando os dados param de ser gravados na métrica por um período de aproximadamente uma hora. Em outras palavras, o pipeline por hora não é executado. Observe que a condição usada aqui é
conditionAbsent
.
{
"displayName": "Data ingestion functioning",
"combiner": "OR",
"conditions": [
{
"displayName": "Hourly pipeline is up",
"conditionAbsent": {
"duration": "3900s",
"filter": "resource.type=\"global\"
AND metric.type=\"custom.googleapis.com/pipeline_runs\"
AND metric.label.pipeline_name=\"hourly\"",
}
}
],
}
Política de previsão
Uma condição de previsão é atendida quando ocorre o seguinte:
- Todas as previsões de uma série temporal são as mesmas dentro do período definido pelo campo
duration
. - O Cloud Monitoring prevê que a série temporal vai violar o limite dentro do horizonte de previsão.
Uma condição de previsão é uma condição de limite de métrica configurada
para usar a previsão. Conforme ilustrado no exemplo a seguir, essas condições incluem um campo forecastOptions
que ativa a estimativa e especifica o horizonte dela. No exemplo a seguir, o horizonte da previsão é definido como
uma hora, que é o valor mínimo:
{
"displayName": "NFS free bytes alert",
"combiner": "OR",
"conditions": [
{
"displayName": "Filestore Instance - Free disk space percent",
"conditionThreshold": {
"aggregations": [
{
"alignmentPeriod": "300s",
"perSeriesAligner": "ALIGN_MEAN"
}
],
"comparison": "COMPARISON_LT",
"duration": "900s",
"filter": "resource.type = \"filestore_instance\" AND metric.type = \"file.googleapis.com/nfs/server/free_bytes_percent\"",
"forecastOptions": {
"forecastHorizon": "3600s"
},
"thresholdValue": 20,
"trigger": {
"count": 1
}
}
}
],
}
Política de taxa de alteração
As condições de taxa de mudança são atendidas quando os valores em uma série temporal aumentam ou diminuem pelo menos na porcentagem especificada pelo limite. Quando você cria esse tipo de condição, um cálculo de porcentagem de mudança é aplicado à série temporal antes da comparação com o limite.
A condição faz a média dos valores da métrica dos últimos 10 minutos e compara o resultado com a média de 10 minutos medida pouco antes do início do período de alinhamento. Não é possível alterar a janela de 10 minutos usada para comparações em uma política de alertas de taxa de mudança. No entanto, você especifica o período de alinhamento ao criar a condição.
Esta política de alertas monitora se o uso da CPU está aumentando rapidamente:
{
"displayName": "High CPU rate of change",
"combiner": "OR",
"conditions": [
{
"displayName": "CPU usage is increasing at a high rate",
"conditionThreshold": {
"aggregations": [
{
"alignmentPeriod": "900s",
"perSeriesAligner": "ALIGN_PERCENT_CHANGE",
}],
"comparison": "COMPARISON_GT",
"duration": "180s",
"filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" AND resource.type=\"gce_instance\"",
"thresholdValue": 0.5,
"trigger": {
"count": 1
}
}
}
],
}
Política de agregação de grupo
Essa política de alertas monitora se a utilização média da CPU em um cluster do Google Kubernetes Engine excede um limite:
{
"displayName": "CPU utilization across GKE cluster exceeds 10 percent",
"combiner": "OR",
"conditions": [
{
"displayName": "Group Aggregate Threshold across All Instances in Group GKE cluster",
"conditionThreshold": {
"filter": "group.id=\"3691870619975147604\" AND metric.type=\"compute.googleapis.com/instance/cpu/utilization\" AND resource.type=\"gce_instance\"",
"comparison": "COMPARISON_GT",
"thresholdValue": 0.1,
"duration": "300s",
"trigger": {
"count": 1
},
"aggregations": [
{
"alignmentPeriod": "60s",
"perSeriesAligner": "ALIGN_MEAN",
"crossSeriesReducer": "REDUCE_MEAN",
"groupByFields": [
"project"
]
},
{
"alignmentPeriod": "60s",
"perSeriesAligner": "ALIGN_SUM",
"crossSeriesReducer": "REDUCE_MEAN"
}
]
},
}
],
}
Essa política pressupõe a existência do grupo a seguir:
{
"name": "projects/a-gcp-project/groups/3691870619975147604",
"displayName": "GKE cluster",
"filter": "resource.metadata.name=starts_with(\"gke-kuber-cluster-default-pool-6fe301a0-\")"
}
Para identificar os campos equivalentes para os grupos, liste os detalhes do grupo usando a APIs Explorer na página de referência project.groups.list.
Política de verificação de tempo de atividade
O status das verificações de tempo de atividade é exibido na página Verificações de tempo de atividade, mas é possível configurar uma política de alertas para que o Cloud Monitoring envie uma notificação se a verificação falhar.
Por exemplo, o JSON a seguir descreve uma verificação de tempo de atividade HTTPS no site do Google Cloud. A política de alertas verifica a disponibilidade a cada cinco minutos.
A verificação de tempo de atividade foi criada com o console do Google Cloud. A representação JSON foi criada listando as verificações de tempo de atividade no projeto usando a API Monitoring. Veja uptimeCheckConfigs.list
.
Também é possível criar verificações de tempo de atividade com a API Monitoring.
{
"name": "projects/a-gcp-project/uptimeCheckConfigs/uptime-check-for-google-cloud-site",
"displayName": "Uptime check for Google Cloud site",
"monitoredResource": {
"type": "uptime_url",
"labels": {
"host": "cloud.google.com"
}
},
"httpCheck": {
"path": "/index.html",
"useSsl": true,
"port": 443,
"authInfo": {}
},
"period": "300s",
"timeout": "10s",
"contentMatchers": [
{}
]
}
Para criar uma política de alertas para uma verificação de tempo de atividade, consulte a verificação de tempo de atividade por UPTIME_CHECK_ID
. Esse ID é definido quando a verificação é criada; ele aparece como o último componente do campo name
e é visível na interface do usuário como Check ID
no resumo da configuração. Se você estiver usando a API Monitoring, o método uptimeCheckConfigs.create
retornará o ID.
O ID é derivado de displayName
, que foi definido na IU nesse caso.
Ele pode ser verificado listando as verificações de tempo de atividade e observando o valor name
.
O ID da verificação de tempo de atividade descrito anteriormente é uptime-check-for-google-cloud-site
.
A condição da política de alertas a seguir será atendida se a verificação de tempo de atividade falhar ou se o certificado SSL no site do Google Cloud expirar em menos de 15 dias. Se uma delas for atendida, o Monitoring enviará uma notificação para o canal de notificação especificado:
{
"displayName": "Google Cloud site uptime failure",
"combiner": "OR",
"conditions": [
{
"displayName": "Failure of uptime check_id uptime-check-for-google-cloud-site",
"conditionThreshold": {
"aggregations": [
{
"alignmentPeriod": "1200s",
"perSeriesAligner": "ALIGN_NEXT_OLDER",
"crossSeriesReducer": "REDUCE_COUNT_FALSE",
"groupByFields": [ "resource.label.*" ]
}
],
"comparison": "COMPARISON_GT",
"duration": "600s",
"filter": "metric.type=\"monitoring.googleapis.com/uptime_check/check_passed\"
AND metric.label.check_id=\"uptime-check-for-google-cloud-site\"
AND resource.type=\"uptime_url\"",
"thresholdValue": 1,
"trigger": {
"count": 1
}
}
},
{
"displayName": "SSL Certificate for google-cloud-site expiring soon",
"conditionThreshold": {
"aggregations": [
{
"alignmentPeriod": "1200s",
"perSeriesAligner": "ALIGN_NEXT_OLDER",
"crossSeriesReducer": "REDUCE_MEAN",
"groupByFields": [ "resource.label.*" ]
}
],
"comparison": "COMPARISON_LT",
"duration": "600s",
"filter": "metric.type=\"monitoring.googleapis.com/uptime_check/time_until_ssl_cert_expires\"
AND metric.label.check_id=\"uptime-check-for-google-cloud-site\"
AND resource.type=\"uptime_url\"",
"thresholdValue": 15,
"trigger": {
"count": 1
}
}
}
],
}
O filtro na condição especifica a métrica monitorada por tipo e rótulo. Os tipos de métrica são monitoring.googleapis.com/uptime_check/check_passed
e monitoring.googleapis.com/uptime_check/time_until_ssl_cert_expires
.
O rótulo de métrica identifica a verificação de tempo de atividade específica que está sendo monitorada.
Neste exemplo, o campo de rótulo check_id
contém o ID de verificação de tempo de atividade.
AND metric.label.check_id=\"uptime-check-for-google-cloud-site\"
Consulte Como monitorar filtros para mais informações.
Política de integridade do processo
Uma política de integridade do processo poderá notificar você se o número de processos correspondentes a um padrão cruzar um limite. Isso pode ser usado para informar, por exemplo, que um processo parou de ser executado.
Essa política de alertas faz com que o Monitoring envie uma notificação para o canal de notificação especificado quando nenhum processo correspondente à string nginx
, em execução como usuário www
, estiver disponível por mais de cinco minutos:
{
"displayName": "Server health",
"combiner": "OR",
"conditions": [
{
"displayName": "Process 'nginx' is not running",
"conditionThreshold": {
"filter": "select_process_count(\"has_substring(\\\"nginx\\\")\", \"www\") AND resource.type=\"gce_instance\"",
"comparison": "COMPARISON_LT",
"thresholdValue": 1,
"duration": "300s"
}
}
],
}
Para mais informações, consulte Integridade do processo.
Proporção da métrica
Recomendamos que você use a linguagem de consulta do Monitoring (MQL) para criar políticas de alertas baseadas em proporção. Embora a API Cloud Monitoring seja compatível com a criação de algumas proporções baseadas em filtro, o MQL oferece uma solução mais flexível e robusta:
- Para ver exemplos de políticas de proporção baseadas em MQL, consulte Exemplos de políticas de alertas da MQL.
- Para informações sobre como criar políticas de alertas com o MQL, consulte Políticas de alertas com o MQL.
- Para informações sobre gráficos ou proporções de monitoramento de métricas, consulte Proporções de métricas.
Esta seção descreve uma proporção baseada em filtro.
Com a API, é possível criar e visualizar uma política que calcula a proporção de duas métricas relacionadas e é acionada quando essa proporção ultrapassa um limite. As métricas relacionadas precisam ter o mesmo MetricKind
. Por exemplo, é possível criar uma política de alertas baseada em proporção se as duas métricas forem de medidas.
Para determinar o MetricKind
de um tipo de métrica, consulte a Lista de métricas.
Uma condição de proporção é uma variante em uma condição de limite de métrica, em que
a condição em uma política de proporção usa dois filtros: o filter
normal,
que atua como numerador da proporção, e um denominatorFilter
,
que atua como o denominador da proporção.
As séries temporais de ambos os filtros precisam ser agregadas da mesma forma, de modo que o cálculo da proporção dos valores seja significativo.
A condição da política de alertas é atendida quando a proporção dos filtros viola um valor limite para o intervalo de tempo definido pelo campo duration
.
A próxima seção descreve como configurar uma política de alertas que monitora a proporção de respostas de erro HTTP a todas as respostas HTTP.
Proporção de erros de HTTP
A política de alertas a seguir tem uma condição de limite criada com base na proporção entre a contagem de respostas de erro HTTP e a contagem de todas as respostas HTTP.
{
"displayName": "HTTP error count exceeds 50 percent for App Engine apps",
"combiner": "OR",
"conditions": [
{
"displayName": "Ratio: HTTP 500s error-response counts / All HTTP response counts",
"conditionThreshold": {
"filter": "metric.label.response_code>=\"500\" AND
metric.label.response_code<\"600\" AND
metric.type=\"appengine.googleapis.com/http/server/response_count\" AND
project=\"a-gcp-project\" AND
resource.type=\"gae_app\"",
"aggregations": [
{
"alignmentPeriod": "300s",
"crossSeriesReducer": "REDUCE_SUM",
"groupByFields": [
"project",
"resource.label.module_id",
"resource.label.version_id"
],
"perSeriesAligner": "ALIGN_DELTA"
}
],
"denominatorFilter": "metric.type=\"appengine.googleapis.com/http/server/response_count\" AND
project=\"a-gcp-project\" AND
resource.type=\"gae_app\"",
"denominatorAggregations": [
{
"alignmentPeriod": "300s",
"crossSeriesReducer": "REDUCE_SUM",
"groupByFields": [
"project",
"resource.label.module_id",
"resource.label.version_id"
],
"perSeriesAligner": "ALIGN_DELTA",
}
],
"comparison": "COMPARISON_GT",
"thresholdValue": 0.5,
"duration": "0s",
"trigger": {
"count": 1
}
}
}
]
}
Tipos de métrica e recurso
O tipo de métrica desta política é appengine.googleapis.com/http/server/response_count
, que tem dois rótulos:
response_code
, um inteiro de 64 bits que representa o código de status HTTP da solicitação. Essa política filtra os dados de série temporal nesse rótulo para que ele possa determinar o seguinte:- O número de respostas recebidas.
- O número de respostas de erro recebidas.
- A proporção de respostas de erro para todas as respostas.
loading
, um valor booleano que indica se o carregamento da solicitação estava sendo realizado. O rótuloloading
é irrelevante nesta política de alertas.
A política de alertas avalia os dados de resposta dos aplicativos do App Engine, ou seja, os dados originados do tipo de recurso monitorado gae_app
. Esse recurso monitorado tem três rótulos:
project_id
, o ID do projeto do Google Cloud.module_id
, o nome do serviço ou módulo no app.version_id
, a versão do app.
Para mais informações de referência sobre esses tipos de recursos monitorados e métricos, consulte métricas do App Engine na lista de métricas e a entrada gae_app
na lista de recursos monitorados.
O que esta política faz
Essa condição calcula a proporção entre respostas de erro e respostas totais. A condição será atendida se a proporção for maior que 50% (ou seja, a proporção for maior que 0,5) no período de alinhamento de 5 minutos.
Essa política captura o módulo e a versão do app que viola a condição, agrupando a série temporal em cada filtro pelos valores desses rótulos.
- O filtro na condição analisa as respostas HTTP de um app do App Engine e seleciona essas respostas no intervalo de erro, 5xx. Este é o numerador na proporção.
- O filtro de denominador na condição analisa todas as respostas HTTP de um app do App Engine.
A condição é atendida, e o Monitoring envia imediatamente uma notificação sobre o novo incidente. O intervalo de tempo permitido do campo duration
na condição é de zero segundo. Essa condição usa uma contagem trigger
de um, que é o número de série temporal que precisam violar a condição para causar o incidente. Para um aplicativo do App Engine com um único serviço,
uma contagem trigger
de um é adequada. Se você tiver um app com 20 serviços e
quiser causar um incidente se três ou mais serviços violarem a condição, use
uma contagem trigger
de três.
Como configurar uma proporção
Os filtros de numerador e denominador são exatamente os mesmos, exceto pelo fato de o filtro de condição no numerador corresponder aos códigos de resposta no intervalo de erro, e o filtro de condição no denominador corresponder a todos os códigos de resposta. As cláusulas a seguir aparecem somente na condição do numerador:
metric.label.response_code>=\"500\" AND
metric.label.response_code<\"600\"
Caso contrário, os filtros de numerador e denominador serão os mesmos.
A série temporal selecionada por cada filtro precisa ser agregada da mesma maneira para que o cálculo da proporção seja válido. Cada filtro pode coletar várias séries temporais, pois haverá uma série temporal diferente para cada combinação de valores para rótulos. Essa política agrupa o conjunto de série temporal por rótulos de recursos especificados, que particionam o conjunto de série temporal em um conjunto de grupos. Algumas das séries temporais de cada grupo correspondem ao filtro do numerador. o restante corresponde ao filtro do denominador.
Para calcular uma proporção, o conjunto de séries temporais que corresponde a cada filtro precisa ser agregado a uma única série temporal cada. Isso deixa cada grupo com duas série temporal, uma para o numerador e outra para o denominador. Em seguida, a proporção de pontos na série temporal do numerador e do denominador em cada grupo pode ser calculada.
Nessa política, as séries temporais de ambos os filtros são agregadas da seguinte maneira:
Cada filtro cria um número de série temporal alinhadas em intervalos de cinco minutos, com valores representados computando
ALIGN_DELTA
nos valores nesse período de alinhamento de cinco minutos. Esse alinhador retorna o número de respostas correspondentes nesse período de alinhamento como um número inteiro de 64 bits.As séries temporais em cada filtro também são agrupadas pelos valores dos rótulos de recurso para módulo e versão, de modo que cada grupo com contém dois conjuntos de séries temporais alinhadas, aqueles que correspondem ao filtro numerador e aqueles que correspondem ao filtro de denominador.
A série temporal em cada grupo que corresponde ao filtro do numerador ou do denominador é agregada a uma única hora somando os valores na série temporal individual usando o redutor de série cruzada
REDUCER_SUM
. Isso resulta em uma série temporal para o numerador e outra para o denominador, cada uma relatando o número de respostas em todas as séries temporais correspondentes no período de alinhamento.
Em seguida, a política calcula, para a série temporal do numerador e do denominador que representa cada grupo, a proporção dos valores. A condição da política de alertas é atendida quando a proporção é maior que 50%.