Get-ClusterLog и поиск ошибок в Failover Clusters
Добрый день! Уважаемые читатели и гости одного из крупнейших IT блогов в рунете Pyatilistnik.org. В прошлый раз мы с вами разобрали установку NuGet в Windows, и рассмотрели как его можно использовать. В сегодняшней публикации я с вами поделюсь практическим опытом по поиску ошибок на отказоустойчивом кластере Windows. Покажу, где удобнее смотреть логи событий, как их фильтровать и многое другое, мы познакомимся с новым командлетом Get-ClusterLog, о котором я еще вам не рассказывал.
Как удобно искать ошибки на Failover Clusters
Недавно у меня была ошибка на кластере SQL Server, где произошла перезагрузка инстансов на одном из узлом. Первым делом я стал изучать логи Windows, но оказалось. В логах я обнаруживал такие события:
Так же я понял, что искать в просмотре событий логи относящиеся непосредственно к самому кластеру не очень удобно. Сама оснастка Failover Clusters так же не была информативной, поэтому я в очередной решил воспользоваться командлетами PowerShell, а именно Get-Clusterlog.
Что такое Get-Clusterlog?
Командлет Get-Clusterlog — это быстрый и удобный способ получить информацию из кластера Windows. Этот командлет создаст текстовый файл журнала для всех узлов или определенного узла (если он указан) в отказоустойчивом кластере. Вы даже можете использовать командлет, чтобы указать определенный промежуток времени, например, последние 15 минут, что может быть очень удобно, если вы знаете, что проблема возникла в этот период времени.
Откройте на одном из узлов кластера оболочку PowerShell от имени администратора, и введите:
Команда по умолчанию cгенерирует файл Cluster.log на ВСЕХ узлах в папке C:\Windows\Cluster\Reports. Имя файла будет Cluster.log. Обратите внимание, что файл лога может быть весьма внушительный по размеру.
Если вы хотите сохранить файл в нужное место, то нужно воспользоваться параметром –Destination, команда будет выглядеть вот так:
если вы хотите, чтобы журнал кластера генерировался для определенных узлов, мы можем использовать параметр –Node. Мы можем поместить имена узлов, разделенные запятыми, как показано ниже.
По умолчанию в журнале кластера отображается время в формате UTC. Иногда бывает сложно перевести время UTC на местное время, особенно для часовых поясов, в которых действует переход на летнее время. К счастью, журнал кластера можно сгенерировать по локальному времени с помощью параметра UseLocalTime. Вот пример кода.
Давайте теперь получим логи за последние 60 минут. Для этого есть параметр TimeSpan. Выполните команду:
Так как полученные файлы с событиями Failover Clusters могут достигать гигабайта и более, то их сложно изучать, для этого вы можете использовать, например LogParser или Configuration Manager Trace Log Tool, или же можно воспользоваться простейшим скриптом на PowerShell. Вот простой скрипт, который перебирает папку с файлами журнала кластера и извлекает любую строку, содержащую шаблон "ERR", в другой файл. Обратите внимание, что в начале и в конце шаблона есть пробелы, так что если есть экземпляры строк, таких как "error", они не возвращаются.
$files = Get-ChildItem $dir -Recurse -Include "*.log"
foreach ($file in $files){
$out = "ERR_" + $file.BaseName + ".txt" select-string -path $file.FullName -Pattern " ERR " -AllMatches | out-file "$dir\$out"
}
В результате логи будут куда меньшего размера. На этом у меня все. С вами был Иван Сёмин, автор и создатель IT портала Pyatilistnik.org.