Подсчитать количество совпадений шаблона в файле журнала в реальном времени за определенный период времени с помощью PowerShell?
Я должен перехватить шаблон в файле журнала и, когда этот шаблон сопоставляется 5 раз за 5 минут, отправить предупреждение...
Я написал эти строки, но я застрял... Я не знаю, как обращаться с временными рамками...
Не могли бы вы мне помочь?
Роберто.
$count = get-content test.txt -Tail 1 -Wait | select-string -pattern "auth" -simplematch
$count.length
Я пробовал другой подход, но ничего не поделать...
$file = "test.txt"
$mymatch = "auth"
#$FirstEventTime = Get-Date
#$LastEventTime = Get-Date
$Err = 0
$Range =@(1,2,3,4)
$Tailfile = Get-Content $file -Tail 1 -Wait | select-string -pattern $mymatch -simplematch | foreach ($mymatch) {
if($Err -lt 1){
New-Event -SourceIdentifier StartEvent -Sender windows.timer
$Err++
}
#elseif ($Err -eq [1-4])
elseif ($Range -contains $Err){
$Err++ }
else {
New-Event -SourceIdentifier LastEvent -Sender windows.timer
$FisrtEvent = (get-event StartEvent).TimeGenerated
$LastEvent = (get-event LastEvent).TimeGenerated
$Elapsed = $LastEvent-$FisrtEvent
$realElasped = ($elapsed).TotalMinutes
[math]::Round($realElasped)
if ($realElasped -lt 5) {
echo "sendmail......"
$Err = 0}
else {
$Err = 0
}
}
}
1 ответ
Количество вхождений в интервале является полезным условием оповещения, но это не простая программа для написания. В большинстве простых реализаций хвоста такой функции нет.
Рассмотрите возможность внедрения системы агрегации журналов, которая имеет расширяемые условия оповещения. Например, у Graylog есть X сообщений за Y минут. Да, это гораздо больший проект, чем хвастовство. Однако он также может принимать журнал событий и системный журнал, и делать подобные вещи для любого события с любого хоста.
Просто для тех, у кого такая же потребность, я исправил свой скрипт и теперь он работает!
$MailArgs = @{
From = bla, bla, bla....
}
$file = "Test.txt"
$FolderLogs = "E:\TMP"
$mymatch1 = "autentica"
$mymatch2 = "WS ERROR"
$Err = 0
$Range =@(1,2,3,4)
$Tailfile = Get-Content $file -Tail 1 -Wait | ?{ $_ -match $mymatch1 -and $_ -match $mymatch2 } | ForEach-Object {
if($Err -lt 1){
New-Event -SourceIdentifier StartEvent -Sender windows.timer
$Err++
}
elseif ($Range -contains $Err) {
$Err++
}
else {
New-Event -SourceIdentifier LastEvent -Sender windows.timer
$FisrtEvent = (get-event StartEvent).TimeGenerated
$LastEvent = (get-event LastEvent).TimeGenerated
$Elapsed = $LastEvent-$FisrtEvent
$realElasped = ($elapsed).TotalMinutes
[math]::Round($realElasped)
if ($realElasped -lt 5) {
Send-MailMessage @MailArgs 2>&1 > $FolderLogs\MailLogs.txt
$Err = 0
}
else {
$Err = 0
}
}
}