İçeriğe geç
mcpd
daemon yok
Kaynak

İzleyiciler ve uyarılar

İzlemeye değer bir koşul, izleniyor. mcpd bir zamanlayıcıyla değerlendirir, bulduğunu mandallar ve size bir kez söyler.

İzleyici nedir

İzleyici, mcpd'nin bir zamanlayıcıyla kendine sorduğu kayıtlı bir sorudur: bu projedeki hata oranı son beş dakikada yüzde beşin üstünde mi? Bu puanlayıcının ortalaması üzerinde anlaştığımız sayının altında mı? Arayüzün okuduğu deponun aynısını okur, yani bir izleyici ancak kendinizin de bakabileceği bir şeyi öne sürebilir.

Siz birini yapılandırana kadar izleyiciler kapalıdır. mcpd sizin için bir eşik tahmin etmez, çünkü kimsenin seçmediği bir eşik kimsenin güvenmediği bir eşiktir.

Monitor panel

6 watched · every 60s

Error rate P95 latency Hourly cost Run count No tool loop Not a refusal

Error rate

Threshold 5%

Two readings in the middle are —: too few runs in the window to judge. The lamp stays lit through them.

A monitor panel of six annunciator windows. The error-rate window lights when the measured rate crosses five percent, stays lit through two windows that hold too few runs to judge, and clears only when a later reading genuinely falls back under the threshold.

Mandallanır

Bir koşul sürerken her değerlendirmede tetiklenen bir izleyici bir gün içinde susturulur; susturulmuş bir izleyici ise hiç izleyici olmamasından kötüdür, çünkü kapsam varmış gibi görünür. Bu yüzden mcpd durumu değil geçişi bildirir: soruna girerken bir kez, çıkarken bir kez ve arada hiç.

Sessizlik iyileşme değildir

İnsanlara kesintiye mal olan kural budur. Trafik durduğunda pencere yargıya varmaya yetmeyecek kadar az çalıştırma tutar; akla ilk gelen uygulama da “bir sorun yok” deyip uyarıyı temizler. Oysa istek karşılamayı bırakmış bir ajan, hatadan kurtulma değil hatanın kendisidir.

İçinde çok az çalıştırma olan bir pencere, duran bir uyarıyı tam olduğu yerde bırakır. Bir izleyici yalnızca arkasında yeterli örnek olan bir okuma eşiğin içine döndüğünde normale döner.

Aynı gerekçe min_samples değerini belirler. Sakin bir saatteki tek bir başarısız çalıştırma yüzde yüz hata oranıdır ve mcpd buna kusur demeyecektir. Varsayılan yirmidir.

Neler izlenebilir

İzlenenÖlçtüğü
error_rate Penceredeki toplam çalıştırmaya oranla başarısız çalıştırmalar.
latency_p95 Doksan beşinci yüzdelik çalıştırma süresi, milisaniye olarak.
cost Penceredeki toplam harcama, fiyat kitabının para biriminde.
score_mean scorer_id ile adlandırılan tek bir puanlayıcının ortalaması. Bir gecikme grafiğinin göremediği kalite regresyonunu yakalayan budur.
trace_count Penceredeki çalıştırmalar. Susmuş bir hattı yakalamak için below ile izleyin.
step_count_divergence Penceredeki, kendi tanımına göre alışılmadık sayıda adım atan çalıştırmalar. Buradaki tek izleyici olarak ölçtüğü şeyin biriminde bir eşiği yoktur. Kalıcı çalıştırmaları okur, trace'leri değil.
run_repetition Bir çalıştırmanın kendini ne kadar tekrarladığı: penceredeki çalıştırmalar üzerinden, herhangi birinin kendi tanımındaki tek bir düğümde yaptığı en yüksek deneme sayısının ortalaması. 1, hiçbir düğümün iki kez çalışmadığı anlamına gelir. Kalıcı çalıştırmaları okur, trace'leri değil.

Eşik yanlış soruyken bir hedef

İzleyici, hata oranının şu anda yüzde beşin üstünde olup olmadığını sorar. SLO daha yararlı bir şey sorar: söz verdiğimiz hedefi kaçıracak mıyız ve oraya ne hızla gidiyoruz.

Fark önemlidir, çünkü bir eşik iki dakikalık bir sıçramayı yavaş bir sızıntıdan ayıramaz ve bu ikisi zıt karşılıklar ister. Eşiği sızıntıyı yakalayacak kadar sıkı ayarlayın, sıçrama sizi sabahın üçünde arar. Sıçramayı uyuyarak geçirecek kadar gevşek ayarlayın, sızıntı bir hafta boyunca sürer.

Bütçe ve onu tüketme hızı

