İzleme sisteminin başarısı topladığı metrik sayısıyla değil, gerçekten önemli bir şey olduğunda sizi zamanında haberdar etmesiyle ölçülür. Yüz grafiği olan ama gece üçte disk dolduğunda susan bir kurulum, işe yaramaz.
Önce dışarıdan bakın
En değerli kontrol en basit olanıdır: sunucunun dışından, düzenli aralıklarla siteye HTTP isteği atmak. Sunucunun içinde çalışan bir ajan, sunucu tamamen düştüğünde size haber veremez. Dış kontrolde bakılacaklar:
- HTTP durum kodu 200 mü?
- Yanıt süresi eşiğin altında mı?
- Sayfada beklenen bir metin geçiyor mu? (Sunucu 200 dönüp boş sayfa da verebilir.)
- SSL sertifikasının bitmesine kaç gün kaldı?
Kontrol sıklığı bir dakika, uyarı için iki ardışık başarısızlık şartı iyi bir başlangıçtır. Tek seferlik ağ dalgalanmasında gece yarısı uyanmazsınız.
Dış kontrolü kendiniz kurmak
Hazır bir izleme servisi kullanmıyorsanız, başka bir makinede dakikada bir çalışan tek satır bile işi görür:
curl -fsS --max-time 10 https://ornek.com/ | grep -q "Sepetim" || bildirim-gonder
Üç parçanın da görevi var: -f sunucu 5xx döndüğünde çıkış kodunu bozar,
--max-time asılı kalan bağlantıyı keser, grep ise sayfanın boş
değil gerçekten dolu geldiğini doğrular. Sertifika için ayrı bir satır yeter:
echo | openssl s_client -connect ornek.com:443 -servername ornek.com 2>/dev/null | openssl x509 -noout -enddate
Bu kontrolü izlediğiniz sunucunun üzerinde çalıştırmayın. Aynı makinede duran bir kontrol, makine düştüğünde sizinle birlikte susar. Bir VDS'iniz varsa ikinci bir küçük sunucu ya da bir bulut örneği bu iş için fazlasıyla yeterlidir.
İzlenecek yedi metrik ve eşikleri
| Metrik | Uyarı | Kritik | Neden |
|---|---|---|---|
| Disk doluluğu | %80 | %90 | Dolu diskte veritabanı yazamaz, site durur |
| Inode kullanımı | %80 | %90 | Yer varken de dosya oluşturulamaz hale gelir |
| Bellek (takas kullanımı) | Sürekli artış | Takas aktif kullanımda | Takasa düşen sistem çok yavaşlar |
| Yük ortalaması | Çekirdek sayısı | 2 × çekirdek | İşler kuyrukta bekliyor demektir |
| Servis durumu | — | Durdu | Web, veritabanı, posta servisleri |
| Sertifika süresi | 21 gün | 7 gün | Süre dolduğunda site erişilemez olur |
| Yedek işi | — | Başarısız veya atlandı | Sessiz başarısızlık en tehlikelisidir |
Disk için mutlak eşik yerine eğilim izlemek daha iyidir: "mevcut hızla 48 saat içinde dolacak" uyarısı, %80 eşiğinden daha erken ve daha anlamlıdır.
Inode'u unutmayın
Disk yüzdesi %40 görünürken "no space left on device" hatası alan sunucular çoğunlukla
inode tükenmesi yaşar. Sebebi genellikle milyonlarca küçük dosyadır: oturum dosyaları,
önbellek klasörü, temizlenmeyen kuyruk dizinleri. df -i komutu bu tabloyu
gösterir ve izleme listesinde disk yüzdesinin hemen yanında olmalıdır.
Inode tükendiğinde suçluyu bulmak için dizinleri dosya sayısına göre sıralayın:
for d in /var/*; do echo "$(find "$d" -xdev -type f 2>/dev/null | wc -l) $d"; done | sort -rn | head
Sonuç çoğunlukla /var/lib/php/sessions, /var/spool ya da bir
uygulamanın önbellek dizinini gösterir. Çözüm dosyaları elle silmek değil, oturum ömrünü
ve önbellek temizleme işini düzeltmektir; elle silinen dizin iki hafta sonra geri gelir.
Elle bakarken kullanılacak komutlar
Bir uyarı geldiğinde sunucuya bağlanıp ilk beş dakikada bakılacaklar hep aynıdır. Bu listeyi ezberlemek, panik anında zaman kazandırır:
| Soru | Komut |
|---|---|
| Disk ve inode ne durumda? | df -h · df -i |
| Bellek gerçekten dolu mu, önbellek mi? | free -m |
| Yük kaç, kaç çekirdek var? | uptime · nproc |
| Hangi süreç yiyor? | top -o %CPU · ps aux --sort=-rss | head |
| Servisler ayakta mı? | systemctl is-active nginx mariadb php-fpm |
| Port dinleniyor mu? | ss -tlnp |
| Son bir saatte ne hata düştü? | journalctl -p err --since "1 hour ago" |
| Disk mi bekletiyor? | iostat -x 2 içindeki %util |
free -m çıktısında used değil available sütununa bakın;
Linux boş belleği disk önbelleği olarak kullanır ve bu tamamen normaldir. Gerçek darlık
işareti, takas alanının aktif olarak yazılıp okunmasıdır — vmstat 2
çıktısındaki si ve so sütunları sıfırdan farklıysa sistem
gerçekten sıkışmıştır.
Uygulama seviyesinde iki metrik
- Hata oranı. Toplam isteklerin yüzde kaçı 5xx dönüyor? Normal seviyeyi bilmeden eşik koyamazsınız; bir hafta ölçüp temel çizgiyi çıkarın.
- Yanıt süresi yüzdelikleri. Ortalama yanıt süresi yanıltıcıdır. p95 ve p99 değerlerine bakın: kullanıcıların en yavaş yüzde beşi ne yaşıyor? Ortalama iyi görünürken p99'un beş saniye olması yaygındır.
Alarm yorgunluğu gerçek bir risktir
Gereksiz uyarı, uyarı yokluğundan daha tehlikelidir; çünkü ekip bir süre sonra hepsini görmezden gelmeye başlar. Üç kural:
- Her uyarı bir eylem gerektirmeli. Karşılığında yapılacak bir şey yoksa o bir uyarı değil, bir grafiktir.
- Kendiliğinden düzelen durumlar uyarı üretmemeli. Gecikme (örneğin beş dakika sürmesi şartı) ekleyin.
- Uyarıları önceliklendirin. Gece uyandıracak olanlar ile sabah bakılacaklar ayrı kanallardan gelsin.
İzleme sisteminin kendisini kim izliyor?
Sessiz kalan bir izleme kurulumu, "her şey yolunda" ile "izleme çalışmıyor" arasındaki farkı size söyleyemez. Çözüm ters mantıkla çalışan bir kontroldür: yedek işi, cron görevleri ve ajanlar başarıyla bittiklerinde dışarıdaki bir uca ben yaşıyorum sinyali gönderir; sinyal beklenen sürede gelmezse uyarı üretilir. Yedeklemede bu düzeneğin kritik olma sebebi, başarısızlığın çoğunlukla gürültüsüz olmasıdır — ayrıntısı yedekleme yazısında.
Ayrıca uyarı kanalının kendisini ayda bir sınayın. Bilerek eşiği düşürüp bir uyarı tetikleyin ve mesajın gerçekten telefonunuza düştüğünü görün. Süresi dolmuş bir web kancası ya da spam klasörüne düşen bir e-posta, kesinti anında fark edilecek en kötü sürprizdir.
Sık yapılan üç hata
- Eşikleri temel çizgi ölçmeden koymak. Belirtisi: kurulumun ilk günü onlarca uyarı gelmesi. Bir hafta yalnız veri toplayın, eşiği gerçek dağılıma göre belirleyin.
- Yalnız sunucuyu izleyip işi izlememek. CPU, disk ve bellek yeşilken ödeme sağlayıcısına giden çağrılar başarısız olabilir. Saatlik sipariş ya da kayıt sayısı gibi bir iş metriğini de eşiğe bağlayın.
- Uyarıyı susturup unutmak. Belirtisi: aylardır "bakım modunda" duran kurallar. Susturmaya her zaman bir bitiş tarihi verin; süre dolduğunda kural kendiliğinden geri açılsın.
Bu yaklaşım ne zaman yanlış olur
Yukarıdaki eşik tablosu tek sunucu üzerinde çalışan klasik bir web yığını içindir. Şu durumlarda tabloyu olduğu gibi uygulamayın:
- Toplu iş sunucularında yükün çekirdek sayısını aşması normaldir; orada anlamlı eşik yük değil, işin bitiş süresidir.
- Konteyner ve otomatik ölçeklenen kurulumlarda tek bir örneğin ölmesi olay değildir. Uyarıyı örneğe değil, sağlıklı örnek sayısına ve toplam hata oranına bağlayın.
- Paylaşımlı barındırmada sunucu metriklerine erişiminiz yoktur; izlenecek şey dış erişim, yanıt süresi ve disk kotasıdır.
Günlükleri metriklerin yanına koyun
Metrik "bir şey oldu" der, günlük "ne oldu" der. Bir uyarı geldiğinde ilgili zaman
aralığındaki günlüklere hızlıca bakabiliyor olmanız gerekir. En azından web sunucusu
erişim ve hata günlükleri, uygulama günlüğü ve sistem günlüğü tek bir yerden aranabilir
olsun. logrotate ayarlarını kontrol edin; sınırsız büyüyen bir günlük
dosyası, izlemek istediğiniz diski dolduran sebebin ta kendisi olabilir.
İzleme sistemi kurmadan önce: tek dosyalık eşik kontrolü
Tam bir izleme yığını kurmak zaman ister; ama disk dolmasını ya da inode tükenmesini haber almak için o yığına gerek yoktur. Aşağıdaki küçük betik, yukarıdaki tablodaki en sık dört eşiği beş dakikada bir denetler ve aşıldığında sistem günlüğüne uyarı yazar. İsterseniz bir sohbet ya da bildirim servisine de gönderir. Bir deneme sunucusunda kurup diski bilerek doldurarak sınadık.
#!/bin/bash
# /usr/local/bin/esik-kontrol
uyar() { logger -t esik-kontrol -p user.warning "$1"
[ -n "${WEBHOOK:-}" ] && curl -fsS --max-time 10 -d "text=$(hostname): $1" "$WEBHOOK" >/dev/null; }
df -P -x tmpfs -x devtmpfs | awk 'NR>1 {sub("%","",$5); if ($5+0 >= 85) print $6, $5}' |
while read -r yol yuzde; do uyar "disk $yol %$yuzde"; done
df -P -i -x tmpfs -x devtmpfs | awk 'NR>1 && $5!="-" {sub("%","",$5); if ($5+0 >= 85) print $6, $5}' |
while read -r yol yuzde; do uyar "inode $yol %$yuzde"; done
read -r yuk _ < /proc/loadavg; cekirdek=$(nproc)
awk -v y="$yuk" -v c="$cekirdek" 'BEGIN{exit !(y > c*1.5)}' && uyar "yük $yuk (çekirdek $cekirdek)"
kullanilabilir=$(awk '/MemAvailable/ {print int($2/1024)}' /proc/meminfo)
[ "$kullanilabilir" -lt 200 ] && uyar "kullanılabilir bellek ${kullanilabilir} MB"
exit 0
Cron yerine systemd zamanlayıcısı kullanmanın iki faydası vardır: her çalışmanın çıktısı ve çıkış kodu günlükte durur, ve systemctl list-timers bir sonraki çalışmayı gösterir. İki küçük birim dosyası yeter:
# /etc/systemd/system/esik-kontrol.service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/esik-kontrol
# /etc/systemd/system/esik-kontrol.timer
[Timer]
OnBootSec=2min
OnUnitActiveSec=5min
[Install]
WantedBy=timers.target
systemctl daemon-reload
systemctl enable --now esik-kontrol.timer
Denemede 24 GB'lık diske 18 GB'lık bir dosya yazıp doluluğu %90'a çıkardık; servisi elle tetiklediğimizde journalctl -t esik-kontrol çıktısında disk / %90 satırı belirdi. Dosyayı silince uyarı da kesildi. Siz de kurulumdan sonra bu provayı bir kez yapın: hiç uyarı üretmemiş bir kontrolün çalıştığını bilemezsiniz.
Bu betik dış kontrolün yerini tutmaz. Sunucu tamamen kapandığında kendi kendine haber veremez; dışarıdan HTTP kontrolü ve sertifika bitiş kontrolü (SSL sertifika kontrolü aracıyla elle de bakabilirsiniz) yine gereklidir. Betik, o dış kontrolün göremediği iç tükenmeleri erken yakalamak içindir.
Olay sonrası inceleme
Her kesintiden sonra üç soruyu yazılı cevaplayın: Ne oldu? Neden fark etmemiz bu kadar sürdü? Bir dahakine daha erken fark etmek için hangi kontrolü ekliyoruz? Üçüncü sorunun cevabı bir izleme kuralına dönüşmüyorsa inceleme yarım kalmıştır.
Bu düzeneği kurmak zaman ister; yönetim yükünü üstlenmek istemiyorsanız paylaşımlı barındırma veya yönetilen altyapı tarafında izleme sağlayıcıdadır. Kendi sunucunuzu işletiyorsanız, izlemeyi ilk gün listesinin bir maddesi olarak görün.
Sık sorulan sorular
Sunucuda disk dolduğunda nasıl uyarı alırım?
En basit yol, disk doluluğunu düzenli aralıklarla ölçüp eşik aşıldığında günlüğe ya da bir bildirim servisine yazan bir betiktir. Bu yazıdaki betik systemd zamanlayıcısıyla beş dakikada bir çalışır ve %85 eşiğinde uyarır. Daha büyük kurulumlarda doluluk hızına göre uyaran bir izleme sistemi tercih edin.
Cron mu systemd timer mı kullanmalıyım?
İkisi de çalışır. systemd zamanlayıcısı her çalışmanın çıktısını ve çıkış kodunu günlükte tutar, sunucu kapalıyken kaçırılan çalışmaları isteğe bağlı telafi eder ve bir sonraki çalışma zamanını systemctl list-timers ile gösterir. Tek satırlık basit işler için cron yeterlidir.
Yük ortalaması kaç olursa sorun vardır?
Tek bir sayı yoktur; yük ortalamasını çekirdek sayısına bölerek okuyun. Uzun süre çekirdek sayısının 1,5 katını aşan yük, işlemlerin işlemci ya da disk beklediğini gösterir. Kısa süreli tepeler normaldir; uyarıyı kalıcı durumlara göre kurun.
- #izleme
- #uyarı
- #operasyon
İzleme betiğinizi kendi sunucunuzda mı çalıştırmak istiyorsunuz? VDS paketlerimizde kök erişimi sizdedir; systemd, günlükler ve izleme yazılımları tamamen sizin kontrolünüzdedir.
VDS paketlerine bakın