2013-05-28 11 views
1

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

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

Однако мне действительно не нравится идея файла журнала «Circular». Я хватаю много информации, и на некоторых из этих серверов это означает, что даже ограничение 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 и рулон файла журнала?

ответ

3

Вы должны быть в состоянии справиться с этой инлайн т.д .:

$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 

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

+0

Это красиво просто и имеет большой смысл. Однако я все еще не совсем уверен, что делает $ _. Это просто какой-то заполнитель? –

+0

'$ _' представляет объект, выводимый Get-Counter. Мы вставляем в конвейер для проверки размера файла, но нам нужно убедиться, что объект, выводимый Get-Counter, переводит его вниз по конвейеру в Export-Counter. –

+0

Ах, имеет смысл. Спасибо за разъяснения. –