Sunucuda bir şeyler ters gittiğinde, ilk bakılacak yer her zaman olay günlükleridir. Windows Server yöneticileri olarak günün büyük bir bölümünü bu günlükleri inceleyerek geçirdiğimizi söylesek abartmış olmayız. Event Viewer (Olay Görüntüleyici) arayüzü güzel ve kullanışlıdır, ama uzak bir sunucuya bağlandığınızda, bir script içinde log analizi yapmanız gerektiğinde ya da sadece GUI açmakla vakit kaybetmek istemediğinizde komut satırı çok daha hızlı bir seçenek olur. Bu yazıda CMD üzerinden olay günlüklerini nasıl görüntüleyeceğinizi, filtreleyeceğinizi ve analiz edeceğinizi ele alacağız.
Temel Kavramlar: Windows Olay Günlüğü Yapısı
Başlamadan önce kısa bir özet geçelim. Windows olay günlükleri birkaç ana kategoriye ayrılır:
- Application: Uygulamaların ürettiği olaylar
- System: İşletim sistemi bileşenlerinin ürettiği olaylar
- Security: Güvenlik denetim olayları (başarılı/başarısız girişler, nesne erişimleri)
- Setup: Kurulum ile ilgili olaylar
- Forwarded Events: Diğer sunuculardan iletilen olaylar
Her olay kaydında şu temel bilgiler bulunur:
- Event ID: Olayın türünü tanımlayan numara
- Level: Information, Warning, Error, Critical veya Audit Success/Failure
- Source: Olayı üreten bileşen
- Date/Time: Olayın gerçekleştiği zaman
- Message: Olay hakkında detaylı açıklama
wevtutil: Olay Günlüklerinin Komut Satırı Aracı
Windows’un yerleşik aracı olan wevtutil, olay günlükleri üzerinde neredeyse her işlemi yapmanıza olanak tanır. Hem local hem de uzak sunucularda çalışır, çıktıyı XML formatında verebilir ve scripting için mükemmel bir araçtır.
Mevcut Günlükleri Listeleme
Sistemdeki tüm olay günlüklerini listelemek için:
wevtutil el
Bu komut yüzlerce sonuç döndürebilir. Sadece belirli bir konuyla ilgili günlükleri görmek için findstr ile filtreleyebilirsiniz:
wevtutil el | findstr /i "security"
wevtutil el | findstr /i "dns"
wevtutil el | findstr /i "active directory"
Belirli Bir Günlük Hakkında Bilgi Alma
Bir günlüğün boyutu, kaç kayıt içerdiği, etkin olup olmadığı gibi bilgileri görmek için:
wevtutil gl System
wevtutil gl Security
wevtutil gl Application
Bu komut size günlüğün maksimum boyutunu, dolduğunda ne yapacağını (overwrite, archive vb.) ve toplam kayıt sayısını gösterir. Özellikle Security günlüğünün dolup dolmadığını kontrol etmek için sık kullandığım bir komuttur.
Olayları Sorgulama: qe Komutu
Asıl işin göbeği qe (query events) komutudur. En temel kullanımı:
wevtutil qe System /c:10 /rd:true /f:text
Parametreleri açıklayalım:
- /c:10: Son 10 kaydı getir
- /rd:true: En yeniden en eskiye doğru sırala (reverse direction)
- /f:text: Çıktıyı okunabilir metin formatında ver (xml de seçilebilir)
Sadece hata kayıtlarını görmek için Level filtresi ekleyebilirsiniz:
wevtutil qe System /c:20 /rd:true /f:text /q:"*[System[Level=2]]"
Burada Level değerleri şöyle çalışır:
- 1: Critical
- 2: Error
- 3: Warning
- 4: Information
- 5: Verbose
Gerçek Dünya Senaryosu 1: Başarısız Giriş Denemelerini Tespit Etme
Sabah işe geldiniz, bir kullanıcı hesabının kilitlendiğini öğrendiniz. Saldırı mı yoksa kullanıcı hatası mı? Security günlüğüne bakmanız gerekiyor. Event ID 4625 başarısız oturum açma girişimlerini kaydeder.
wevtutil qe Security /c:50 /rd:true /f:text /q:"*[System[EventID=4625]]"
Daha spesifik olmak için zaman aralığı da ekleyebilirsiniz. Bugün sabah 08:00’dan itibaren olan olayları görmek için:
wevtutil qe Security /rd:true /f:text /q:"*[System[EventID=4625 and TimeCreated[@SystemTime>='2024-01-15T05:00:00.000Z']]]"
Zaman değerini UTC olarak girmeniz gerektiğini unutmayın. Türkiye UTC+3 olduğu için sabah 08:00’ı 05:00 UTC olarak yazmanız gerekir.
Hesap kilitleme olayları için Event ID 4740’ı da kontrol etmelisiniz:
wevtutil qe Security /c:20 /rd:true /f:text /q:"*[System[EventID=4740]]"
Bu çıktıdan hangi kullanıcının, hangi kaynaktan kilitlendiğini görebilirsiniz. Genellikle eski parola kayıtlı bir servisten kaynaklanan kilitleme sorunlarında bu sorgu hayat kurtarır.
Gerçek Dünya Senaryosu 2: Servis Crash Analizi
Bir uygulama sunucusunda servis sürekli çöküyor. Önce Application günlüğüne bakalım:
wevtutil qe Application /c:30 /rd:true /f:text /q:"*[System[Level=2]]"
Belirli bir kaynaktan gelen hataları filtrelemek için:
wevtutil qe Application /c:20 /rd:true /f:text /q:"*[System[Provider[@Name='MSSQLSERVER'] and Level=2]]"
Windows servis başlatma/durdurma olayları System günlüğünde tutulur. Event ID 7034 bir servisin beklenmedik şekilde sonlandığını gösterir:
wevtutil qe System /c:15 /rd:true /f:text /q:"*[System[EventID=7034]]"
Event ID 7036 ise servisin durumunun değiştiğini bildirir (başladı/durdu):
wevtutil qe System /c:30 /rd:true /f:text /q:"*[System[EventID=7036]]"
Çıktıyı Dosyaya Kaydetme ve Analiz Etme
Büyük miktarda log verisiyle çalışırken çıktıyı dosyaya yönlendirmek işinizi kolaylaştırır:
wevtutil qe System /c:500 /rd:true /f:text /q:"*[System[Level<=3]]" > C:Logssystem_errors.txt
Veya XML formatında kayıt ederek başka araçlarla işleyebilirsiniz:
wevtutil qe Security /c:1000 /rd:true /f:xml /q:"*[System[EventID=4625]]" > C:Logsfailed_logins.xml
Dosyayı kaydettikten sonra findstr ile içinde arama yapabilirsiniz:
findstr /i "administrator" C:Logsfailed_logins.txt
findstr /i "192.168" C:Logsfailed_logins.txt
eventquery.vbs ve PowerShell Olmadan Hızlı Sorgular
Bazı eski Windows Server sürümlerinde veya kısıtlı ortamlarda eventquery.vbs kullanılırdı, ancak modern sistemlerde wevtutil yeterlinin de ötesindedir. Bununla birlikte, sadece CMD kullanarak bazı hızlı analizler yapabilirsiniz.
Sistem günlüğündeki son 24 saatteki tüm hataları saymak için çıktıyı find ile işleyebilirsiniz:
wevtutil qe System /rd:true /f:text /q:"*[System[Level=2 and TimeCreated[timediff(@SystemTime) <= 86400000]]]" | find /c "Date:"
timediff fonksiyonu milisaniye cinsinden çalışır. 86400000 ms = 24 saat.
Uzak Sunucularda Olay Günlüğü Sorgulama
Bence wevtutil’in en güçlü özelliklerinden biri uzak sunucularda çalışabilmesidir. Remote Registry servisinin çalışıyor olması ve gerekli firewall kurallarının açık olması yeterlidir.
wevtutil qe System /c:20 /rd:true /f:text /r:SUNUCU-ADI /u:DOMAINkullanici /p:sifre
Parametreler:
- /r: Remote sunucu adı veya IP adresi
- /u: Kullanıcı adı
- /p: Parola
Güvenlik açısından parolayı komut satırında yazmak iyi bir pratik değildir. Bunu script içinde kullanıyorsanız, en azından credentials’ı encrypted bir dosyadan okuyun ya da Windows Credential Manager’ı kullanın. Prodüksiyon ortamlarında bu tür scriptleri bir servis hesabıyla çalıştırmanızı öneririm.
Olay Günlüğünü Temizleme
Bazen test ortamında veya sorun giderme sonrasında günlükleri temizlemeniz gerekebilir. Bu işlem için de wevtutil kullanılır:
wevtutil cl Application
wevtutil cl System
Dikkat: Security günlüğünü temizlemek için administrator yetkisi yetmez, bu işlem için “Manage auditing and security log” yetkisine sahip olmanız gerekir. Ayrıca Security günlüğünü temizlediğinizde bu işlemin kendisi Event ID 1102 ile kaydedilir, bu da adli incelemeler açısından önemlidir.
Gerçek Dünya Senaryosu 3: Sistem Yeniden Başlatma Analizi
Sunucu gece beklenmedik şekilde yeniden başlamış. Nedenini bulmak için:
wevtutil qe System /c:10 /rd:true /f:text /q:"*[System[EventID=6008]]"
Event ID 6008, sistemin düzgün kapatılmadığını gösterir. Bu kayıt varsa anormal bir kapanma (mavi ekran, güç kesintisi, ani kapanma) yaşanmıştır.
Normal yeniden başlatma logunu görmek için:
wevtutil qe System /c:10 /rd:true /f:text /q:"*[System[EventID=1074]]"
Event ID 1074 size kimin, hangi nedenle sistemi yeniden başlattığını söyler. “Windows Update” nedeniyle restart yapıldıysa buradan görebilirsiniz.
Kritik hataları (BSOD sonrası oluşan) görmek için:
wevtutil qe System /c:10 /rd:true /f:text /q:"*[System[Level=1]]"
Batch Script ile Otomatik Log Raporu
Sabah işe geldiğinizde önceki gecenin önemli olaylarını otomatik olarak raporlayan basit bir batch script:
@echo off
echo ======================================
echo GECE LOG RAPORU - %date%
echo ======================================
echo.
echo [SISTEM HATALARI - Son 12 Saat]
wevtutil qe System /rd:true /f:text /q:"*[System[Level<=2 and TimeCreated[timediff(@SystemTime) <= 43200000]]]" >> C:DailyReportreport_%date:~6,4%%date:~3,2%%date:~0,2%.txt
echo [UYGULAMA HATALARI - Son 12 Saat]
wevtutil qe Application /rd:true /f:text /q:"*[System[Level<=2 and TimeCreated[timediff(@SystemTime) <= 43200000]]]" >> C:DailyReportreport_%date:~6,4%%date:~3,2%%date:~0,2%.txt
echo [BASARISIZ GIRIS DENEMELERI - Son 12 Saat]
wevtutil qe Security /rd:true /f:text /q:"*[System[EventID=4625 and TimeCreated[timediff(@SystemTime) <= 43200000]]]" >> C:DailyReportreport_%date:~6,4%%date:~3,2%%date:~0,2%.txt
echo Rapor olusturuldu: C:DailyReport
Bu scripti Task Scheduler’a sabah 07:00’de çalışacak şekilde ekleyebilirsiniz. Her sabah masanızda hazır bir rapor sizi bekliyor olur.
Sık Kullanılan Event ID Referansı
Günlük yönetim işlerinde sık karşılaşacağınız Event ID’leri listeleyeyim:
Güvenlik Olayları (Security Log):
- 4624: Başarılı oturum açma
- 4625: Başarısız oturum açma
- 4634: Oturum kapama
- 4648: Farklı kimlik bilgileriyle oturum açma girişimi
- 4720: Kullanıcı hesabı oluşturuldu
- 4726: Kullanıcı hesabı silindi
- 4740: Kullanıcı hesabı kilitlendi
- 4767: Kullanıcı hesabı kilidi açıldı
- 4776: Domain controller kimlik doğrulama girişimi
Sistem Olayları (System Log):
- 41: Sistem beklenmedik şekilde yeniden başlatıldı
- 1074: Sistem kapatma/yeniden başlatma
- 6005: Event Log servisi başladı
- 6006: Event Log servisi durdu
- 6008: Önceki sistem kapanması beklenmedikti
- 7034: Servis beklenmedik şekilde sonlandı
- 7036: Servis durumu değişti
- 7040: Servis başlatma türü değiştirildi
Uygulama Olayları (Application Log):
- 1000: Uygulama çökmesi
- 1001: Windows Error Reporting
- 1002: Uygulama askıda kaldı
Bu Event ID’leri wevtutil sorgularında doğrudan kullanabilirsiniz:
wevtutil qe Security /c:25 /rd:true /f:text /q:"*[System[EventID=4720]]"
Yeni kullanıcı oluşturma loglarına bakmak, özellikle güvenlik denetimleri sırasında çok işe yarar. Yetkisiz hesap oluşturma girişimlerini bu şekilde tespit edebilirsiniz.
Log Formatını Anlama ve Parsing
wevtutil’in text formatındaki çıktısını okumak bazen kafa karıştırıcı olabilir. XML formatı daha yapılandırılmıştır ve script içinde parse etmek için daha uygundur:
wevtutil qe System /c:5 /rd:true /f:xml /q:"*[System[Level=2]]"
XML çıktısında her olay tagları arasında yer alır ve , gibi alt bölümlere ayrılır. Bu formatı Python veya başka bir araçla işlemek çok daha kolaydır.
Text formatında çıktı aldığınızda her olay şu yapıda gelir:
Event[0]:
Log Name: System
Source: Service Control Manager
Date: 2024-01-15T08:23:41.123
Event ID: 7036
Task: None
Level: Information
Opcode: Info
Keyword: Classic
User: N/A
User Name: N/A
Computer: SUNUCU01
Description: ...
Pratik İpuçları ve Dikkat Edilmesi Gerekenler
Yıllarca log analizi yaparak öğrendiğim birkaç önemli noktayı paylaşayım:
- Büyük sorgu yapmaktan kaçının:
/cparametresi olmadan sorgu yapmak çok büyük günlüklerde CMD penceresini dakikalarca meşgul edebilir. Her zaman bir limit koyun.
- Zaman dilimlerine dikkat edin: wevtutil zaman filtrelerinde UTC kullanır. Türkiye’de çalışıyorsanız saat farkını hesaba katmayı unutmayın.
- Security günlüğü için yetki gerekir: Security günlüğünü sorgulamak için administrator yetkisi gerekir. Standart bir kullanıcı hesabıyla bu günlüğü göremezsiniz.
- Çıktıyı pipe ile işlerken dikkatli olun: wevtutil çıktısı Unicode formatında gelir, bazı eski CMD araçları bunu düzgün işleyemeyebilir.
- Log boyutunu takip edin: Özellikle yoğun aktivite olan sunucularda Security günlüğü hızla dolabilir.
wevtutil gl Securitykomutuyla düzenli olarak kontrol edin.
- Arşivleme politikası belirleyin: Önemli sunucularda günlükleri
/overwriteyerine/archivemoduna alın, böylece eski kayıtlar otomatik olarak arşivlenir.
Sonuç
CMD üzerinden olay günlüklerini yönetmek, her Windows Server yöneticisinin bilmesi gereken temel bir beceridir. wevtutil aracı, GUI olmaksızın tüm log analizi ihtiyaçlarınızı karşılayabilecek kapasitede güçlü bir araçtır. Uzak sunucu yönetimi, otomatik raporlama scriptleri ve hızlı sorun giderme senaryolarında bu komutlar size ciddi zaman kazandırır.
Pratik yapmak için önce kendi test sunucunuzda veya bir lab ortamında bu komutları denemenizi öneririm. Özellikle güvenlik olaylarına ait sorguları ezberlemeye gerek yoktur; temel yapıyı öğrendikten sonra ihtiyacınıza göre uyarlamak çok kolay olacaktır. Zamanla sık kullandığınız sorgu kombinasyonlarını bir metin dosyasında biriktirirseniz, acil durumlarda büyük kolaylık sağlar.
Son olarak şunu söyleyeyim: Log analizi bir ateş söndürme değil, ateş önleme işidir. Bu komutları yalnızca sorun çıktığında değil, düzenli sağlık kontrolleri için de kullanın. Sabahları 5 dakikanızı ayırıp kritik sunucularınızın log özetine bakmak, büyük bir sorunu küçük bir müdahaleyle çözmenizi sağlayabilir.