Monitores e alertas
Uma condição que vale acompanhar, acompanhada. O mcpd avalia em um temporizador, trava o que encontra e avisa você uma vez.
O que é um monitor
Um monitor é uma pergunta guardada que o mcpd faz a si mesmo em um temporizador: a taxa de erro deste projeto está acima de cinco por cento nos últimos cinco minutos? A média deste avaliador está abaixo do número que combinamos? Ele lê o mesmo armazenamento que a interface lê, então um monitor só pode afirmar algo que você mesmo poderia ter consultado.
Monitores ficam desligados até você configurar um. O mcpd não adivinha um limiar por você, porque um limiar que ninguém escolheu é um limiar em que ninguém confia.
Monitor panel
6 watched · every 60s
Error rate
Threshold 5%
Two readings in the middle are —: too few runs in the window to judge. The lamp stays lit through them.
Ele trava
Um monitor que dispara a cada avaliação enquanto uma condição persiste é silenciado em um dia, e um monitor silenciado é pior que monitor nenhum, porque parece cobertura. Então o mcpd relata a transição e não o estado: uma vez na entrada do problema, uma vez na saída, e nada no meio.
Silêncio não é recuperação
Esta é a regra que custa interrupções às pessoas. Quando o tráfego para, a janela guarda execuções de menos para julgar, e a implementação óbvia relata “nada de errado” e limpa o alerta. Mas um agente que parou de atender requisições é a falha, e não a recuperação dela.
Uma janela com execuções de menos dentro dela deixa um alerta de pé exatamente onde ele estava. Um monitor volta ao nominal só quando uma leitura com amostras suficientes atrás dela retorna para dentro do limiar.
O mesmo raciocínio define min_samples. Uma execução falha em
uma hora parada é uma taxa de erro de cem por cento, e o mcpd não vai chamar
isso de falha. O padrão é vinte.
O que pode ser acompanhado
| Observação | O que mede |
|---|---|
error_rate | Execuções falhas sobre o total de execuções da janela. |
latency_p95 | Duração de execução no percentil noventa e cinco, em milissegundos. |
cost | Gasto total na janela, na moeda da tabela de preços. |
score_mean |
Média de um avaliador, nomeado por scorer_id. É esta que
pega uma regressão de qualidade que um gráfico de latência não
enxerga.
|
trace_count | Execuções na janela. Acompanhe com below para pegar um pipeline que ficou mudo. |
step_count_divergence | Execuções da janela que deram um número de passos incomum para a própria definição. É a única vigilância daqui sem limiar na unidade daquilo que mede. Lê execuções duráveis, não traces. |
run_repetition | O quanto uma execução se repete: a média, sobre as execuções da janela, do maior número de tentativas que alguma delas fez em um mesmo nó da sua definição. 1 significa que nenhum nó rodou duas vezes. Lê execuções duráveis, não traces. |
Um objetivo, quando um limiar é a pergunta errada
Um monitor pergunta se a taxa de erro está acima de cinco por cento agora. Um SLO pergunta algo mais útil: vamos perder a meta que prometemos, e com que rapidez estamos indo para lá.
A diferença importa porque um limiar não distingue uma oscilação de dois minutos de um vazamento lento, e os dois pedem respostas opostas. Aperte o limiar o bastante para pegar o vazamento e a oscilação chama você às três da manhã. Afrouxe-o o bastante para dormir apesar da oscilação e o vazamento corre por uma semana.
O orçamento, e a taxa em que ele queima
Um objetivo de 0.995 ao longo de trinta dias diz que meio por
cento das execuções pode falhar. Esse meio por cento é o orçamento de erro.
Uma taxa de queima de 1 o gasta exatamente ao longo dos trinta dias; uma
taxa de queima de 10 o gasta em três.
O mcpd mede a queima em duas janelas ao mesmo tempo e só dispara quando as duas concordam: mais rápido que 14,4x na última hora e mais rápido que 6x nas últimas seis. É isso que separa os dois casos. Uma interrupção de cinco minutos move o número de uma hora e não consegue mover o de seis, então não chama ninguém. Um vazamento que corre a tarde toda move os dois.
Vale saber antes de você depender disto: em um objetivo de 99,5% esses
limiares equivalem a uma taxa de erro de cerca de 7,2%. Uma taxa constante
de 5% de falha queima o orçamento dez vezes rápido demais e vai esgotá-lo
cedo, mas não acorda ninguém. Acompanhe budget_remaining para
isso, e mantenha um monitor de score_mean ou de
error_rate se quiser saber antes.
{
"slos": [
{
"id": "support-availability",
"name": "99.5% of support runs succeed over 30 days",
"project": "support-desk",
"objective": 0.995,
"window_days": 30,
"min_samples": 20,
"webhook": "https://hooks.example.com/mcpd"
}
]
} GET /v1/api/slos devolve cada objetivo com a taxa de sucesso
dele, a fração de orçamento que sobrou e as duas taxas de queima.
POST /v1/api/slos/{id}/ack reconhece um. Eles travam e
são reconhecidos exatamente como os monitores, e uma janela fina demais para
julgar nunca limpa um alerta de pé.
budget_remaining fica negativo quando o orçamento é gasto além
da conta, em vez de parar em zero. Zero e "errou a meta por um fator de cem"
são situações diferentes, e o número diz qual é.
Configurar um
Monitores moram em um arquivo JSON e não na linha de comando, porque um limiar, uma janela e uma comparação não cabem em uma opção e deveriam passar por revisão como código. O arquivo monta como um ConfigMap do Kubernetes sem mudança nenhuma.
{
"monitor_interval_seconds": 60,
"monitors": [
{
"id": "support-error-rate",
"name": "Support agent error rate above 5%",
"project": "support-desk",
"watch": "error_rate",
"compare": "above",
"threshold": 0.05,
"window_seconds": 300,
"min_samples": 20,
"webhook": "https://hooks.example.com/mcpd"
},
{
"id": "relevance-regression",
"name": "Answer relevance fell below 0.8",
"project": "support-desk",
"watch": "score_mean",
"scorer_id": "answer_relevance",
"compare": "below",
"threshold": 0.8,
"window_seconds": 3600
}
]
} inicie com os monitores armados
mcpd serve --config-file ./mcpd.json
Uma chave desconhecida faz a partida falhar em vez de ser ignorada. Um erro
de digitação em threshold que silenciosamente não observa nada
é o pior desfecho disponível, então o mcpd o recusa em voz alta.
Defina "enabled": false para manter a definição de um monitor
sem avaliá-lo. mcpd config imprime quantos estão armados.
Para onde vai uma transição
Toda transição é logada com o id do monitor, o projeto, o limiar e o valor medido como campos estruturados, para que um pipeline de logs possa encaminhá-la sem interpretar uma frase. Se você já roda uma, essa é a integração inteira.
Dê um webhook a um monitor e o mcpd também envia a transição por
POST. O corpo é genérico de propósito: Slack, PagerDuty, Opsgenie e toda
ferramenta de fluxo de trabalho aceitam um webhook de entrada, e moldar o
payload para uma delas significaria manter um conjunto de integrações de
fornecedor que envelhecem.
{
"monitor_id": "support-error-rate",
"name": "Support agent error rate above 5%",
"project": "support-desk",
"condition": "tripped",
"watch": "error_rate",
"threshold": 0.05,
"value": 0.5,
"samples": 40,
"detail": "error rate is 0.5000, threshold above 0.0500, over 40 run(s)",
"at": "2026-08-28T02:13:54.687391446Z"
} Uma entrega que falha é logada e descartada. Tentar de novo ou bloquearia o laço de avaliação ou exigiria uma fila de saída durável, e um caminho de alerta que pode ficar para trás em silêncio é pior que um que visivelmente perdeu uma mensagem.
Ler e reconhecer
GET /v1/api/monitors devolve todo monitor com a condição travada
dele, a última leitura e quando ele disparou.
POST /v1/api/monitors/{id}/ack reconhece um.
Reconhecer silencia a transição sem fingir que a condição passou: o monitor
fica reconhecido enquanto ainda estiver em violação, e volta ao nominal
sozinho quando o número se recupera. Ninguém precisa lembrar de tirar o
silêncio.
O estado de um monitor fica em memória e é reconstruído a partir das leituras a cada partida. Ele não é persistido, porque um reinício que ressuscita um alerta que já se recuperou é uma falha pior que um reinício que reavalia.
A seguir
-
Os avaliadores que um monitor de
score_meanacompanha: Testes de regressão. - A saúde do próprio mcpd, que monitor nenhum cobre: Como executar.
- Toda opção e todo ajuste de arquivo: Configuração.