ความหมายของเกิน 4 GB ในบันทึกเหตุการณ์ Windows คืออะไร


13

ฉันพบ Microsoft KB นี้ที่ครอบคลุมการตั้งค่า Event Log ที่แนะนำสูงสุดสำหรับระบบปฏิบัติการจนถึง Windows 2008 / Vistaซึ่งแนะนำ 4GB สูงสุดและได้เห็นการอ้างอิงที่คลุมเครืออื่น ๆ ว่า Event Log ที่มีขนาดใหญ่กว่า 4 GB ไม่แนะนำอย่างน้อย 2008 R2 แต่ฉันสงสัยว่าจะเกิดอะไรขึ้นถ้าบันทึกเหตุการณ์เกินขนาดนี้

ฉันทำเกินกว่านี้ในเซิร์ฟเวอร์ทดสอบ (2012 R2) และไม่ได้สังเกตอะไรเช่นการใช้หน่วยความจำสูง ฯลฯ เราไม่สนใจเกี่ยวกับระบบปฏิบัติการก่อนปี 2008 R2 แต่ต้องการบันทึกขนาดใหญ่เพราะเรารวบรวมกิจกรรมจากเครื่องหลาย ๆ เครื่องผ่านทาง การส่งต่อเหตุการณ์ Windows และต้องการให้มีเหตุการณ์ทั้งหมดในที่เดียว


3
ตามที่คำถามของคุณทำให้ฉันประหลาดใจและหัวหน้าของฉันทำให้ฉันโกรธในวันนี้ฉันจะให้บันทึกเหตุการณ์ในเซิร์ฟเวอร์ของเราที่ไม่สามารถควบคุมได้คืนนี้และโพสต์ผลลัพธ์กลับไปยังคำตอบที่ฉันมีอยู่ แต่อย่างที่ฉันบอกว่า 4 GB ข้อ จำกัด อย่างหนักในระบบปฏิบัติการ 64 บิตและประสบการณ์ของฉันคือแม้กระทั่งแอพและบิต 32 บิตมักจัดการไฟล์> 4 GB
HopelessN00b

อาดูเหมือนว่าอาจจะนานกว่านิดหน่อยในการสร้างไฟล์บันทึกเหตุการณ์> 4 GB ตัวควบคุมโดเมนที่ยุ่งที่สุดของเราทำการล้างบันทึกเมื่อ 20 นาทีที่แล้ว
HopelessN00b

คำตอบ:


10

นอกเหนือจากประสิทธิภาพที่ยอดเยี่ยมและเวลารอคอยที่ไร้สาระเมื่อคุณต้องโหลดบันทึก 4 GB และนรกมันจะเป็นถ้าคุณต้องค้นหาสิ่งที่น่ากลัวไม่มาก ฉันคิดว่าตัวที่ใหญ่ที่สุดที่ฉันเคยเห็นในสภาพแวดล้อมของฉันคือ 10 GB และถึงแม้ว่าฉันจะยอมแพ้ในการโหลดมันก็ไม่ได้เป็นอันตรายอะไรเลย

ข้อควรระวัง 4GB สำหรับ Server 2008 เกิดจากข้อ จำกัด 32 บิตที่มักพบที่ 4 GB ในระบบ 64 บิตคุณควรจะปล่อยให้มันเติบโตถึง 16 TB (หรือ 64 ขึ้นอยู่) แต่ฉันไม่รู้ว่ามีใครเข้าใกล้การทดสอบขีด จำกัด นั้น

แน่นอนถ้าคุณยังไม่ได้พบคุณจะพบว่าไฟล์บันทึกขนาดใหญ่มากไม่สามารถใช้งานได้ - ครั้งสุดท้ายที่ฉันพยายามโหลดไฟล์บันทึกขนาด 100 GB (ข้อความ) อย่างง่ายมันไม่สามารถเปิดได้เลยหากไม่มี หยุดแอปพลิเคชันที่เปิดอยู่และฉันสงสัยว่าคุณจะประสบปัญหานี้ก่อนหน้า 100 GB

