Работа с errorlog в SQL Server

Работа с errorlog в SQL Server

В прошлой статье о ErrorLog, были представлены основные способы работы с ним, но для меня их оказалось недостаточно и сегодня я расскажу почему.

Предисловие

Недавно мне пришлось анализировать проблемы одного из серверов и это оказалось не так просто. В логах сервера было множество ошибок авторизации, которые существенно мешали поиску нужных сообщений.

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

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

Работа с ErrorLog как с таблицей

Я решил просто выгрузить, с помощью уже известных мне инструментов, весь ErrorLog в таблицу и исключить все сообщения типа ‘%Login failed%’ и ‘%Error: 18456%’. Обнаружилось что подобных сообщений более 95%. После такой фильтрации я быстро решил проблему.

Пример кода:

-- Создаём таблицу для ErrorLog
CREATE TABLE #error_log (d datetime,p nvarchar(50),t nvarchar(max))

-- Вставляем в таблицу данные из ErrorLog
INSERT INTO #error_log
EXEC sp_readerrorlog

-- Выполняем фильтрацию (исключение "шума")
SELECT * FROM #error_log WHERE t not like '%Login failed for user%' and t not like '%Error: 18456%'

Обратите внимание, что процедуру sp_readerrorlog я вызываю без параметров. Такой вызов вернёт нам только записи активного журнала, если вам нужно вернуть и старые журналы, то просто укажите количество этих журналов. Например, чтобы вернуть текущий и прошлый ErrorLog можно использовать sp_readerrorlog 2

Замечание

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

Запись опубликована в рубрике В помощь администратору с метками . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Войти с помощью: