Прочитать файл журнала для мониторинга с помощью регулярных выражений - PullRequest
0 голосов
/ 19 января 2019

Я пытаюсь отслеживать файл журнала с помощью Powershell, но я не могу определить, какое регулярное выражение следует использовать, чтобы получить требуемый вывод для мониторинга.

Get-Content $file -wait | where {$_ -match "some regex"} | 
    foreach { send_email($_) }

Вот пример моего файла журнала.

19:43:06.5230 Info {"message":"YourCode_Prod execution started","level":"Information","timeStamp":"2019-01-15T19:43:06.5132404+00:00","fingerprint":"588aeb19-76e5-415a-88ff-a69797eb414f","windowsIdentity":"AD\\gaurav.m","machineName":"EDEV-3","processName":"YourCode_Prod","processVersion":"1.0.6800.16654","fileName":"YourCode_Work","jobId":"22a537ae-35e6-4abd-a57d-9dd0c273e81a","robotName":"Gaurav"}
19:50:48.8014 Info {"message":"YourCode_Prod execution ended","level":"Information","timeStamp":"2019-01-15T19:50:48.8005228+00:00","fingerprint":"b12b7d6f-cf3a-4e24-b1e6-1cf4413c12e2","windowsIdentity":"AD\\gaurav.m","machineName":"EDEV-3","processName":"YourCode_Prod","processVersion":"1.0.6800.16654","fileName":"YourCode_Work","jobId":"22a537ae-35e6-4abd-a57d-9dd0c273e81a","robotName":"Gaurav","totalExecutionTimeInSeconds":462,"totalExecutionTime":"00:07:42"}

Я попытался сгенерировать регулярное выражение, но не смог найти правильную логику для этого.

$searchpattern = [regex]"(?:(?:started))|(?:(?:ended))"
Get-Content -Path C:\Execution.log | foreach {
    if ($PSItem -match $searchpattern) {
        # does the entry have a valid date/time
        $time, $type, $data = $PSItem -split " ", 3
        $time
        $type
        $data
    }
}

Мне нужно отслеживать этот файл, который будет иметь много строк, но я хочу предпринять действия только для «выполнение началось» и «выполнение закончено».

Я мог бы разделить тип времени сообщения и данные,Но мне нужно продолжить детализацию данных.

Этот сценарий будет запускаться каждые 5 минут, поэтому я буду сравнивать время -5 минут и начну читать оттуда журнал, как только я обнаружу, что он закончен или запущен, я будупринять необходимые меры.

1 Ответ

0 голосов
/ 19 января 2019

Ваши данные журнала представлены в формате JSON, поэтому вы можете просто обработать извлеченные данные как таковые.

Get-Content -Path C:\Execution.log | ForEach-Object {
    $time, $type, $json = $_ -split " ", 3
    $data = ConvertFrom-Json $json
    if ($data.message -match 'execution (started|ended)') {
        # do stuff
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...