---
title: 'İzleme Kategorileri'
source: 'https://academia.sh/tr/kurslar/basarim-ve-izleme/izleme-kategorileri'
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'
---

# İzleme Kategorileri

Toplanan ölçüt kümesinin eksiksizliğinin bir kapsama ölçüsüyle sınanması: izleme ile gözlemlenebilirliğin ayrılması, hizmet erişilebilirliği, sağlık, başarım, kullanım ve güvenlik kategorilerinin sordukları soruya göre tanımlanması, bir kategori hiç toplanmadığında önceki konunun hangi tanısının yapılamaz kaldığının sayılması ve tanının tek bir ölçütle değil ölçüt bileşimiyle kurulduğunun gösterilmesi.

Önceki konu on tanı kurdu ve hepsini aynı üç adımla yürüttü: belirti bir sayıyla yazıldı, aynı
belirtiyi veren ikinci bir neden kuruldu, ikisini ayıran bir ölçüm gösterildi. Konu kapanışı bu on
dersin ortak koşulunu bıraktı — hepsi **bir ölçüm varsa** yapılabilir. O ölçümün nereden geldiği
ise hiçbir derste sorulmadı: hangi ölçütün toplandığı, hangisinin toplanmadığı ve toplanmayanın
hangi tanıyı elden aldığı hep varsayıldı.

Bu ders o boşluğu doldurur ve tek bir soruyla başlar: bir sistemden toplanan ölçüt kümesi ne zaman
**eksiksiz** sayılır? Eksiksizlik burada bir liste uzunluğu değil, bir kapsama ölçüsüdür — hangi
kategori boşsa hangi tanı yapılamaz. Ölçü bu yüzden önceki konunun on dersi üzerinde tanımlanır.

## İzleme ve Gözlemlenebilirlik

**İzleme** (monitoring) önceden belirlenmiş soruların yanıtlarını sürekli toplamaktır;
**gözlemlenebilirlik** (observability) ise önceden sorulmamış bir soruya toplanmış veriden yanıt
verilebilmesidir. Bu ders izlemeyi kurar, çünkü sorulmamış soruya yanıt verebilmenin ön koşulu
sorulmuş soruların hangi boşluğu bıraktığını bilmektir.

Bir **ölçüt** (metric) bir soruya karşılık gelir ve kategorisi o sorunun türüdür. Beş kategori
şunları sorar:

- **Hizmet erişilebilirliği** (availability): istek yanıtlanabildi mi? Terim arayüz
  erişilebilirliğiyle karıştırılmamalıdır ve kısaltılmaz; ayrım Sistem Tasarımına Giriş kursunda
  yapıldı. Ölçütleri istek başarı oranı ve kesinti dakikasıdır; ikincisi doğrudan o kursun aylık
  43,2 dakikalık kesinti bütçesini ve içindeki 28,2 dakikalık arıza payını harcar.
- **Sağlık**: hangi kopya iş alabilir durumda? Sağlık ucunun içeriği — sığ denetim, hazır olma
  denetimi, derin denetim — Dayanıklılık ve Güvenilirlik kursunda tasarlandı ve burada yeniden
  tasarlanmaz; ucun ürettiği evet-hayır burada bir izleme ölçütü olarak yerine konur.
- **Başarım**: iş ne kadar sürüyor? Yanıt süresi yüzdelikleri ve alt çağrıların süreleri.
- **Kullanım**: kaynağın ne kadarı harcandı? Doluluk, taşınan bayt, istek başına çağrı sayısı,
  bellekteki nesne sayısı, önbellek isabet oranı, taranan kayıt sayısı, müşteri başına iş payı.
- **Güvenlik**: isteği kim gönderdi ve gönderme hakkı var mıydı? Reddedilen yetkisiz istek ve hız
  sınırı tetiklenmesi.