Otuz gün üzerinden 0.995 hedefi, çalıştırmaların binde beşinin başarısız olabileceğini söyler. Bu binde beşlik pay hata bütçesidir. 1'lik bir tüketim hızı onu tam otuz günde harcar; 10'luk bir tüketim hızı üç günde harcar.

mcpd tüketimi aynı anda iki pencerede ölçer ve yalnızca ikisi de aynı şeyi söylediğinde devreye girer: son bir saatte 14,4x üzerinde ve son altı saatte 6x üzerinde. İki durumu ayıran budur. Beş dakikalık bir kesinti bir saatlik sayıyı oynatır, altı saatliği oynatamaz, yani çağrı çıkarmaz. Bütün öğleden sonra süren bir sızıntı ikisini birden oynatır.

Ona güvenmeden önce bilmeye değer: %99,5 hedefinde bu eşikler yaklaşık %7,2 hata oranına karşılık gelir. Sabit %5 başarısızlık oranı bütçeyi on kat hızlı tüketir ve onu erken bitirir, ama kimseyi uyandırmaz. Bunun için budget_remaining değerini izleyin ve daha erken haberdar olmak istiyorsanız bir score_mean veya error_rate izleyicisi bulundurun.

{
  "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 her hedefi başarı oranı, kalan bütçe oranı ve iki tüketim hızıyla birlikte döndürür. POST /v1/api/slos/{id}/ack birini onaylar. İzleyicilerle tam olarak aynı şekilde mandallanır ve onaylanırlar; yargıya varmak için fazla ince bir pencere de duran bir uyarıyı hiç temizlemez.

budget_remaining, bütçe aşıldığında sıfırda durmak yerine negatife geçer. Sıfır ile "hedefi yüz katıyla kaçırdık" farklı durumlardır ve sayı hangisi olduğunu söyler.

Bir tane yapılandırmak

İzleyiciler komut satırında değil bir JSON dosyasında durur, çünkü bir eşik, bir pencere ve bir karşılaştırma tek bir seçeneğe sığmaz ve kod gibi gözden geçirilmelidir. Dosya bir Kubernetes ConfigMap olarak olduğu gibi bağlanır.

{
  "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
    }
  ]
}

izleyiciler kurulu olarak başlatın

mcpd serve --config-file ./mcpd.json

Bilinmeyen bir anahtar yok sayılmak yerine başlangıcı düşürür. threshold içindeki, sessizce hiçbir şeyi izlemeyen bir yazım hatası mevcut en kötü sonuçtur, bu yüzden mcpd onu sesli olarak reddeder.

Bir izleyicinin tanımını değerlendirmeden saklamak için "enabled": false ayarlayın. Kaç tanesinin kurulu olduğunu mcpd config yazdırır.

Bir geçiş nereye gider

Her geçiş yapılı alanlar olarak loglanır: izleyici kimliği, proje, eşik ve ölçülen değer. Böylece bir log hattı onu bir cümleyi ayrıştırmadan yönlendirebilir. Zaten bir tane çalıştırıyorsanız bütün tümleştirme budur.

Bir izleyiciye webhook verin, mcpd geçişi ayrıca POST etsin. Gövde bilerek geneldir: Slack, PagerDuty, Opsgenie ve her iş akışı aracı gelen bir webhook kabul eder; payload'ı bunlardan birine göre biçimlendirmek, zamanla eskiyen bir dizi sağlayıcı tümleştirmesini sürdürmek demek olurdu.

{
  "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"
}

Başarısız bir teslim loglanır ve düşürülür. Yeniden denemek ya değerlendirme döngüsünü engellerdi ya da kalıcı bir giden kuyruk gerektirirdi; sessizce geride kalabilen bir uyarı yolu ise görünür biçimde bir iletiyi kaçırandan kötüdür.

Okumak ve onaylamak

GET /v1/api/monitors her izleyiciyi mandallanmış koşuluyla, son okumasıyla ve ne zaman devreye girdiğiyle birlikte döndürür.

POST /v1/api/monitors/{id}/ack birini onaylar. Onaylamak, koşul temizlenmiş gibi yapmadan geçişi susturur: izleyici hâlâ eşiği aşarken onaylanmış kalır ve sayı toparlandığında kendiliğinden normale döner. Kimsenin susturmayı geri almayı hatırlaması gerekmez.

İzleyici durumu bellekte tutulur ve her açılışta okumalardan yeniden kurulur. Kalıcı değildir, çünkü çoktan toparlanmış bir uyarıyı dirilten bir yeniden başlatma, yeniden değerlendiren bir yeniden başlatmadan daha kötü bir hatadır.

Sonraki

  • Bir score_mean izleyicisinin baktığı puanlayıcılar: Regresyon testi.
  • Hiçbir izleyicinin kapsamadığı, mcpd'nin kendi sağlığı: İşletme.
  • Her seçenek ve dosya ayarı: Yapılandırma.