پرش به محتوا

پایش کارایی و رخدادها با Get-Counter، logman و Get-WinEvent

شمارنده‌های کلیدی CPU، حافظه، دیسک و شبکه را بخوانید، یک Data Collector Set دائمی برای خط پایه بسازید و خطاهای مهم لاگ را فیلتر کنید.

Windows Server 2025سطح: متوسطبرای: Windows Server 2025، Windows Server 2022، Windows Server 2019به‌روزرسانی: ۱۷ آبان ۱۴۰۵

۱. نگاه سریع با Get-Counter

powershell
$c = '\Processor(_Total)\% Processor Time',
     '\Memory\Available MBytes',
     '\PhysicalDisk(_Total)\Avg. Disk sec/Transfer',
     '\PhysicalDisk(_Total)\Current Disk Queue Length',
     '\Network Interface(*)\Bytes Total/sec'
Get-Counter -Counter $c -SampleInterval 5 -MaxSamples 6

راهنمای تفسیر:

  • % Processor Time: بیش از ۸۵٪ به‌طور پیوسته
  • Available MBytes: کمتر از ۱۰٪ حافظه‌ی کل
  • Avg. Disk sec/Transfer: بیش از 0.020 (یعنی ۲۰ میلی‌ثانیه)
  • Current Disk Queue Length: به‌طور پیوسته بیش از ۲ برابر تعداد دیسک‌ها

۲. خط پایه با Data Collector Set

مشکل کارایی را فقط وقتی می‌توانید تشخیص دهید که بدانید وضعیت «عادی» چه بوده است. این جمع‌آورنده هر دقیقه نمونه می‌گیرد و فایلش دایره‌ای است، یعنی حداکثر ۵۱۲ مگابایت جا می‌گیرد:

powershell
logman create counter SahorBaseline -si 00:01:00 -f bincirc -max 512 `
  -o C:\PerfLogs\SahorBaseline `
  -c '\Processor(_Total)\% Processor Time' '\Memory\Available MBytes' `
     '\PhysicalDisk(*)\Avg. Disk sec/Transfer' '\Network Interface(*)\Bytes Total/sec' `
     '\LogicalDisk(*)\% Free Space'
logman start SahorBaseline
logman query SahorBaseline

برای اینکه بعد از راه‌اندازی مجدد هم اجرا شود، در perfmon.msc در بخش Data Collector Sets › User Defined › Properties › Schedule یک زمان‌بندی «At startup» اضافه کنید.

تبدیل به CSV برای Excel:

powershell
relog C:\PerfLogs\SahorBaseline_000001.blg -f csv -o C:\PerfLogs\baseline.csv

۳. رخدادهای مهم ۲۴ ساعت گذشته

powershell
Get-WinEvent -FilterHashtable @{ LogName = 'System','Application'; Level = 1,2; StartTime = (Get-Date).AddDays(-1) } |
  Group-Object ProviderName | Sort-Object Count -Descending | Select-Object Count, Name -First 10

Level 1 یعنی Critical و Level 2 یعنی Error. چند رخداد امنیتی پرکاربرد:

powershell
# Failed logons (4625) in the last hour
Get-WinEvent -FilterHashtable @{ LogName = 'Security'; Id = 4625; StartTime = (Get-Date).AddHours(-1) } |
  ForEach-Object { $_.Properties[19].Value } | Group-Object | Sort-Object Count -Descending

# Unexpected shutdowns (6008)
Get-WinEvent -FilterHashtable @{ LogName = 'System'; Id = 6008 } -MaxEvents 5

۴. هشدار کمبود فضای دیسک

یک اسکریپت ساده که با Task Scheduler هر ساعت اجرا شود:

powershell
Get-Volume | Where-Object { $_.DriveLetter -and $_.Size -gt 0 -and ($_.SizeRemaining / $_.Size) -lt 0.10 } |
  ForEach-Object { Write-EventLog -LogName Application -Source 'SahorMonitor' -EventId 900 -EntryType Warning `
    -Message ("Drive {0}: only {1:N1} GB free" -f $_.DriveLetter, ($_.SizeRemaining / 1GB)) }

یک بار منبع رخداد را ثبت کنید: New-EventLog -LogName Application -Source SahorMonitor. حالا سیستم مانیتورینگ مرکزی (مثل Zabbix یا Wazuh) می‌تواند رخداد ۹۰۰ را بگیرد.