Apa implikasi melebihi 4 GB dalam Windows Event Log?

12

Saya menemukan Microsoft KB ini yang mencakup pengaturan maksimum Log Event yang disarankan untuk sistem operasi hingga Windows 2008 / Vista , yang merekomendasikan maksimum 4GB, dan telah melihat beberapa referensi samar lainnya bahwa Event Log lebih besar dari 4 GB tidak direkomendasikan dalam setidaknya 2008 R2, tapi saya bertanya-tanya apa yang sebenarnya terjadi jika log peristiwa melebihi ukuran ini?

Saya telah melampaui ini pada server uji (2012 R2) dan belum memperhatikan hal seperti penggunaan memori tinggi dll. Kami tidak peduli tentang OS sebelum 2008 R2, tetapi ingin log besar karena kami mengumpulkan acara dari banyak mesin melalui Penerusan Acara Windows dan ingin memiliki semua acara di satu tempat.

lgaud
sumber
3
Saat pertanyaan Anda menggelitik saya, dan bos saya membuat saya kesal hari ini, saya akan membiarkan acara masuk di salah satu server kami tumbuh di luar kendali malam ini, dan mengirim hasilnya kembali ke jawaban saya yang ada, tetapi seperti yang saya katakan, 4 GB tidak ada batas yang sulit di OS 64 bit, dan pengalaman saya adalah bahwa bahkan aplikasi dan API 32 bit biasanya menangani file> 4 GB.
HopelessN00b
Ah, sepertinya mungkin sedikit lebih lama untuk menghasilkan file log peristiwa> 4 GB. Pengontrol domain tersibuk kami menghapus lognya 20 menit yang lalu.
HopelessN00b

Jawaban:

9

Selain performa yang mengerikan dan waktu tunggu yang konyol ketika Anda harus memuat log 4 GB dan itu akan terjadi jika Anda harus mencari melalui hal yang mengerikan, tidak banyak. Saya pikir yang terbesar yang saya lihat di lingkungan saya adalah 10 GB, dan meskipun saya menyerah menunggu untuk memuat, sepertinya tidak membahayakan apa pun.

Peringatan 4GB untuk Server 2008 adalah karena batas 32-bit yang sering dijumpai pada 4 GB. Pada sistem 64 bit, Anda seharusnya baik-baik saja untuk membiarkannya tumbuh hingga 16 TB (atau 64, tergantung), meskipun saya tidak tahu bahwa ada orang yang mendekati pengujian batas itu.

Tentu saja, jika Anda belum melakukannya, Anda akan menemukan bahwa file log yang sangat besar tidak praktis untuk digunakan - terakhir kali saya mencoba memuat file log (teks) 100 GB sederhana, bahkan tidak dapat dibuka tanpa menghentikan aplikasi yang membukanya, dan saya menduga Anda akan mengenai masalah itu sebelum 100 GB.

Pendekatan yang jauh lebih baik adalah membatasi ukuran file menjadi sesuatu yang masuk akal, dan menggunakan skrip untuk menghapusnya dari waktu ke waktu. Saya menggunakan yang di bawah ini di lingkungan saya, dikombinasikan dengan batas ukuran 1 GB pada log keamanan kami. Beberapa (well, sebagian besar) server kami menghasilkan lebih dari 3 GB acara keamanan per hari, dan kami tidak ingin menyia-nyiakan semua ruang itu pada file log besar yang akan saya hentikan sebelum menyisir, jadi skrip saya menyalin konten log ke folder lain dan kemudian hapus log kejadian untuk ditulis kembali. Dan karena folder tempat saya menyalinnya telah dicadangkan, kita selalu dapat kembali ke log jika kita membutuhkannya.

#Adapted from: http://blogs.technet.com/b/heyscriptingguy/archive/2009/04/08/how-can-i-check-the-size-of-my-event-log-and-then-backup-and-archive-it-if-it-is-more-than-half-full.aspx

Param($logName = "security",$backupFolder = "C:\backupLogs")

Function Get-EventLog([string]$logName)
{
 $log = Get-WmiObject -Class Win32_NTEventLogFile -filter "LogFileName = '$logName'"
 If($log.FileSize / $log.MaxFileSize -ge .9)
  {
   "Log is at least 90% full. Backing up now."
   Backup-EventLog($log)
  } #end if
 Else 
 { 
   "Not backed up: $logName is only " + ($log.FileSize / $log.MaxFileSize).tostring("N2") +  " percent full" 
 } #end else
} #end Get-EventLog

Function Backup-EventLog($log)
{
 $folder = Join-Path -Path $BackUpFolder -ChildPath (Get-Date).ToString("MMddyy_hhmm")
 If(-not(Test-Path $folder)) 
   { 
     New-Item -path $folder -itemtype Directory -force | out-Null
   }
  $rtn = $log.BackupEventLog("$folder\$logName.evt").ReturnValue
  If($rtn -eq 0)
    {
     $log.ClearEventLog() | out-null
    } #end if
 ELSE 
   {
    "$logName could not be cleared. Backup ended with $($rtn)" 
  }
} #end Backup-EventLog

