---
title: 'Konteyner Çalışma Zamanı Tespiti'
source: 'https://academia.sh/tr/kurslar/calisma-zamani-guvenligi/konteyner-calisma-zamani-tespiti'
course: 'Çalışma Zamanı Güvenliği ve Sır Yönetimi'
language: tr
updated: '2026-08-17T18:06:41+00:00'
license: 'CC BY-SA 4.0'
---

# Konteyner Çalışma Zamanı Tespiti

Bir haftalık süreç başlatma kaydında dört taban çizgisi aynı kümede koşturulur: görüntü envanteri 21 anormal olayın 5'ini yakalar ve 16'sını kaçırır, yedi günlük öğrenme 12'sini yakalar ama 9 meşru olayı yanlış pozitife çevirir, izin listesi çift olarak yazılınca yanlış pozitif 4'e iner, ikili olarak yazılınca yakalanan 6'ya düşer. Tespit gecikmesi akış kipinde 17, toplu kipte 47 saniyedir ve yakalanan 12 olayın yalnız 8'i ile 6'sı süreç hâlâ koşarken gelir; hattın taşıdığı 68.746 olayın yüzde 90,9'u hiçbir tabanda sapmaz ve görüntüyü 342 ikiliden 41 çifte daraltmak aynı üç sayıyı öğrenme penceresi kurmadan verir.

Önceki ders servis sınırında durdu: çağıran başına izin listesi otuz beş çift kapattı ve sır
deposuna giden yol kapanmadan uzadı. Sınırın **içinde** ne olduğu ise hiç sorulmadı. Bir servisin
kendi kapsülü içinde açılan bir kabuk hiçbir çağrı çiftini ihlal etmez: ağ politikası da karşılıklı
doğrulama da onu görmez, çünkü ortada bir çağrı yoktur.

Bu ders o tarafı ölçer ve ölçü birimi **süreç başlatmadır**: bir haftalık kayıtta kaç süreç başladı,
kaçı taban çizgisinden sapıyor, sapanların kaçı gerçek bir anormallik ve kaçı meşru bir değişiklik.
Konteyner çalıştırma seçenekleri — düşürülen yetenek, salt okunur kök, kullanıcı kimliği —
**Konteynerler** kursunda ölçüldü ve burada girdi olarak alınıyor. Soru başkadır: koşan konteynerin
**davranışına** bakan bir düzenek kurulduğunda üç sayı ne oluyor.

- **AD7.** Ortam öncekiyle aynıdır: dokuz servis, otuz bir kopya, bir küme. Gerçek bir konteyner
  koşturulmuyor; ölçülen şey `node` ile kurulan bir modeldir.
- **AD8.** Kayıt yalnız süreç başlatma olaylarından oluşur; dosya erişimi ve ağ bağlantısı
  modellenmiyor. Süreç sınıfı ve haftalık sayısı sabittir, aynı sınıftaki her olay aynı ikiliyi ve
  aynı ömrü taşır; gerçekte ömür bir dağılımdır.
- **AD9.** Bir olayın gerçek sınıfı modelde bilinir. Üretimde bu sınıf ancak inceleme sonrası
  bilinir; modelde bilindiği varsayılıyor ki yanlış pozitif sayılabilsin.
- **AD10.** Anormal sınıflar **model** olarak yazıldı: hangi ikilinin hangi serviste beklenmediği ve
  sürecin kaç saniye koştuğu. Hiçbir istismar adımı ya da kaçırma yöntemi yazılmaz.
- **AD11.** Öğrenme penceresi yedi gündür ve o pencereye anormal davranış karışmadığı varsayılır.
  Tespit gecikmesi hattın aşama sürelerinin toplamıdır; duvar saati ölçülmüyor.

## Kayıt ve Dört Taban Çizgisi

