Este documento descreve estratégias que podem ser usadas para reduzir os custos de alertas.
Consolidar políticas de alerta para operar em mais recursos
Devido ao custo de US $1,50 por condição, é mais econômico usar uma política de alertas para monitorar vários recursos do que usar uma política de alertas para monitorar cada recurso. Veja estes exemplos:
Exemplo 1
Dados
- 100 VMs
- Cada VM emite uma métrica,
metric_name
metric_name
tem um rótulo com 10 valores
- Uma condição de alerta
- Condição agregada ao nível da VM
- Período de execução de 30 segundos
- Custo da condição: 1 condição * US$ 1,50 por mês = US$ 1,50 por mês
- Custo da série temporal: 100 séries temporais retornadas por período * 86.400 períodos por mês = 8,6 milhões de séries temporais retornadas por mês * US$ 0,35 por milhão de séries temporais = US$ 3,02 por mês
- Custo total: US$4,52 por mês
Exemplo 2
Dados
- 100 VMs
- Cada VM emite uma métrica,
metric_name
metric_name
tem um rótulo com 10 valores
- 100 condições
- Cada condição é filtrada e agregada a uma VM
- Período de execução de 30 segundos
- Custo da condição: 100 condições * US$ 1,50 por mês = US $150 por mês
- Custo da série temporal: 100 condições * 1 série temporal retornada por condição por período * 86.400 períodos por mês = 8,6 milhões de séries temporais retornadas por mês * 0,35 USD por milhão de séries temporais = 3,02 USD por mês
- Custo total: US$153,02 por mês
Nos dois exemplos, você monitora o mesmo número de recursos. No entanto, o Exemplo 2 usa 100 políticas de alertas, enquanto o Exemplo 1 usa apenas uma. Como resultado, o exemplo 1 é quase US $150 mais barato por mês.
Agrupar apenas o nível em que você precisa alertar
A agregação a níveis mais altos de granularidade resulta em custos mais altos do que a agregação a níveis mais baixos de granularidade. Por exemplo, a agregação no nível do projeto do Google Cloud é mais barata do que a agregação no nível do cluster, e a agregação no nível do cluster é mais barata do que a agregação no nível do cluster e do namespace.
Veja estes exemplos:
Exemplo 1
Dados
- 100 VMs
- Cada VM emite uma métrica,
metric_name
metric_name
tem um rótulo com 10 valores
- Uma condição de alerta
- Condição agregada ao nível da VM
- Período de execução de 30 segundos
- Custo da condição: 1 condição * US$ 1,50 por mês = US$ 1,50 por mês
- Custo da série temporal: 100 séries temporais retornadas por período * 86.400 períodos por mês = 8,6 milhões de séries temporais retornadas por mês * US$ 0,35 por milhão de séries temporais = US$ 3,02 por mês
- Custo total: US$4,52 por mês
Exemplo 4
Dados
- 100 VMs, em que cada VM pertence a um serviço
- Cinco serviços no total
- Cada VM emite uma métrica,
metric_name
metric_name
tem um rótulo com 10 valores
- Uma condição
- Condição agregada ao nível de serviço
- Período de execução de 30 segundos
- Custo da condição: 1 condição * US$ 1,50 por mês = US$ 1,50 por mês
- Custo da série temporal: 5 séries temporais retornadas por período * 86.400 períodos por mês = 432.000 séries temporais retornadas por mês * US$ 0,35 por milhão de séries temporais = US$ 0,14 por mês
- Custo total: US$1,64 por mês
Exemplo 5
Dados
- 100 VMs
- Cada VM emite uma métrica,
metric_name
metric_name
tem 100 rótulos com 1.000 valores cada
- Uma condição
- Condição agregada ao nível da VM
- Período de execução de 30 segundos
- Custo da condição: 1 condição * US$ 1,50 por mês = US$ 1,50 por mês
- Custo da série temporal: 100 séries temporais retornadas por período * 86.400 períodos por mês = 8,5 milhões de séries temporais retornadas por mês * US$ 0,35 por milhão de séries temporais = US$ 3,02 por mês
- Custo total: US$4,52 por mês
Compare o Exemplo 1 com o Exemplo 4: ambos os exemplos operam com os mesmos dados e têm uma única política de alerta. No entanto, como a política de alerta no Exemplo 4 é agregada ao serviço, ela é menos cara do que a política de alerta no Exemplo 1, que agrega de forma mais granular à VM.
Além disso, compare o Exemplo 1 com o Exemplo 5: neste caso, a cardinalidade da métrica no Exemplo 5 é 10.000 vezes maior que a cardinalidade da métrica no Exemplo 1. No entanto, como a política de alerta no Exemplo 1 e no Exemplo 5 é agregada à VM e o número de VMs é o mesmo nos dois exemplos, eles são equivalentes no preço.
Ao configurar as políticas de alerta, escolha os níveis de agregação que funcionam melhor para seu caso de uso. Por exemplo, se você se preocupa com alertas sobre a utilização da CPU, pode ser interessante agregar ao nível da VM e da CPU. Se você se preocupa com alertas de latência por endpoint, talvez seja melhor agregar ao nível do endpoint.
Não emitir alertas sobre dados brutos e não agregados
O monitoramento usa um sistema de métricas dimensionais, em que qualquer métrica tem um total de [cardinalidade][cardinalidade] igual ao número de recursos monitorados multiplicado pelo número de combinações de rótulos nessa métrica. Por exemplo, se você tiver 100 VMs que emitem uma métrica e essa métrica tiver 10 rótulos com 10 valores cada, a cardinalidade total será 100 * 10 * 10 = 10.000.
Como resultado da escala de cardinalidade, os alertas em dados brutos podem ser extremamente caros. No exemplo anterior, você tem 10.000 séries temporais retornadas para cada período de execução. No entanto, se você agregar à VM, só terá 100 séries temporais retornadas por período de execução, independentemente da cardinalidade do rótulo dos dados subjacentes.
A geração de alertas com dados brutos também aumenta o risco de aumento da série temporal quando as métricas recebem novos rótulos. No exemplo anterior, se um usuário adicionar um novo rótulo à métrica, a cardinalidade total vai aumentar para 100 * 11 * 10 = 11.000 séries temporais. Nesse caso, o número de séries temporais retornadas aumenta em 1.000 a cada período de execução,mesmo que a política de alertas não tenha mudado. Se você agrega à VM, apesar do aumento da cardinalidade, ainda vai receber apenas 100 séries temporais.
Filtrar respostas desnecessárias
Configure as condições para avaliar apenas os dados necessários para as necessidades de alerta. Se você não fizer nada para corrigir algo, exclua ele das suas políticas de alerta. Por exemplo, provavelmente você não precisa de alertas em uma VM de desenvolvimento de um estagiário.
Para reduzir alertas e custos desnecessários, você pode filtrar séries temporais que não são importantes. Use rótulos de metadados Google Cloud para marcar recursos com categorias e filtrar as categorias de metadados desnecessárias.
Use operadores de fluxo principal para reduzir o número de séries temporais retornadas
Se a condição usar uma consulta PromQL ou MQL, você poderá usar um operador de streams principais para selecionar um número da série temporal retornado com os valores mais altos:
Por exemplo, uma cláusula topk(metric, 5)
em uma consulta PromQL limita
o número de séries temporais retornadas para cinco em cada período de execução.
Limitar a um número máximo de séries temporais pode resultar em dados ausentes e alertas com falha, como:
- Se mais de N série temporal violarem seu limite, você não terá dados fora das principais N série temporal.
- Se uma série temporal com violação ocorrer fora das principais séries temporais N, seus incidentes poderão ser fechados automaticamente, mesmo que a série temporal excluída ainda viole o limite.
- As consultas de condição podem não mostrar um contexto importante, como a série temporal de referência que está funcionando conforme o esperado.
Para reduzir esses riscos, escolha valores grandes para N e use o operador de fluxos principais apenas em políticas de alerta que avaliam muitas série temporal, como alertas para contêineres individuais do Kubernetes.
Aumentar o período de execução (somente PromQL)
Se a condição usar uma consulta do PromQL, será possível modificar a duração do período de execução definindo o campo evaluationInterval
na condição.
Intervalos de avaliação mais longos resultam em menos séries temporais retornadas por mês. Por exemplo, uma consulta de condição com um intervalo de 15 segundos é executada duas vezes mais do que uma consulta com um intervalo de 30 segundos, e uma consulta com um intervalo de 1 minuto é executada metade das vezes que uma consulta com um intervalo de 30 segundos.