Итак, я пробовал различные способы получить данные журнала событий в большом количестве (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.