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

Итак, у меня есть хороший скрипт.ps1, который получает набор счетчиков и записывает его в файл циклического журнала с максимальным размером 1 ГБ. Это хорошо работает и делает всех счастливыми.

В настоящее время он запускается с помощью файла.bat, который проходит через сценарий, а затем сохраняет экземпляр Powershell.exe открытым в скрытом окне. Это позволяет ему работать незаметно.

Тем не менее, мне действительно не нравится идея "Кругового" файла журнала. Я собираю много информации, и на некоторых из этих серверов это означает, что даже лимит в 1 ГБ будет попадать довольно часто. Я провожу тест, чтобы увидеть, сколько времени на самом деле это займет, но можно предвидеть, что скользящий файл журнала может работать лучше.

У меня есть функция, которую я обнаружил, чтобы проверить определенный размер файла и создать новый файл, если это необходимо, но я не совсем уверен, как периодически вызывать эту функцию (например, один раз в день, час или что-то) из сценарий Powershell, который в основном это огонь и забыть.

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

Код:

# This script tracks performance counters useful for tracking performance on a SQL server in a rolling .csv file 
located at a directory of your choosing. It is written for Powershell v.2

$Folder="C:\Perflogs\BBCRMLogs" # Change the bit in the quotation marks to whatever directory you want the log file 
# stored in

$Computer = $env:COMPUTERNAME
$1GBInBytes = 1GB
$p = LOTS OF COUNTERS GO HERE;

# If you want to change the performance counters, change the above list. However, these are the recommended counters for 
a client machine. 

$dir = test-path $Folder 

IF($dir -eq $False) 
{
New-Item $Folder -type directory
get-counter -counter $p -SampleInterval 60 -Continuous | Export-Counter  $Folder\SQL_log.csv -Force -FileFormat CSV 
-Circular -MaxSize $1GBInBytes
}
Else
{
get-counter -counter $p -SampleInterval 60 -Continuous | Export-Counter  $Folder\SQL_log.csv -Force -FileFormat CSV 
-Circular -MaxSize $1GBInBytes
}

Острые глаза заметят, что функция прокрутки отсутствует. Это потому, что приведенный выше скрипт является моей стабильной версией, функция, которую я использую, находится здесь:

http://sysbrief.blogspot.com/2011/05/powershell-log-rotation-function.html

Есть идеи? Я бы предпочел не запускать отдельный экземпляр Powershell, чтобы выступать в роли слушателя, или периодически запускать функцию самим пользователем, но я открыт практически для любой идеи.

Было бы лучше настроить задание Windows, чтобы периодически запускать функцию в powershell и проверять файл журнала?

1 ответ

Решение

Вы должны быть в состоянии справиться с этим, например:

$num  = 0
$file = "$Folder\SQL_log_${num}.csv"
Get-Counter -counter $p -SampleInterval 60 -Continuous | 
    Foreach {
        if ((Get-Item $file).Length -gt 900MB) {
            $num +=1;$file = "$Folder\SQL_log_${num}.csv"
        }
        $_
    } | 
    Export-Counter $file -Force -FileFormat CSV -Circular -MaxSize $1GBInBytes

Это будет непрерывно проверять размер файла, и когда он достигнет предела, он изменит имя файла журнала. Важно, чтобы ни один из этих скриптов тестирования / переименования ничего не выводил. Единственное, что должно выводиться в конвейер - это данные счетчика перфектов, представленные $_,

Другие вопросы по тегам