```js
// surec.mjs — bir haftalik surec baslatma kaydi ve dort taban cizgisi. MODELDIR, gercek kume degil.
export const KOPYA = { 'portal-onu': 6, 'abone-servisi': 4, 'faturalama': 3, 'is-emri': 3,
  'bildirim': 2, 'rapor': 2, 'sayac-toplama': 6, 'dogrulayici': 3, 'saha-senkron': 2 };
// Servis goruntusunde bulunan ikili sayisi (temel goruntu + uygulama katmani).
export const GORUNTU_IKILI = { 'portal-onu': 34, 'abone-servisi': 41, 'faturalama': 41,
  'is-emri': 38, 'bildirim': 29, 'rapor': 38, 'sayac-toplama': 44, 'dogrulayici': 29,
  'saha-senkron': 48 };
export const SERVIS = Object.keys(KOPYA);
export const kapsam = (s) => (s[1] === '*' ? SERVIS : [s[1]]);

// [ad, servis ('*' = dokuzunun hepsi), ikili, haftalik olay, gercek sinif, goruntude mi,
//  ogrenme penceresinde goruldu mu, surec omru (sn), daha erken kapatma asamasi]
export const SINIF = [
  ['uygulama girdi noktasi', '*', 'app', 620, 'mesru', 1, 1, 0, '-'],
  ['saglik yoklamasi', '*', 'saglik', 62496, 'mesru', 1, 1, 0.4, '-'],
  ['gunluk donusturucu', '*', 'gunluk', 5208, 'mesru', 1, 1, 1.2, '-'],
  ['sertifika yenileme istemcisi', '*', 'sertifika', 217, 'mesru', 1, 1, 2, '-'],
  ['gecelik yedek isi', 'sayac-toplama', 'yedek', 7, 'mesru', 1, 1, 340, '-'],
  ['zamanlanmis rapor uretimi', 'rapor', 'rapor-uret', 168, 'mesru', 1, 1, 26, '-'],
  ['aylik uzlastirma isi', 'faturalama', 'uzlastirma', 1, 'mesru', 1, 0, 880, '-'],
  ['ceyreklik arsiv isi', 'rapor', 'arsiv', 1, 'mesru', 1, 0, 410, '-'],
  ['operator tanilama kabugu', 'is-emri', 'kabuk', 4, 'mesru', 1, 0, 210, '-'],
  ['yeni surumun gecis adimi', 'abone-servisi', 'gecis', 3, 'mesru', 1, 0, 64, '-'],
  ['kapsul icinde kabuk acilisi', 'dogrulayici', 'kabuk', 6, 'anormal', 1, 0, 95, 'yapi'],
  ['goruntude olmayan ag araci', 'saha-senkron', 'ag-araci', 3, 'anormal', 0, 0, 12, 'yapi'],
  ['disaridan getirilen ikili', 'portal-onu', 'gecici-ikili', 2, 'anormal', 0, 0, 40, 'yok'],
  ['kisa omurlu zamanlayici kaydi', 'is-emri', 'zamanlayici', 1, 'anormal', 1, 0, 0.5, 'yok'],
  ['yorumlayici icinde calistirma', 'abone-servisi', 'app', 9, 'anormal', 1, 1, 6, 'kod'],
];

// Elle yazilan izin listesi iki bicimde: (servis, ikili) cifti ya da yalniz ikili adi.
export const CIFT_LISTE = new Set(['faturalama|uzlastirma', 'is-emri|kabuk']);
export const IKILI_LISTE = new Set(['uzlastirma', 'kabuk']);

export const TABAN = {
  'goruntu envanteri': (s) => !s[5],
  '7 gunluk ogrenme': (s) => !s[6],
  'ogrenme + cift listesi': (s) => !s[6] && !CIFT_LISTE.has(`${s[1]}|${s[2]}`),
  'ogrenme + ikili listesi': (s) => !s[6] && !IKILI_LISTE.has(s[2]),
};

export function olc(sapar) {
  let yakalanan = 0, kacan = 0, yanlis = 0, sapan = 0;
  const uyari = new Set(), gercek = new Set();
  for (const s of SINIF) {
    const d = sapar(s);
    if (d) { sapan += s[3]; uyari.add(`${s[1]}|${s[2]}`); if (s[4] === 'anormal') gercek.add(`${s[1]}|${s[2]}`); }
    if (s[4] === 'anormal') d ? (yakalanan += s[3]) : (kacan += s[3]);
    else if (d) yanlis += s[3];
  }
  return { sapan, yakalanan, kacan, yanlis, uyari: uyari.size, gercek: gercek.size };
}

export const gen = (B) => (h) => h.map((v, j) => j ? String(v).padStart(B[j]) : String(v).padEnd(B[0])).join('');
export const toplam = (f) => SINIF.filter(f).reduce((a, s) => a + s[3], 0);
```

