---
title: 'Gösterge Tabloları ve Uyarılar'
source: 'https://academia.sh/tr/kurslar/basarim-ve-izleme/gosterge-tablolari-ve-uyarilar'
course: 'Başarım Karşıt Kalıpları ve İzleme'
language: tr
updated: '2026-08-17T18:10:59+00:00'
license: 'CC BY-SA 4.0'
---

# Gösterge Tabloları ve Uyarılar

Toplanan ölçütün karara çevrilmesi: gösterge tablosu ile uyarının ayrı sorular yanıtladığının gösterilmesi, bir ay boyunca eşik ve pencere çiftlerinin taranarak yanlış uyarı ile kaçırılan olayın sayılması, eşiği yükseltmenin olay kaçırdığının ve pencereyi uzatmanın yalnız kısa gürültüyü kestiğinin ölçülmesi ve eşiğin K01'in aylık kesinti bütçesinden tüketim hızı olarak türetilmesi.

Önceki iki ders neyin, hangi biçimde ve ne bedele toplanacağını kararlaştırdı. Toplanan sayı henüz
kimseye bir şey söylemiyor. İki yoldan biriyle karara dönüşür: bir yerde çizilir ve ona bakan biri
okur, ya da bir eşiği aşınca bakmayan birini çağırır. İki yol aynı sayıyı kullanır ve **aynı eşikle
çalışmaz**.

Bu ders ikisini ayırır, sonra çağıran yolun tek parametresini — eşiği — bir tarama ile sınar ve
nereden geldiğini Sistem Tasarımına Giriş kursunun aylık kesinti bütçesine bağlar.

## İki Ayrı Soru

Bir **gösterge tablosu** (dashboard) zaten bakmakta olan birinin sorusunu yanıtlar. Sorusu şudur:
şu an olağan mı, ve olağan değilse hangi yönde. Bu yüzden her panelin yanında **beklenen aralık**
yazılır; aralıksız bir çizgi grafiği yalnız bir şeklin yukarı ya da aşağı gittiğini gösterir ve
karar taşımaz.

Bir **uyarı** (alert) bakmayan birini çağırır. Sorusu başkadır: şimdi bir şey yapılmalı mı. Buradan
tek kural çıkar — **her uyarı bir eyleme bağlıdır.** Karşılığında yapılacak bir iş yoksa toplanan
ölçüt gösterge tablosuna girer, uyarıya değil. Bu ayrım araç seçimiyle ilgili değildir; iki ayrı
soruya iki ayrı yanıt üretmekle ilgilidir.

İlk ekranın içeriği önceki dersin kategori listesinden çıkar: beş kategoriden birer ölçüt, ölçülen
yükle birlikte. Bir başarım paneli yanında bir kullanım paneli olmadan okunamaz, çünkü aynı yanıt
süresi 513,89 istek/s ile gece yarısı arasında aynı şeyi anlatmaz. **Panelin beklenen aralığı ile
uyarı eşiği aynı sayı değildir:** aralık "olağan mı" sorusunu, eşik "birini uyandırmalı mıyım"
sorusunu yanıtlar ve ikincisi her zaman daha geniştir.

## Eşik Bir Tarama İşidir

Bir eşik iki hatayla ölçülür. **Yanlış uyarı**, gerçek bir olay yokken tetiklenen uyarıdır ve
bedeli doğrudandır: her biri bir kişinin dikkatini alır, biriktiğinde uyarıların hepsinin
güvenilirliğini düşürür. **Kaçırılan uyarı**, gerçek bir olayda tetiklenmeyen uyarıdır ve bedeli
bütçeden ödenir.

Aşağıdaki düzenek bir **modeldir**: bir ayın 43.200 dakikasının her biri için hata sayısı tohumlu
tam sayı aritmetiğiyle üretilir, altı gerçek olay bilinen bir takvimle yerleştirilir (IZ6) ve
gürültü ayrı bir varsayımla tanımlanır (IZ7). Model gerçek bir arıza dağılımını öngörmez; sınadığı
şey, aynı veri üzerinde farklı eşik ve pencere çiftlerinin ne yaptığıdır.