Başarım kategorisinin tek başına okunamamasının nedeni aynı kursta ölçülmüştü: bir gecikme sayısı
hangi yükte alındığı söylenmeden okunamaz. Tepe uçtaki 513,89 istek/s ile ölçülen bir yüzdelik ile
gece yarısında ölçülen aynı yüzdelik aynı sayı değildir. Bu yüzden her başarım ölçütü yanında bir
kullanım ölçütü ister.

## Eksiksizlik Bir Kapsama Ölçüsüdür

Aşağıdaki hesap on tanıyı ve on altı ölçütü eşler, sonra her kategoriyi tek tek boşaltıp kaç tanının
yapılamaz kaldığını sayar. Eşlemenin kendisi bu dersin varsayımıdır (**IZ1**): önceki konu her tanı
için bir ayırt eden ölçüm gösterdi, aşağıdaki tablo o ölçümlerin karşılığı olan ölçütleri seçer ve
kategorilere yerleştirir. Başka bir eşleme başka sayılar verir. Çıkan sayılar hesap sınıfındadır.

```js
// izleme/kapsam.mjs — bes kategorinin eksiksizlik olcusu: Karsit Kaliplar konusundaki on tani
// hangi olcutu gerektiriyor, bir kategori hic toplanmazsa hangi tanilar yapilamaz kaliyor.
const OLCUT = {
  "istek basari orani": "erisilebilirlik",
  "kesinti dakikasi": "erisilebilirlik",
  "kopya havuz durumu": "saglik",
  "hazir olma durumu": "saglik",
  "yanit suresi yuzdeligi": "basarim",
  "depo sorgu suresi": "basarim",
  "istek basina cagri sayisi": "kullanim",
  "tasinan govde bayti": "kullanim",
  "islemci dolulugu": "kullanim",
  "havuz dolulugu": "kullanim",
  "bellekteki nesne sayisi": "kullanim",
  "onbellek isabet orani": "kullanim",
  "taranan kayit sayisi": "kullanim",
  "musteri basina is payi": "kullanim",
  "reddedilen yetkisiz istek": "guvenlik",
  "hiz siniri tetiklenmesi": "guvenlik",
};

const TANI = {
  "mesgul veritabani": ["depo sorgu suresi", "islemci dolulugu", "yanit suresi yuzdeligi"],
  "mesgul on yuz": ["tasinan govde bayti", "yanit suresi yuzdeligi"],
  "gevezelik eden g/c": ["istek basina cagri sayisi", "yanit suresi yuzdeligi"],
  "asiri veri cekme": ["tasinan govde bayti", "onbellek isabet orani"],
  "hatali nesne yaratimi": ["bellekteki nesne sayisi", "islemci dolulugu"],
  "tek parca kalicilik": ["taranan kayit sayisi", "depo sorgu suresi", "islemci dolulugu"],
  "onbelleksizlik": ["onbellek isabet orani", "islemci dolulugu", "yanit suresi yuzdeligi"],
  "gurultulu komsu": ["musteri basina is payi", "yanit suresi yuzdeligi", "hiz siniri tetiklenmesi"],
  "eszamanli g/c": ["havuz dolulugu", "hazir olma durumu", "yanit suresi yuzdeligi"],
  "yeniden deneme firtinasi": ["istek basari orani", "istek basina cagri sayisi",
    "kopya havuz durumu", "hiz siniri tetiklenmesi"],
};

const KATEGORI = [...new Set(Object.values(OLCUT))];
const kategorisi = (o) => OLCUT[o];
const tanilar = Object.keys(TANI);

console.log(`${KATEGORI.length} kategori, ${Object.keys(OLCUT).length} olcut, ${tanilar.length} tani`);
console.log(`\n${"kategori".padEnd(18)}${"olcut".padStart(7)}${"besledigi tani".padStart(16)}` +
  `${"kategori bos: dusen tani".padStart(26)}`);
const dusen = {};
for (const k of KATEGORI) {
  const olcutler = Object.keys(OLCUT).filter((o) => kategorisi(o) === k);
  dusen[k] = tanilar.filter((t) => TANI[t].some((o) => kategorisi(o) === k));
  console.log(`${k.padEnd(18)}${String(olcutler.length).padStart(7)}` +
    `${String(dusen[k].length).padStart(16)}` +
    `${`${dusen[k].length}/${tanilar.length}`.padStart(26)}`);
}
console.log(`hicbir kategori bos birakilamaz: en az yuk tasiyan kategori ` +
  `${KATEGORI.reduce((a, b) => (dusen[a].length <= dusen[b].length ? a : b))} ve o da ` +
  `${Math.min(...KATEGORI.map((k) => dusen[k].length))} taniyi dusuruyor`);

const sayim = Object.keys(OLCUT)
  .map((o) => [o, tanilar.filter((t) => TANI[t].includes(o)).length])
  .sort((a, b) => b[1] - a[1]);
const tekil = sayim.filter(([, n]) => n === 1).map(([o]) => o);
const sifir = sayim.filter(([, n]) => n === 0).map(([o]) => o);
console.log(`\nen cok paylasilan olcut = ${sayim[0][0]} (${sayim[0][1]}/${tanilar.length} tani), ` +
  `ikincisi ${sayim[1][0]} (${sayim[1][1]}/${tanilar.length})`);
console.log(`tek bir tanida gecen olcut (${tekil.length}): ${tekil.join(", ")}`);
console.log(`hicbir tanida gecmeyen olcut (${sifir.length}): ${sifir.join(", ")}`);

console.log(`\n${"tani".padEnd(26)}${"olcut".padStart(6)}${"kategori".padStart(10)}` +
  `${"ayirt eden (tek tanida gecen)".padStart(31)}`);
for (const t of tanilar) {
  const kats = new Set(TANI[t].map(kategorisi));
  const ayirt = TANI[t].filter((o) => tekil.includes(o));
  console.log(`${t.padEnd(26)}${String(TANI[t].length).padStart(6)}${String(kats.size).padStart(10)}` +
    `${(ayirt[0] ?? "-").padStart(31)}`);
}

const cift = [];
for (let i = 0; i < tanilar.length; i += 1)
  for (let j = i + 1; j < tanilar.length; j += 1) {
    const [a, b] = [tanilar[i], tanilar[j]];
    const ortak = TANI[a].filter((o) => TANI[b].includes(o));
    cift.push({ a, b, ortak });
  }
const enCok = Math.max(...cift.map((c) => c.ortak.length));
console.log(`\nen cok olcut paylasan tani ciftleri (ortak ${enCok} olcut):`);
for (const { a, b, ortak } of cift.filter((c) => c.ortak.length === enCok))
  console.log(`  ${a} / ${b} -> ortak ${ortak.join(" + ")}; ayiran ` +
    `${TANI[a].filter((o) => !ortak.includes(o)).join(" + ")} / ` +
    `${TANI[b].filter((o) => !ortak.includes(o)).join(" + ")}`);
```