Taban çizgisi bu modelde tek bir şeydir: hangi ikilinin hangi serviste meşru sayıldığı. Dört tanımın
farkı yalnız o listenin nereden geldiğidir — görüntüde bulunanlar, gözlemlenenler ve
gözlemlenenlerin üstüne iki farklı genişlikte yazılan izin listesi.

## Aynı Hafta, Dört Taban

```js
// kosum1.mjs — ayni haftalik kayit, degisen tek sey taban cizgisinin nereden geldigi
import { SINIF, SERVIS, KOPYA, GORUNTU_IKILI, TABAN, olc, gen, toplam, kapsam } from './surec.mjs';

const top = (o) => Object.values(o).reduce((a, b) => a + b, 0);
const ogr = new Set(SINIF.filter((s) => s[6]).flatMap((s) => kapsam(s).map((v) => `${v}|${s[2]}`)));
console.log(`${SERVIS.length} servis, ${top(KOPYA)} kopya; bir haftada ${toplam(() => true)} surec baslatma ` +
  `(${toplam((s) => s[4] === 'mesru')} mesru / ${toplam((s) => s[4] === 'anormal')} anormal)`);
console.log(`taban genisligi: goruntu envanteri ${top(GORUNTU_IKILI)} cift, ogrenme penceresi ${ogr.size} cift\n`);

const yt = gen([26, 11, 7, 16, 7, 14]);
console.log(yt(['taban cizgisi', 'yakalanan', 'kacan', 'yanlis pozitif', 'uyari', 'gercek uyari']));
for (const [ad, sapar] of Object.entries(TABAN)) {
  const r = olc(sapar);
  console.log(yt([ad, r.yakalanan, r.kacan, r.yanlis, r.uyari, r.gercek]));
}
```

```
9 servis, 31 kopya; bir haftada 68746 surec baslatma (68725 mesru / 21 anormal)
taban genisligi: goruntu envanteri 342 cift, ogrenme penceresi 38 cift

taban cizgisi               yakalanan  kacan  yanlis pozitif  uyari  gercek uyari
goruntu envanteri                   5     16               0      2             2
7 gunluk ogrenme                   12      9               9      8             4
ogrenme + cift listesi             12      9               4      6             4
ogrenme + ikili listesi             6     15               4      5             3
```

Birinci satır tam olarak okunması gereken yerdir. Görüntü envanteri tabanı **hiç yanlış pozitif
üretmiyor** — sıfır — ve bu, gündelik gösterge tablosunda kusursuz bir katman gibi görünür. Aynı
satırda kaçan olay on altıdır, yani yirmi bir anormal olayın dörtte üçü. Nedeni dar bir tanım değil,
geniş bir tanım olmasıdır: taban çizgisi üç yüz kırk iki çifttir ve servis görüntüsünde duran her
ikili meşru sayıldığı için görüntüde zaten bulunan bir kabuğun açılması tabanı hiç ihlal etmez.
Sıfır yanlış pozitif burada bir başarı ölçüsü değil, tabanın genişliğinin işaretidir.

İkinci satır tabanı otuz sekiz çifte indiriyor ve yakalanan olay beşten on ikiye çıkıyor. Bedel aynı
satırda yazılı: dokuz meşru olay yanlış pozitife dönüşüyor ve bu dokuz olay rastgele değil, **dört
ayrı türden** geliyor. Aylık uzlaştırma ile çeyreklik arşiv işi öğrenme penceresine hiç girmedi;
operatör tanılama kabuğu bir mühendisin gerçekten yaptığı iştir; geçiş adımı bir dağıtımın normal
parçasıdır. Uyarı sütunu operatörün gördüğü sayıyı verir: sapan olaylar sekiz ayrı gruba düşer ve
dördü gerçektir, yani uyarıların yarısı incelemeden sonra kapatılacak kayıtlardır.

## İzin Listesinin Genişliği

Üçüncü ve dördüncü satır aynı kusuru iki farklı genişlikte kapatıyor. Çift listesi `servis|ikili`
yazar, ikili listesi yalnız ikili adını; ikisi de aynı iki yanlış pozitifi kapatır ve yanlış pozitif
dokuzdan dörde iner.

