2017-01-04 6 views
1

Я пытаюсь сделать файл, содержащий файл для док-станции, записать его регистрацию на сервер Graylog, используя протокол GELF. Это прекрасно работает, используя следующую конфигурацию (сниппета из Докер-compose.yml):Docker GELF logging дополнительные поля

 logging: 
     driver: gelf 
     options: 
     gelf-address: ${GELF_ADDRESS} 

Сервер Graylog получает сообщения, когда я захожу в экземпляре JBoss в моем контейнере Докер. Он также добавляет дополнительные поля GELF, такие как container_name и image_name.

Мой вопрос: как я могу добавить дополнительные поля GELF самостоятельно? Я хочу, чтобы он передавал _username в качестве дополнительного поля. У меня есть это поле, доступное в моем контексте MDC. я мог бы добавить информацию к сообщению с помощью форматчик (Преобразование Pattern) в моем CONSOLE регистраторе, добавив следующее к этому регистратору:

%X{_user_name} 

Но это не то, что я хочу, как это будет поле сообщения GELF, не добавляемое как отдельное дополнительное поле.

Любые мысли?

ответ

0

В текущей версии, содержащей докеры (1.8.0), представляется невозможным включить дополнительные поля.

В результате я удалил любую конфигурацию регистрации из файла компоновки docker и вместо этого интегрировал ведение журнала GELF в приложении контейнера докера. Так как я использую JBoss AS 7, я использовал шаги, как описано здесь: http://logging.paluch.biz/examples/jbossas7.html

Для того, чтобы войти в идентификатор контейнера, я добавил следующую конфигурацию:

<custom-handler name="GelfLogger" class="biz.paluch.logging.gelf.jboss7.JBoss7GelfLogHandler" module="biz.paluch.logging"> 
<level name="INFO" /> 
<properties> 
    <property name="host" value="udp:${GRAYLOG_HOST}" /> 
    <property name="port" value="${GRAYLOG_PORT}" /> 
    <property name="version" value="1.1" /> 
    <property name="additionalFields" value="dockerContainer=${HOSTNAME}" /> 
    <property name="includeFullMdc" value="true" /> 
</properties> 

поле dockerContainer замещен переменной HOSTNAME в контейнере докера и содержит containerId. Остальные заполнители заменяются переменными среды-компоновщика-докеров.

Включая полный MDC, я смог поместить имя пользователя (и некоторые другие поля) в качестве дополнительного поля GELF. (Для получения дополнительной информации о MDC см. http://logback.qos.ch/manual/mdc.html)

+0

Были ли вы в состоянии получить другие поля, которые предоставляет драйвер gelf как время создания, изображение .....? Я знаю, как добавить поле в gelf в compose со значением, определенным в файле компоновки. Это вам не поможет, потому что вы хотите добавить значение из среды выполнения. – herm