```
5 kategori, 16 olcut, 10 tani

kategori            olcut  besledigi tani  kategori bos: dusen tani
erisilebilirlik         2               1                      1/10
saglik                  2               2                      2/10
basarim                 2               7                      7/10
kullanim                8              10                     10/10
guvenlik                2               2                      2/10
hicbir kategori bos birakilamaz: en az yuk tasiyan kategori erisilebilirlik ve o da 1 taniyi dusuruyor

en cok paylasilan olcut = yanit suresi yuzdeligi (6/10 tani), ikincisi islemci dolulugu (4/10)
tek bir tanida gecen olcut (7): istek basari orani, kopya havuz durumu, hazir olma durumu, havuz dolulugu, bellekteki nesne sayisi, taranan kayit sayisi, musteri basina is payi
hicbir tanida gecmeyen olcut (2): kesinti dakikasi, reddedilen yetkisiz istek

tani                       olcut  kategori  ayirt eden (tek tanida gecen)
mesgul veritabani              3         2                              -
mesgul on yuz                  2         2                              -
gevezelik eden g/c             2         2                              -
asiri veri cekme               2         1                              -
hatali nesne yaratimi          2         1        bellekteki nesne sayisi
tek parca kalicilik            3         2           taranan kayit sayisi
onbelleksizlik                 3         2                              -
gurultulu komsu                3         3         musteri basina is payi
eszamanli g/c                  3         3                 havuz dolulugu
yeniden deneme firtinasi       4         4             istek basari orani

en cok olcut paylasan tani ciftleri (ortak 2 olcut):
  mesgul veritabani / tek parca kalicilik -> ortak depo sorgu suresi + islemci dolulugu; ayiran yanit suresi yuzdeligi / taranan kayit sayisi
  mesgul veritabani / onbelleksizlik -> ortak islemci dolulugu + yanit suresi yuzdeligi; ayiran depo sorgu suresi / onbellek isabet orani
```