Fark yakalanan sütunundadır. Çift listesinde yakalanan on iki kalır; ikili listesinde altıya düşer.
Kaybedilen altı olay, doğrulayıcı servisinde açılan kabuktur — listeye `kabuk` yazıldığı anda o
ikili **dokuz servisin dokuzunda** meşrulaşır. İki satır arasındaki fark bir sütundur ve bedeli
yakalanan olayın yarısıdır. Muafiyetin kapsadığı kümeyi saymadan yazmak, bu kursun ilk dersindeki uç
bazlı muafiyetle aynı hatadır: liste bir ayar değil, kapsamı ölçülmesi gereken bir envanterdir.

## Gecikme ve Hattın Taşıdığı Olay

Tespit gecikmesi dört aşamanın toplamıdır: olay tamponu, gönderim penceresi, kural değerlendirme ve
bildirim. Gönderim penceresi akış kipinde sıfır, toplu kipte otuz saniyedir.

```js
// kosum2.mjs — tespit gecikmesi, hattin tasidigi olay ve tabani goruntuden daraltmak
import { SINIF, SERVIS, KOPYA, GORUNTU_IKILI, TABAN, olc, gen, toplam, kapsam } from './surec.mjs';

// Hat asamalari: olay tamponu 2 sn + gonderim penceresi 0/30 sn + degerlendirme 3 sn + bildirim 12 sn
const AKIS = 2 + 0 + 3 + 12, TOPLU = 2 + 30 + 3 + 12;
const sapar = TABAN['ogrenme + cift listesi'];
const yak = SINIF.filter((s) => s[4] === 'anormal' && sapar(s));
const yg = gen([32, 7, 8, 14, 15]);
console.log(yg(['yakalanan anormal sinif', 'olay', 'omur sn', `akis ${AKIS} sn`, `toplu ${TOPLU} sn`]));
for (const s of yak) console.log(yg([s[0], s[3], s[7], s[7] > AKIS ? 'evet' : 'hayir', s[7] > TOPLU ? 'evet' : 'hayir']));
const say = (b) => yak.filter((s) => s[7] > b).reduce((a, s) => a + s[3], 0);
const yt = yak.reduce((a, s) => a + s[3], 0);
console.log(`surec hala kosarken gelen tespit: akis ${say(AKIS)}/${yt} olay, toplu ${say(TOPLU)}/${yt} olay`);

const olay = toplam(() => true), kopya = Object.values(KOPYA).reduce((a, b) => a + b, 0);
const saglik = toplam((s) => s[2] === 'saglik'), r = olc(sapar);
const oran = olay / kopya / (7 * 24 * 3600 / 30), surum = 2 * SERVIS.length;
console.log(`\nhattin tasidigi olay ${olay}/hafta; saglik yoklamasinin payi ${saglik} olay ` +
  `(%${(100 * saglik / olay).toFixed(1)}) ve hicbir tabanda sapmiyor`);
console.log(`bu tabanda sapan olay ${r.sapan} (%${(100 * r.sapan / olay).toFixed(3)}); 30 sn pencerede kopya basina ` +
  `beklenen olay ${oran.toFixed(2)}, sikistirma katsayisi ${Math.max(1, oran).toFixed(2)} -> gecikme ${AKIS} yerine ${TOPLU} sn`);
console.log(`haftada ${surum} surum, servis basina dagitim araligi ${(7 * SERVIS.length / surum).toFixed(1)} gun: taban ` +
  `goruntu ozetine baglanirsa 7 gunluk ogrenme penceresi yarida kesilir, servise baglanirsa her ` +
  `yeni ikili haftada ${toplam((s) => s[2] === 'gecis')} yanlis pozitif uretir`);

const MINIMAL = new Set(SINIF.filter((s) => s[4] === 'mesru').flatMap((s) => kapsam(s).map((v) => `${v}|${s[2]}`)));
MINIMAL.delete('is-emri|kabuk');
const m = olc((s) => kapsam(s).some((v) => !MINIMAL.has(`${v}|${s[2]}`)));
const gt = Object.values(GORUNTU_IKILI).reduce((a, b) => a + b, 0);
console.log(`\ngoruntu ${gt} ikiliden ${MINIMAL.size} cifte daraltilirsa (tanilama kabugu cikarilir):`);
const yz = gen([26, 11, 7, 16, 7]);
console.log(yz(['taban cizgisi', 'yakalanan', 'kacan', 'yanlis pozitif', 'uyari']));
for (const [ad, o] of [['ogrenme + cift listesi', r], ['minimal goruntu envanteri', m]])
  console.log(yz([ad, o.yakalanan, o.kacan, o.yanlis, o.uyari]));
const asama = {};
for (const s of yak) asama[s[8]] = (asama[s[8]] || 0) + s[3];
console.log(`yakalanan ${yt} olayin erken kapatma asamasi: ${Object.entries(asama).map(([a, n]) => `${a} ${n}`).join(', ')}; ` +
  `kacan ${r.kacan} olay tek sinif: ${SINIF.find((s) => s[4] === 'anormal' && !sapar(s))[0]}, erken asama kod`);
```

