Высокопроизводительный журнал событий

Итак, я пробовал различные способы получить данные журнала событий в большом количестве (1000+ записей в секунду) .

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

Я пробовал EventLogQuery / EventLogReader , это работает быстро, за исключением случаев, когда я хочу получить данные сообщения, чтобы получить отформатированное сообщение для журналов безопасности, мне нужно вызвать EventLogRecord.FormattedMessage (), это доводит скорость моего журнала до 150 в секунду с легкостью форматирования журналов, даже хуже со сложными.

Я пробовал System.Diagnoistics.EventLog, это не позволяет мне создавать фильтры, поэтому каждый раз, когда я запускаю его, он должен загружать ВСЕ журналы событий, тогда я могу разобрать любые дубликаты (из последнее сканирование). У меня есть сервер, на котором зарегистрировано 200 тыс. Журналов событий за последние два дня, из-за этого использование памяти становится ужасным, так что это недопустимо.

Я пробовал WMI, используя System.Management.ManagementObjectCollection, у него есть фильтрация и может извлекать данные сообщения из журнала событий безопасности БЫСТРО (приближаясь к ~ 1000 / секунду), однако он перейдет примерно на 50/60 КБ и начнет тянуть ноги, вплоть до 1-2 / секунд, в конечном итоге я получу Ошибка нарушения квоты. : (

Итак, либо:

Есть ли способ избежать ошибки нарушения квоты, или я хочу использовать какой-либо другой метод для получения журналов событий с такой скоростью?

Редактировать:

Я написал сообщение в блоге с подробным описанием того, что я узнал об этом:

http://www.roushtech.net/2013/10/30/high-performance-event-log-reading/

В основном: WINAPI - ваш лучший выбор , либо напишите C ++ / CLR, либо используйте PInvoke.

11
задан StrangeWill 31 October 2013 в 04:09
поделиться