## Kategori Boş Kalırsa

Birinci tablo eksiksizlik ölçüsünü veriyor. **Kullanım kategorisi on tanının onunu birden
besliyor:** yalnız hizmet erişilebilirliği ve yanıt süresi toplayan bir sistemde on tanının hiçbiri
yapılamaz. Bu şaşırtıcı görünmez ama sonucu serttir — bir belirtinin nedenini bulmak kaynağın ne
kadarının harcandığını bilmeyi gerektirir, oysa kullanım ölçütleri toplanması en çok ihmal edilen
kategoridir, çünkü kimse onlara bakmadan da hizmetin ayakta olduğunu görebilir.

Başarım yedi tanıyı besliyor. Kalan üç kategori bir ya da iki tanı besliyor ve **buradaki sayının
küçük olması onları isteğe bağlı yapmaz**: erişilebilirlik hiç toplanmazsa yeniden deneme fırtınası
kendiliğinden artan yükten ayrılamaz, sağlık hiç toplanmazsa eşzamanlı girdi/çıktı ile fırtına
ayırt edilemez, güvenlik hiç toplanmazsa gürültülü komşu ile fırtına ayırt edilemez. Düşen tanılar
başka kategoriden telafi edilmiyor; bu yüzden ölçü bir toplam değil, bir kapsamadır.

İki ölçüt hiçbir tanıda geçmiyor: kesinti dakikası ve reddedilen yetkisiz istek. Bu bir eksiklik
değil, kategorinin tanımının sonucudur. **Bir kategori yanıtladığı soruyla tanımlanır, mümkün
kıldığı tanılarla değil.** Kesinti dakikası hiçbir karşıt kalıbı ayırt etmez ama aylık 43,2
dakikalık bütçeyi harcayan tek sayıdır ve o bütçe olmadan hiçbir uyarı eşiği savunulamaz. Tanı
listesine göre budanan bir ölçüt kümesi, tanı dışındaki soruları kaybeder.

Varsayımın duyarlılığı da tabloda okunuyor. IZ1'deki eşlemede işlemci doluluğu dört tanıya girdi
veriyor ve meşgul veritabanı tanısının tek kullanım ölçütüdür; o ölçüt toplanmazsa bu tanının
kullanım ayağı tümüyle kalkar. Eşlemeyi değiştirmek sütunun sayılarını değiştirir, ama hiçbir
değişiklik beş kategoriden birini tümüyle yüksüz bırakmaz.

## Tanı Ölçüt Bileşimidir

İkinci blok dersin ikinci sonucunu veriyor. Yanıt süresi yüzdeliği on tanının altısında geçiyor,
işlemci doluluğu dördünde. **En çok toplanan ölçüt en az ayırt eden ölçüttür.** Bir yanıt süresi
grafiğinin yükselmesi altı ayrı nedenin ortak belirtisidir ve tek başına hiçbirini göstermez; önceki
konunun "yavaş bir tanı değildir" cümlesinin sayısal karşılığı budur.