วิธีที่ดีกว่าคือการ จำกัด ขนาดไฟล์ให้เหมาะสมกับบางสิ่งและใช้สคริปต์เพื่อล้างมันเป็นครั้งคราว ฉันใช้ด้านล่างในสภาพแวดล้อมของฉันรวมกับขีด จำกัด ขนาด 1 GB ในบันทึกความปลอดภัยของเรา เซิร์ฟเวอร์ของเราบางส่วน (ดีที่สุด) สร้างเหตุการณ์ความปลอดภัยมากกว่า 3 GB ต่อวันและเราไม่ต้องการที่จะเสียพื้นที่ทั้งหมดในไฟล์บันทึกขนาดใหญ่ที่ฉันจะออกก่อนที่จะทำการคอมโบดังนั้นสคริปต์ของฉันจึงคัดลอกเนื้อหาบันทึกไปที่ โฟลเดอร์อื่นแล้วลบบันทึกเหตุการณ์ที่จะเขียนอีกครั้ง และเนื่องจากโฟลเดอร์ที่ฉันคัดลอกไปยังสำรองเราจึงสามารถกลับไปที่บันทึกในเหตุการณ์ที่น่ากลัวที่เราต้องการ

#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

6
สำหรับทุกคนที่จำได้ว่าบันทึกเหตุการณ์ของ Windows เป็นไฟล์ที่แม็พหน่วยความจำและบันทึกทั้งหมดถูกโหลดเข้าสู่หน่วยความจำข้อ จำกัด นั้นถูกกำจัดโดยโครงสร้างพื้นฐานการบันทึกเหตุการณ์ใหม่ที่นำมาใช้ใน Windows Vista / Server 2008 อย่างไรก็ตามหากคุณยังใช้เซิร์ฟเวอร์ 2003 คุณไม่สามารถสร้างบันทึกที่มีขนาดเกิน 1GB ได้เนื่องจากใน OS นั้นไม่มีกระบวนการใดสามารถมีไฟล์ที่แมปหน่วยความจำมากกว่า 1 GB
ฉันพูดว่า Reinstate Monica

คุณสามารถแบ่งไฟล์ออกเป็นโฟลเดอร์หลังจากนั้น คุณสามารถเขียนสคริปต์ PHP เพื่อทำเช่นนั้น และปล่อยให้มันวิ่งครึ่งปีหรือประมาณนั้น ที่จะช่วยคุณจัดการข้อมูล คุณสามารถปล่อยให้เซิร์ฟเวอร์ภายในมีหน้า PHP พื้นฐานที่ให้คุณเข้าถึงข้อมูลจากไฟล์ขนาดมหึมาในแต่ละโฟลเดอร์ซึ่งช่วยให้คุณสามารถดูข้อมูลที่ต้องการได้อย่างรวดเร็ว หรือคุณสามารถสร้างโปรแกรมง่าย ๆ ที่จะทำ VB.net หรือ C # เป็นตัวเลือกที่ดีสำหรับสิ่งนั้น
Ismael Miguel

3

คำตอบอื่น ๆ ครอบคลุมเหตุผลที่อยู่เบื้องหลัง - สำหรับระบบที่ทันสมัยซึ่งส่วนใหญ่รักษาเวลาในการโหลดภายใน GUI ของตัวแสดงเหตุการณ์ การคัดลอกบันทึกปัจจุบันไปยังตำแหน่งที่ได้รับการสำรองข้อมูลแล้วล้างข้อมูลด้วยก็ดีเช่นกัน

สำหรับการแยกวิเคราะห์ไฟล์บันทึกขนาดใหญ่ที่สร้างขึ้นมามีอยู่สองตัวเลือกที่ดีเกิดขึ้น:

1) แยกวิเคราะห์บันทึกเร็วกว่า GUI ปัจจุบันสามารถจัดการหรือ 2) แยกบันทึกเป็นไฟล์แยก