```
yakalanan anormal sinif            olay omur sn    akis 17 sn    toplu 47 sn
kapsul icinde kabuk acilisi           6      95          evet           evet
goruntude olmayan ag araci            3      12         hayir          hayir
disaridan getirilen ikili             2      40          evet          hayir
kisa omurlu zamanlayici kaydi         1     0.5         hayir          hayir
surec hala kosarken gelen tespit: akis 8/12 olay, toplu 6/12 olay

hattin tasidigi olay 68746/hafta; saglik yoklamasinin payi 62496 olay (%90.9) ve hicbir tabanda sapmiyor
bu tabanda sapan olay 16 (%0.023); 30 sn pencerede kopya basina beklenen olay 0.11, sikistirma katsayisi 1.00 -> gecikme 17 yerine 47 sn
haftada 18 surum, servis basina dagitim araligi 3.5 gun: taban goruntu ozetine baglanirsa 7 gunluk ogrenme penceresi yarida kesilir, servise baglanirsa her yeni ikili haftada 3 yanlis pozitif uretir

goruntu 342 ikiliden 41 cifte daraltilirsa (tanilama kabugu cikarilir):
taban cizgisi               yakalanan  kacan  yanlis pozitif  uyari
ogrenme + cift listesi             12      9               4      6
minimal goruntu envanteri          12      9               4      5
yakalanan 12 olayin erken kapatma asamasi: yapi 9, yok 3; kacan 9 olay tek sinif: yorumlayici icinde calistirma, erken asama kod
```

Üst tablo tespitin ne işe yaradığını ayırıyor. Akış kipinde yakalanan on iki olayın sekizinde uyarı
süreç hâlâ koşarken gelir; toplu kipte bu sayı altıya iner. Kalanlarda uyarı gelmediği için değil,
**geç geldiği** için bir müdahale noktası yoktur: ağ aracı on iki saniye koşup çıkmıştır,
zamanlayıcı kaydı yarım saniye. Bu iki sınıf için tespit bir önleme değil, bir kayıttır.

Orta blok hattın fiyatını yazıyor. Haftada altmış sekiz bin yedi yüz kırk altı olay toplanıyor ve
bunun yüzde doksan virgül dokuzu sağlık yoklamasıdır: her kopyada beş dakikada bir koşan, hiçbir
tabanda sapmayan bir süreç. Sapan olay on altıdır, yani toplanan hacmin yüzde sıfır virgül sıfır iki
üçü. Otuz saniyelik toplu gönderim bu hacmi küçültmüyor: kopya başına pencereye düşen beklenen olay
sayısı birden küçük olduğu için sıkıştırma katsayısı birde kalır ve otuz saniyelik gecikme
karşılıksız kalır. Üçüncü satır tabanın ne kadar dayandığını söylüyor: haftada on sekiz sürüm
çıkarken taban görüntü özetine bağlanırsa hiçbir yedi günlük pencere kapanmaz, servise bağlanırsa
pencere kapanır ama her yeni ikili bir yanlış pozitif üretir. Taban çizgisi bir kez kurulup
bırakılan bir şey değil, dağıtım hızına bağlı bir bakım kalemidir.

## Daha Erken Nerede Kapanırdı