```js
// uyari/tarama.mjs — uyari esigi taramasi MODELI. Bir ayin her dakikasi icin hata sayisi
// tohumlu tam sayi aritmetigiyle uretilir; her esik-pencere cifti icin yanlis uyari,
// kacirilan olay ve algilama gecikmesi sayilir.
const DAKIKA = 43_200;            // K01: 30 gunluk ay
const ISTEK_DK = 30_833;          // K01: 513,89 istek/s x 60
const TOHUM = 20260731;
let s = TOHUM;
const rast = (n) => Math.floor((((s = (s * 1664525 + 1013904223) >>> 0) / 2 ** 32)) * n);

// IZ6 (varsayim): ayda alti gercek olay [baslangic dakikasi, sure, siddet (binde)]
const OLAY = [[3000, 240, 8], [8000, 30, 15], [15000, 3, 30], [21000, 20, 120],
  [30000, 4, 800], [38000, 45, 400]];

// IZ7 (varsayim): gurultu modeli — taban hata ve 240 dakikada bir tek dakikalik zirve
const hata = new Array(DAKIKA);
for (let t = 0; t < DAKIKA; t += 1) {
  let h = rast(40);
  if (rast(240) === 0) h += rast(1000);
  hata[t] = h;
}
for (const [bas, sure, siddet] of OLAY)
  for (let t = bas; t < bas + sure; t += 1) hata[t] += Math.round((ISTEK_DK * siddet) / 1000);

const oran = hata.map((h) => h / ISTEK_DK);
const olayIcinde = (t) => OLAY.findIndex(([bas, sure]) => t >= bas && t < bas + sure);
const kayipDk = OLAY.reduce((a, [, sure, siddet]) => a + (sure * siddet) / 1000, 0);

console.log(`tohum ${TOHUM}, ${DAKIKA} dakika, ${OLAY.length} gercek olay, ` +
  `toplam ${OLAY.reduce((a, o) => a + o[1], 0)} dakika bozulma`);
console.log(`olaylarin butceden yedigi: ${kayipDk.toFixed(2)} dakika-esdegeri ` +
  `(K01'in ariza payi 28,2 dakika)`);
const gurultu = oran.filter((_, t) => olayIcinde(t) < 0);
console.log(`gurultu: en yuksek dakika %${(gurultu.reduce((a, c) => (c > a ? c : a), 0) * 100).toFixed(2)}, ` +
  `%0,5 esigini asan ${gurultu.filter((o) => o >= 0.005).length} dakika, ` +
  `%2 esigini asan ${gurultu.filter((o) => o >= 0.02).length} dakika`);

function tara(esik, pencere) {
  const r = { uyari: 0, yanlis: 0, yakalanan: new Set(), gecikme: [] };
  let etkin = false;
  for (let t = pencere - 1; t < DAKIKA; t += 1) {
    let hepsi = true;
    for (let k = 0; k < pencere; k += 1) if (oran[t - k] < esik) hepsi = false;
    if (hepsi === false) { etkin = false; continue; }
    if (etkin) continue;
    etkin = true;
    r.uyari += 1;
    const i = olayIcinde(t);
    if (i < 0) r.yanlis += 1;
    else if (r.yakalanan.has(i) === false) {
      r.yakalanan.add(i);
      r.gecikme.push(t - OLAY[i][0]);
    }
  }
  return r;
}

const ESIK = [0.005, 0.01, 0.02, 0.05];
const PENCERE = [1, 3, 5];
console.log(`\n${"esik".padStart(7)}${"pencere".padStart(9)}${"uyari".padStart(7)}` +
  `${"yanlis uyari".padStart(14)}${"yakalanan olay".padStart(16)}${"kacirilan".padStart(11)}` +
  `${"ort. gecikme".padStart(14)}${"kacan butce dk".padStart(16)}`);
for (const e of ESIK)
  for (const p of PENCERE) {
    const r = tara(e, p);
    const kacan = OLAY.filter((_, i) => r.yakalanan.has(i) === false)
      .reduce((a, [, sure, siddet]) => a + (sure * siddet) / 1000, 0);
    const ort = r.gecikme.length ? r.gecikme.reduce((a, c) => a + c, 0) / r.gecikme.length : 0;
    console.log(`${("%" + (e * 100).toFixed(1)).padStart(7)}${(p + " dk").padStart(9)}` +
      `${String(r.uyari).padStart(7)}${String(r.yanlis).padStart(14)}` +
      `${`${r.yakalanan.size}/${OLAY.length}`.padStart(16)}` +
      `${String(OLAY.length - r.yakalanan.size).padStart(11)}` +
      `${(ort.toFixed(1) + " dk").padStart(14)}${kacan.toFixed(2).padStart(16)}`);
  }
```

```
tohum 20260731, 43200 dakika, 6 gercek olay, toplam 342 dakika bozulma
olaylarin butceden yedigi: 26.06 dakika-esdegeri (K01'in ariza payi 28,2 dakika)
gurultu: en yuksek dakika %3.34, %0,5 esigini asan 149 dakika, %2 esigini asan 69 dakika

   esik  pencere  uyari  yanlis uyari  yakalanan olay  kacirilan  ort. gecikme  kacan butce dk
   %0.5     1 dk    155           149             6/6          0        0.0 dk            0.00
   %0.5     3 dk      6             0             6/6          0        2.0 dk            0.00
   %0.5     5 dk      4             0             4/6          2        4.0 dk            3.29
   %1.0     1 dk    131           125             6/6          0        2.0 dk            0.00
   %1.0     3 dk      5             0             5/6          1        2.0 dk            1.92
   %1.0     5 dk      3             0             3/6          3        4.0 dk            5.21
   %2.0     1 dk     74            69             5/6          1        2.4 dk            0.45
   %2.0     3 dk      4             0             4/6          2        2.0 dk            2.37
   %2.0     5 dk      2             0             2/6          4        4.0 dk            5.66
   %5.0     1 dk      3             0             3/6          3        0.0 dk            2.46
   %5.0     3 dk      3             0             3/6          3        2.0 dk            2.46
   %5.0     5 dk      2             0             2/6          4        4.0 dk            5.66
```

## İki Hatayı Aynı Anda Küçültmenin Yolu

Tablo iki eksende okunur ve ikisi aynı şey değildir.

**Eşiği yükseltmek yanlış uyarıyı da gerçek olayı da keser.** Yüzde 0,5 eşiği ve tek dakikalık
pencerede ayda 155 uyarı tetikleniyor, 149'u yanlış — günde beş kez, hiçbir şey olmadan. Eşik yüzde
5'e çıkarıldığında yanlış uyarı sıfırlanıyor, ama yakalanan olay 6'dan 3'e düşüyor ve kaçan olaylar
bütçeden 2,46 dakika yiyor. Yanlış uyarıyı eşikle kesmenin bedeli budur: gürültünün üstüne çıkan
eşik, hafif olayların da üstündedir.

**Pencereyi uzatmak yalnız kısa süreli gürültüyü keser.** Aynı yüzde 0,5 eşiğinde pencere üç
dakikaya çıkarıldığında yanlış uyarı 149'dan 0'a iniyor, altı olayın altısı da yakalanmayı
sürdürüyor ve kaçan bütçe 0,00 dakika kalıyor. Bedeli yalnızca iki dakikalık algılama gecikmesidir.
Bunun nedeni modelde yazılıdır: gürültü tek dakikalıktır, gerçek olaylar ise en az üç dakika sürer.
**Pencere, gürültünün süresinden uzun ve en kısa gerçek olaydan kısa seçilir.**

Sınırı beş dakikalık pencere gösteriyor: aynı eşikte yanlış uyarı yine 0, ama üç ve dört dakikalık
iki olay artık görünmüyor ve bütçeden 3,29 dakika kaçıyor. Pencere en kısa olayı geçtiği anda
kaçırma başlar.

Bir satır da yanıltıcı bir başarıyı gösteriyor. Yüzde 1,0 eşiği ve tek dakikalık pencerede altı
olayın altısı yakalanmış görünüyor, oysa birinci olayın şiddeti yüzde 0,8'dir ve eşiğin altında
kalır. Yakalanmasının nedeni, o olayın 240 dakikası içine bir gürültü zirvesinin denk gelmesidir.
Bu bir tanı değil rastlantıdır ve tarama tablosunda ancak nedeni bilinerek okunur.

## Eşik Nereden Gelir

Tarama en iyi çifti bulur ama eşiğin **hangi sayı** olması gerektiğini söylemez; yüzde 0,5 de yüzde
2 de savunulabilir görünür. Sayının kaynağı ölçütün kendisinde değil, hizmetin taahhüdündedir.
Sistem Tasarımına Giriş kursu aylık bütçeyi kurdu: yüzde 99,9 hedefi 43,2 dakika, bunun 15,0
dakikası planlı işlere, 28,2 dakikası arızaya. Yüzde aritmetiği burada tekrarlanmaz; bu üç sayı
girdidir. Arıza payı bir aya bölündüğünde **sürekli olarak izin verilen bir hata oranı** çıkar ve
gözlenen oranın bu orana bölümü **tüketim hızıdır**.

```js
// uyari/butce.mjs — uyari esiginin K01'in kesinti butcesinden turetilmesi: tuketim hizi,
// esigin hata orani karsiligi ve uyari tetiklendiginde harcanmis butce. Hepsi aritmetiktir.
const AY_DK = 43_200;         // K01: 30 gunluk ay (dakika)
const AYLIK = 43.2;           // K01: %99,9 icin aylik kesinti butcesi (dakika)
const ARIZA_PAYI = 28.2;      // K01: butcenin ariza payi (dakika)
const izinli = ARIZA_PAYI / AY_DK;                 // istek tabanli izin verilen hata orani
const b = (x, n = 2) => x.toFixed(n);

console.log(`aylik butce ${AYLIK} dk, ariza payi ${ARIZA_PAYI} dk, ay ${AY_DK} dk`);
console.log(`izin verilen surekli hata orani = %${b(izinli * 100, 4)} (tuketim hizi 1,0)`);

const PENCERE = [["5 dk", 5], ["1 sa", 60], ["6 sa", 360]];
console.log(`\n${"tuketim hizi".padStart(13)}${"hata orani esigi".padStart(18)}` +
  `${"ariza payi biter".padStart(18)}` +
  `${PENCERE.map(([a]) => `${a} penceresi`.padStart(16)).join("")}`);
for (const hiz of [1, 3, 6, 14.4]) {
  const oran = izinli * hiz;
  const satir = PENCERE.map(([, dk]) =>
    `%${b((100 * dk * oran) / ARIZA_PAYI)}`.padStart(16)).join("");
  console.log(`${b(hiz, 1).padStart(13)}${("%" + b(oran * 100, 3)).padStart(18)}` +
    `${(b(30 / hiz, 2) + " gun").padStart(18)}${satir}`);
}
console.log(`pencere sutunu: uyari tetiklendiginde ariza payinin ne kadari harcanmistir`);

const TARAMA = [0.005, 0.01, 0.02, 0.05];
console.log(`\nonceki taramanin esikleri butce diliyle:`);
for (const e of TARAMA)
  console.log(`  %${b(e * 100, 1)} esigi -> tuketim hizi ${b(e / izinli, 1)}, ` +
    `bu hizda ariza payi ${b(ARIZA_PAYI / (e * 1440), 2)} gunde biter`);

// IZ6 (varsayim): onceki blogun alti olayi [sure (dk), siddet (binde)]
const OLAY = [[240, 8], [30, 15], [3, 30], [20, 120], [4, 800], [45, 400]];
console.log(`\n${"olay".padStart(5)}${"sure".padStart(8)}${"siddet".padStart(9)}` +
  `${"tuketim hizi".padStart(14)}${"yedigi dk".padStart(12)}${"ariza payinin".padStart(15)}` +
  `${"bu hizda payin bitisi".padStart(23)}`);
let toplam = 0;
OLAY.forEach(([sure, siddet], i) => {
  const oran = siddet / 1000, yedi = sure * oran;
  toplam += yedi;
  console.log(`${String(i + 1).padStart(5)}${(sure + " dk").padStart(8)}` +
    `${("%" + b(oran * 100, 1)).padStart(9)}${b(oran / izinli, 1).padStart(14)}` +
    `${b(yedi).padStart(12)}${("%" + b((100 * yedi) / ARIZA_PAYI, 1)).padStart(15)}` +
    `${(b(ARIZA_PAYI / (oran * 1440), 2) + " gun").padStart(23)}`);
});
console.log(`toplam ${b(toplam)} dk, ariza payinin %${b((100 * toplam) / ARIZA_PAYI, 1)}'i; ` +
  `kalan pay ${b(ARIZA_PAYI - toplam)} dk`);
```

```
aylik butce 43.2 dk, ariza payi 28.2 dk, ay 43200 dk
izin verilen surekli hata orani = %0.0653 (tuketim hizi 1,0)

 tuketim hizi  hata orani esigi  ariza payi biter  5 dk penceresi  1 sa penceresi  6 sa penceresi
          1.0            %0.065         30.00 gun           %0.01           %0.14           %0.83
          3.0            %0.196         10.00 gun           %0.03           %0.42           %2.50
          6.0            %0.392          5.00 gun           %0.07           %0.83           %5.00
         14.4            %0.940          2.08 gun           %0.17           %2.00          %12.00
pencere sutunu: uyari tetiklendiginde ariza payinin ne kadari harcanmistir

onceki taramanin esikleri butce diliyle:
  %0.5 esigi -> tuketim hizi 7.7, bu hizda ariza payi 3.92 gunde biter
  %1.0 esigi -> tuketim hizi 15.3, bu hizda ariza payi 1.96 gunde biter
  %2.0 esigi -> tuketim hizi 30.6, bu hizda ariza payi 0.98 gunde biter
  %5.0 esigi -> tuketim hizi 76.6, bu hizda ariza payi 0.39 gunde biter

 olay    sure   siddet  tuketim hizi   yedigi dk  ariza payinin  bu hizda payin bitisi
    1  240 dk     %0.8          12.3        1.92           %6.8               2.45 gun
    2   30 dk     %1.5          23.0        0.45           %1.6               1.31 gun
    3    3 dk     %3.0          46.0        0.09           %0.3               0.65 gun
    4   20 dk    %12.0         183.8        2.40           %8.5               0.16 gun
    5    4 dk    %80.0        1225.5        3.20          %11.3               0.02 gun
    6   45 dk    %40.0         612.8       18.00          %63.8               0.05 gun
toplam 26.06 dk, ariza payinin %92.4'i; kalan pay 2.14 dk
```

Birinci tablo eşiği bir zaman ölçüsüne çeviriyor. Tüketim hızı 1,0 bütçeyi tam ay sonunda bitirir;
14,4 iki gün içinde bitirir. Eşik seçmek, "hangi hızda uyandırılmak istiyorum" sorusuna yanıt
vermektir ve pencere sütunu bedelini gösterir: 14,4 hızında altı saatlik bir pencereyle beklemek,
uyarı geldiğinde arıza payının yüzde 12'sinin çoktan harcanmış olması demektir. Kısa pencere erken
uyandırır ve gürültüye açıktır; uzun pencere sessizdir ve pahalıdır. **Bu, taramada ölçülen
ödünleşimin bütçe cinsinden yazılmış hâlidir.**

İkinci blok taramanın dört eşiğini aynı dile çeviriyor ve keyfiliği ortadan kaldırıyor: yüzde 0,5
eşiği 7,7 tüketim hızı demektir, yani o oran sürerse arıza payı 3,92 günde biter. Yüzde 5 eşiği
76,6 hız ve 0,39 gündür — yani bu eşiğe kadar beklemek, ayın bütçesinin dokuz saatte tükenmesine
izin vermektir. Eşik böyle yazıldığında tartışma bir tercih tartışması olmaktan çıkar.

Üçüncü tablo kaçırmanın bedelini kalem kalem veriyor. Altı olay arıza payının yüzde 92,4'ünü yedi
ve geriye 2,14 dakika kaldı. En pahalı olay en şiddetli olan değil, şiddeti ile süresinin çarpımı
en büyük olandır: kırk beş dakika süren yüzde 40'lık olay tek başına payın yüzde 63,8'ini aldı.
Buna karşılık yüzde 0,8 şiddetindeki olay — taramada yüzde 1 ve üstü eşiklerin kaçırdığı olay —
payın yüzde 6,8'ini yedi. **Bir olayın uyarı üretmemesi onun ucuz olduğu anlamına gelmez;** hafif
ve uzun bir bozulma, kısa ve sert bir olaydan daha fazla bütçe yiyebilir. Bu yüzden bütçe tabanlı
uyarı düzeni tek bir eşik değil, biri kısa pencereli yüksek hız, öteki uzun pencereli düşük hız
olmak üzere en az iki eşik ister.

## Özet

- Gösterge tablosu bakmakta olanın "olağan mı" sorusunu, uyarı bakmayanın "şimdi bir şey yapmalı
  mıyım" sorusunu yanıtlar; panelin beklenen aralığı ile uyarı eşiği aynı sayı değildir.
- Her uyarı bir eyleme bağlıdır; karşılığında yapılacak iş yoksa ölçüt gösterge tablosuna girer.
- Eşiği yükseltmek iki hatayı birden değiştirir: yüzde 0,5 ve 1 dakikada ayda 155 uyarının 149'u
  yanlış; yüzde 5'te yanlış uyarı 0'a iner ama üç olay kaçar ve bütçeden 2,46 dakika gider.
- Pencereyi uzatmak yalnız kısa gürültüyü keser: yüzde 0,5 ve 3 dakikada yanlış uyarı 149'dan 0'a
  iner, altı olayın altısı yakalanır, bedeli 2,0 dakikalık algılama gecikmesidir. Pencere en kısa
  gerçek olayı geçerse (5 dakika) iki olay kaçar ve 3,29 dakika bütçe gider.
- Eşik bütçeden türetilir: 28,2 dakikalık arıza payı sürekli yüzde 0,0653 hata oranına denktir ve
  gözlenen oranın buna bölümü tüketim hızıdır; yüzde 0,5 eşiği 7,7 hız, yani 3,92 günde biten pay
  demektir.
- Kaçırılan olayın bedeli süre ile şiddetin çarpımıdır: 45 dakikalık yüzde 40'lık olay payın yüzde
  63,8'ini, 240 dakikalık yüzde 0,8'lik olay yüzde 6,8'ini yer.

## Sonraki Adım

Buraya kadar ölçülen her şey, sistemin gerçek trafiği altında kendiliğinden oluşan sayılardı. Bu
sayılar yalnız **olmuş olanı** anlatır: bugünkü yükte ne olduğunu söyler, yarınki yükte ne olacağını
söylemez. Uyarı eşiği bugünün trafiğine göre ayarlanmış bir eşiktir; trafik iki katına çıktığında
hangi ölçütün önce eşiği aşacağı, sistemin hangi noktada doyuma varacağı ve ani bir sıçramadan
sonra kendine gelip gelemeyeceği toplanan veriden okunamaz, çünkü o durum hiç yaşanmamıştır. Sonraki
ders bu boşluğu doldurur: yükü beklemek yerine üretir. Üç ayrı test üç ayrı soru sorar ve her biri
başka bir belirtiyi ortaya çıkarır.