ฉันแน่ใจว่ามีสาธารณูปโภคที่พร้อมใช้งานได้ง่ายสำหรับ 2) ดังนั้นฉันจะเน้นที่ 1)

ประการแรก Powershell มี cmdlet ที่ยอดเยี่ยมสำหรับฟังก์ชั่นนี้เรียกว่า 'get-winevent' ประสิทธิภาพที่เร็วที่สุดที่ฉันเคยเห็นเกี่ยวข้องกับการใช้ตารางแฮช นี่คือตัวอย่างที่ได้รับเหตุการณ์ทั้งหมดในบันทึกการรักษาความปลอดภัยเกี่ยวกับผู้ใช้เฉพาะจากวันสุดท้าย:

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

$ userevt เป็นชุดของเหตุการณ์ คุณสามารถไพพ์ผ่านไปยังจัดรูปแบบรายการเพื่ออ่านเหตุการณ์จำนวนน้อยได้ง่ายขึ้นอยู่กับจำนวนการแข่งขัน สำหรับหมายเลขกลางให้ทำเช่นเดียวกัน แต่เปลี่ยนเส้นทางผลลัพธ์เป็นไฟล์:

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

สำหรับจำนวนมากให้เริ่มการกรอง (เช่นคุณต้องการให้คอมพิวเตอร์ผู้โทรเข้าใช้สำหรับเหตุการณ์ล็อคเอาท์กับผู้ใช้ที่เราได้รับด้านบน):

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

นี่จะแสดงผลลัพธ์บรรทัดเดียวสำหรับแต่ละเหตุการณ์การปิด กระบวนการข้างต้นโดยทั่วไปใช้เวลา 1-4 นาทีสำหรับบันทึก 4GB บน 2008 R2

ประการที่สองโดยเฉพาะอย่างยิ่งสำหรับเครื่อง 2003 ที่คุณอาจต้องจัดการคุณสามารถคลิกขวาที่ไฟล์บันทึกเฉพาะในบานหน้าต่างด้านซ้ายในตัวแสดงเหตุการณ์และเลือก 'บันทึกไฟล์บันทึกเป็น'

หากคุณกำลังเรียกใช้ตัวแสดงเหตุการณ์บนเครื่องโลคัลคุณสามารถบันทึกไฟล์. evt ที่สามารถแยกวิเคราะห์โดย get-winevent

อีกวิธีหนึ่งคุณสามารถบันทึกข้อความหรือไฟล์ CSV (ฉันค้นหา CSV ได้ง่ายขึ้น) ซึ่งสามารถแยกวิเคราะห์โดยโปรแกรมอรรถประโยชน์บรรทัดคำสั่งที่เหมาะสมเช่น grep หรือ findstr หรือบางโปรแกรมเช่น Notepad ++


1

ตัวอย่างโลกแห่งความจริง: สิ่งนี้เกิดขึ้นกับบันทึกความปลอดภัยที่เพิ่มขึ้นเป็นขนาด 12GB เพื่อให้สามารถเก็บข้อมูลได้ 6 เดือนตามข้อกำหนด

เมื่อเดือนที่ 3 เราไม่สามารถเข้าสู่เซิร์ฟเวอร์ 2008r2 และเซิร์ฟเวอร์ 2012r2 ได้ การเข้าสู่ระบบจะติดที่หน้าจอ "ยินดีต้อนรับ" เราพยายามเพิ่มหน่วยความจำเซิร์ฟเวอร์เป็น 20gb เพื่อรองรับไฟล์ขนาดใหญ่ที่เปิดอยู่และเซิร์ฟเวอร์ก็ยังโกรธอยู่ เราตัดสินใจที่จะติดตามการจัดการของคำแนะนำเครื่องยนต์ 1GB และปรับให้เป็นไฟล์เก่าเมื่อเต็มเมื่อเทียบกับการเขียนทับ

เรามีสคริปต์นี้เพื่อล้างไฟล์เก่าที่เก่ากว่า 180 วันหากเราต้องการ แต่เราน่าจะเก็บไฟล์ไว้ได้

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.