Son tablonun iki satırı üç sayının üçünde de aynı: on iki yakalanan, dokuz kaçan, dört yanlış
pozitif. Üstteki satır bir öğrenme penceresi, bir izin listesi ve bir bakım takvimi gerektiriyor;
alttaki satır yalnızca görüntünün daraltılmasını — üç yüz kırk iki ikili yerine uygulamanın
gerçekten koşturduğu kırk bir çift. Aynı üç sayı, bir çalışma zamanı düzeneği olmadan, **yapı
aşamasında** ve kalıcı olarak elde ediliyor, üstelik bir uyarı grubu daha az.

Erken aşama dağılımı aynı sonucu ikinci kez söylüyor. Yakalanan on iki olayın dokuzu yapı aşamasında
kapatılabilir: doğrulayıcıda kabuk bulunmasaydı altı olay, saha senkronunda ağ aracı bulunmasaydı üç
olay hiç doğmayacaktı. Kalan üç olay için erken aşama yoktur — dışarıdan getirilen ikili ve
zamanlayıcı kaydı ancak koşan bir düzeneğin görebileceği kalemlerdir. **Katmanın ölçüsü on iki
değil, üçtür.**

Kaçan dokuz olay ters yönü söylüyor. Yorumlayıcı içinde çalıştırma yeni bir süreç başlatmaz;
uygulamanın kendi ikilisi zaten koşmaktadır. Süreç davranışına bakan bir düzenek, süreç doğurmayan
bir davranışı tanım gereği kaçırır; bu kalem kod aşamasına aittir.

## Özet

- Bir haftalık kayıtta 68.746 süreç başlatma var; 21'i anormal. 342 çift genişliğindeki görüntü
  envanteri tabanı 5 olay yakalar, 16'sını kaçırır ve sıfır yanlış pozitif üretir — bu sıfır dar
  değil, **geniş** bir tanımın işaretidir.
- Yedi günlük öğrenme tabanı 38 çifte iner, yakalananı 12'ye çıkarır ve 9 meşru olayı yanlış
  pozitife çevirir: nadir işler, operatör tanılaması ve yeni sürümün geçiş adımı.
- İzin listesi `servis|ikili` çifti olarak yazılınca yanlış pozitif 4'e iner ve yakalanan 12 kalır;
  yalnız ikili adıyla yazılınca yanlış pozitif yine 4'tür ama yakalanan 6'ya düşer.
- Tespit gecikmesi akış kipinde 17, toplu kipte 47 saniyedir; yakalanan 12 olayın 8'i ile 6'sı süreç
  hâlâ koşarken gelir. Toplu gönderim bu olay yoğunluğunda hiçbir sıkıştırma sağlamaz.
- Hattın taşıdığı olayın yüzde 90,9'u sağlık yoklamasıdır; sapan pay yüzde 0,023'tür. Haftada 18
  sürüm çıkarken görüntü özetine bağlı bir taban hiç tamamlanmaz.
- Görüntüyü 41 çifte daraltmak aynı üç sayıyı yapı aşamasında verir. Yakalanan 12 olayın 9'u yapı
  aşamasında kapatılabilir; yalnız çalışma zamanında kapatılabilen pay 3 olaydır.

## Sonraki Adım

Bu dersin bütün ölçümü konteyner **koşmaya başladıktan sonra** yapıldı: süreç başladı, olay
toplandı, kural değerlendirildi ve on yedi ya da kırk yedi saniye sonra bir uyarı üretildi.
Doğrulayıcıda kabuğun bulunması ve otuz bir kopyanın hangi ayrıcalıklarla koştuğu ise koşum
başlamadan önce belliydi; bunların hepsi kümeye bir nesne gönderildiği anda okunabilen alanlardır.
Sonraki ders o anı ölçer: kabul denetleyicisi kuralları yirmi iki küme nesnesi üzerinde koşturulur,
zorlama kipine geçildiğinde kaç dağıtımın reddedileceği ve bunların kaçının **meşru** olduğu
sayılır. Reddin kime ve ne zaman değdiği de aynı tabloda yazılır: kaç ekip etkileniyor ve aynı kural
hattın hangi aşamasında kimseyi bekletmeden koşabilirdi.