Yedi ölçüt tek bir tanıda geçiyor ve bunlar imza ölçütleridir: bellekteki nesne sayısı, müşteri
başına iş payı, taranan kayıt sayısı, havuz doluluğu, hazır olma durumu, kopya havuz durumu ve istek
başarı oranı. Beş tanının imza ölçütü var, beşinin yok; ikinciler yalnız **bileşimle** ayrılır. Son
iki satır bunun nasıl olduğunu gösteriyor.
Meşgul veritabanı ile önbelleksizlik iki ölçütü paylaşıyor — işlemci doluluğu ve yanıt süresi
yüzdeliği — ve ayrımı üçüncü ölçüt yapıyor: depo sorgu süresi mi büyüdü, yoksa önbellek isabet
oranı mı düştü? Aynı biçimde meşgul veritabanı ile tek parça kalıcılık depo sorgu süresi ve işlemci
doluluğunu paylaşıyor; ayrımı taranan kayıt sayısı yapıyor, çünkü tek depoya yığılmanın belirtisi
bir sorgunun kendi veri sınıfının kat kat üstünde kayıt taramasıdır.

Bu, enstrümantasyon kararının biçimini de belirler: bir ölçüt tek başına değil, ayırt ettiği çift
için toplanır. Bir ölçütün değerini "kaç tanıda geçtiği" değil, "hangi iki nedeni birbirinden
ayırdığı" verir.

## Özet

- İzleme önceden belirlenmiş soruların yanıtını toplar; gözlemlenebilirlik önceden sorulmamış bir
  soruya toplanmış veriden yanıt verebilmektir.
- Beş kategori sordukları soruyla tanımlanır: hizmet erişilebilirliği, sağlık, başarım, kullanım ve
  güvenlik; sağlık ucunun içeriği önceki kursta tasarlandı ve burada yalnız kategori olarak konur.
- Eksiksizlik bir kapsama ölçüsüdür: kullanım kategorisi on tanının onunu, başarım yedisini besler;
  erişilebilirlik bir, sağlık ve güvenlik ikişer tanı besler ve hiçbiri boş bırakılamaz.
- Kesinti dakikası ve reddedilen yetkisiz istek hiçbir tanıda geçmez ama toplanır; bir kategori
  mümkün kıldığı tanılarla değil, yanıtladığı soruyla tanımlanır.
- En çok paylaşılan ölçüt en az ayırt eden ölçüttür: yanıt süresi yüzdeliği altı tanıda geçer, bu
  yüzden tek başına hiçbirini göstermez.
- On altı ölçütten yedisi tek bir tanıda geçer ve o tanının imzasıdır; beş tanının imza ölçütü yoktur
  ve yalnız bileşimle ayrılır: meşgul veritabanı ile önbelleksizlik iki ölçütü paylaşır, ayrımı depo
  sorgu süresi ile önbellek isabet oranı yapar.

## Sonraki Adım

Bu ders on altı ölçütü bir listeye koydu ve listenin eksiksizliğini kapsamayla sınadı, ama listenin
bir bedeli olduğunu hiç hesaba katmadı. Her ölçüt üretilir, taşınır, saklanır ve okunur; her biri
bir kod yoluna eklenir ve o kod yolu tepe uçtaki 513,89 isteğin her birinde çalışır. Ölçüt sayısı
arttıkça toplanan kayıt sayısı da artar ve bir noktada izleme sisteminin ürettiği yük, izlediği
sistemin yüküyle karşılaştırılabilir hâle gelir. Sonraki ders bu bedeli sayar: bir ölçütün istek
başına ürettiği kayıt, gün başına saklanan bayt ve eklediği kod yolu bir yanda, mümkün kıldığı tanı
öbür yanda tartılır; örnekleme ile toplulaştırmanın ucuzlatırken hangi bilgiyi kaybettiği ölçülür.
