Comments 9
А что мешает писать напрямую в Elastic Search?
А сам log4net туда писать не умеет?
Я не знаю стандартного функционала в log4net, который бы мог писать в elasticsearch напрямую.
Мы используем связку nxlog -> elasticsearch -> kibana, где вся конфигурация сводится к тому, чтобы отправить сериализированный LoggingEvent в JSON на порт 514 по UDP. Для работы с UDP у log4net уже есть RemoteSyslogAppender. Это работает довольно быстро.
Суть статьи было донести информацию о том, что если вы используете Properties в LoggingEvent, то всегда тратится время на получение имени пользователя, которое довольно затратно по времени.
там правда баги, поэтому пришлось форкнуть и пофиксить
Я собственно к чему веду: возможно, вам лучше будет использовать связку log4net -> serilog -> elasticsearch -> kibana, особенно если log4net напрямую в elasticsearch писать не умеет.
Ключевые моменты:
- Вывод у serilog структурирован сразу, что при использовании elasticsearch позволяет сильно сэкономить на дальнейшей обработке и хранении собранных данных.
- Имеющуюся кодовую базу можно постепенно переводить на прямое использование serilog с сохранением работоспособности приложений.
Надо было только поискать ElasticSearchTarget, подправить немного под себя. Например, при логировании Exception всегда сохраняем message, StackTrace и все InnerException
Ну мы в общем тоже давно забили на универсальных прокси-провайдеров и переключились на Serilog — просто написали тонкую прослойку-враппер над методами, которые мы вызываем (что может показаться оверкилом но делать некоторые конфигурации просто удобней в классе-враппере).
Вообще чем больше в интернете Logging as a service, тем больше приходишь к выводу что вот эти ребята предлагают тебе установить свой bottleneck за деньги. Современные логгеры настолько просты и удобны, что added value таких прокси в части scalability стремится к нулю. Хорошо если они еще какую-то аналитику предлагают по вашим логам, но чаще всего оказывается чтобы она работала — надо писать сообщения в service-specific формате ( что приводит к тому что эти фичи не работают при переходе между вендорами). Структурные логи в этом отношении спасают, т.к. хранят не конечный результат, а все исходные данные и могут отдать их в любой sink с сохранением большего количества деталей, чем "просто строка"
И к слову — структурированные логи оказались очень практичными и при поиске — можно делать запросы по данным не при помощи регэксов а по структуре сообщений и внутренних значений.
История одного исследования в log4net и ускорение его более чем в 10 раз