Как лучше всего отправлять журналы в Graylog из приложения JVM, которое работает в контейнере Docker?

Я использую Graylog в качестве центрального сервера регистрации и использую gelf log4j2-appender для отправки сообщений журнала в Graylog. Это прекрасно работает. Теперь я создал образ докера своего приложения и могу запускать свое программное обеспечение как контейнер докера.

Используя докер, я также вхожу в стандартный вывод (консоль-аппендер), чтобы получать журналы приложений в докере (журналы докера {containerId}).

Теперь я спрашиваю себя, могу ли я сэкономить на gelf log4j2-appender и использовать вместо него драйвер/плагин журнала docker для gelf. (см. https://docs.docker.com/engine/admin/logging/overview/ )

Что здесь лучше всего? Я думаю, что использование подключаемого модуля журнала Docker отправит целое строковое сообщение в Graylog, а Graylog должен будет извлечь метаинформацию из этой строки (поэтому мне нужно предоставить эти метаданные в сообщение журнала, например, log_level). Это может привести к большему потреблению ресурсов на стороне серого журнала, а также невозможно настроить докер для отправки только сообщений об ошибках в серый журнал. Это приводит к большему сетевому трафику. Используя gelf-appender log4j2, я могу предоставить некоторые метаданные в дополнение к сообщению журнала, не включая их в основное сообщение журнала, и на стороне Graylog не потребуется извлечение. Также можно настроить, какие сообщения должны отправляться в Graylog с помощью log_level. Или я ошибаюсь? Какое лучшее решение или каковы плюсы и минусы каждого способа отправки журналов в Graylog?


person whitenexx    schedule 12.05.2016    source источник


Ответы (1)


Я бы порекомендовал использовать существующий GELF-приложение для используемой вами структуры ведения журналов (например, logstash-gelf) вместо этого. записывать все в стандартный вывод и использовать драйвер ведения журнала GELF Docker.

Использование надлежащего приложения GELF с собственной средой ведения журналов Java позволяет вам использовать расширенные функции, такие как MDC, чтобы обогащать сообщения журнала ценной структурированной информацией без необходимости повторного анализа этих сообщений после их получения на стороне сервера. С драйвером ведения журнала Docker GELF вы будете получать сообщения журнала только построчно, что, особенно с Java-приложениями, может быть головной болью (вспомните многострочные трассировки стека).

Большинство фреймворков ведения журналов поддерживают статические поля, так что вы можете, например, «вставить» идентификатор своего контейнера Docker.

person joschi    schedule 12.05.2016