# *** ENTRY POINT ***
Get-EventLog -logname $logname
HopelessN00b
sumber
6
Bagi siapa pun yang ingat bahwa Windows Event log adalah file yang dipetakan memori dan seluruh log dimuat ke dalam memori, batasan itu dihilangkan oleh infrastruktur logging event baru yang diperkenalkan pada Windows Vista / Server 2008. Namun, jika Anda masih menggunakan Server 2003 , Anda tidak dapat membuat log yang ukurannya melebihi 1GB karena dalam OS itu tidak ada proses yang dapat memiliki total lebih dari 1 GB file yang dipetakan memori.
Saya katakan Reinstate Monica
Anda dapat membagi file menjadi folder sesudahnya. Anda dapat menulis skrip PHP untuk melakukannya. Dan biarkan berjalan selama setengah tahun atau lebih. Itu akan membantu Anda mengatur data. Anda dapat membiarkan server internal dengan halaman PHP yang sangat mendasar yang memungkinkan Anda mengakses data dari file raksasa di folder individual, sehingga membantu Anda melihat dengan cepat data yang Anda butuhkan. Atau Anda dapat membuat program sederhana untuk melakukannya. VB.net atau C # adalah kandidat yang baik untuk itu.
Ismael Miguel
2

Jawaban lain mencakup alasan di balik ini - untuk sistem modern, sebagian besar menjaga waktu memuat dalam acara GUI viewer agak tertahankan. Menyalin log saat ini ke lokasi yang dicadangkan, lalu membersihkannya, juga bagus.

Untuk mem-parsing file log besar yang akhirnya dihasilkan, ada dua opsi bagus:

1) Mengurai log lebih cepat dari yang dapat dikelola GUI saat ini atau 2) Membagi log menjadi file terpisah.

Saya yakin ada beberapa utilitas yang mudah tersedia di luar sana untuk 2), jadi saya akan fokus pada 1).

Pertama, Powershell memiliki cmdlet yang sangat baik untuk fungsi ini yang disebut 'get-winevent'. Kinerja tercepat yang saya lihat melibatkan penggunaan tabel hash. Berikut adalah contoh yang mendapatkan semua peristiwa di log keamanan yang berkaitan dengan pengguna tertentu dari hari terakhir:

$timeframe = (get-date) - (new-timespan -day 1)
$userevt = Get-WinEvent -ComputerName <specify> -FilterHashTable @{LogName='Security'; Data='<enter username here>'; StartTime=$timeframe}

$ userevt sekarang merupakan kumpulan acara. Bergantung pada jumlah pertandingan, Anda dapat mengirimkannya ke daftar format untuk dengan mudah membaca sejumlah kecil acara. Untuk nomor medium, lakukan hal yang sama tetapi arahkan output ke file:

$userevt | format-list > <outputfile>.txt

Untuk sejumlah besar, mulailah memfilter (katakan Anda ingin komputer pemanggil untuk acara penguncian pada pengguna yang kami peroleh di atas):

$userevt | %{if ($_.message -match "Caller Computer .*") {$matches[0]}}

Ini akan menampilkan hasil garis tunggal untuk setiap acara penguncian. Proses di atas umumnya memakan waktu 1-4 menit untuk log 4GB pada 2008 R2.

Kedua, terutama untuk mesin 2003 yang mungkin harus Anda kelola, Anda dapat mengklik kanan pada file log tertentu di panel kiri di penampil acara, dan pilih 'simpan file log sebagai'.

Jika Anda menjalankan penampil acara di mesin lokal, Anda dapat menyimpan file .evt yang dapat diuraikan dengan get-winevent.

Atau, Anda dapat menyimpan file teks atau CSV (saya menemukan CSV lebih mudah) yang dapat diuraikan dengan utilitas baris perintah yang sesuai seperti grep atau findstr, atau program tertentu seperti notepad ++.

Bruno
sumber
0

Contoh dunia nyata: Kami memiliki ini terjadi dengan log Keamanan ditingkatkan menjadi ukuran 12GB untuk memungkinkan retensi 6 bulan per persyaratan kepatuhan.

Pada bulan 3 kami tidak dapat masuk ke server 2008r2 dan 2012r2 server. Log masuk akan macet di layar "Selamat Datang". Kami mencoba meningkatkan memori server menjadi 20gb untuk mengakomodasi file besar yang dibuka dan server masih marah. Kami akhirnya memutuskan untuk mengikuti rekomendasi mengelola engine 1GB dan menyesuaikannya untuk mengarsipkan file lama saat penuh versus ditimpa.

Kami memiliki skrip ini untuk membersihkan file-file lama yang lebih dari 180 hari jika kami membutuhkannya, tetapi kami mungkin dapat menyimpan file-file itu di tempatnya.

get-childitem -Path "C:\Windows\System32\winevt\Logs" |
  where-object {$_.LastWriteTime -lt (get-date).AddDays(-180)} |
  remove-item –whatif

https://www.manageengine.com/products/active-directory-audit/help/getting-started/event-log-size-retention-settings.html

Phebs
sumber