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