Docker GELF记录其他字段

时间:2017-01-04 07:26:31

标签: docker docker-compose graylog2 mdc gelf

我正在尝试使用GELF协议使我的docker-compose文件将其日志记录写入Graylog服务器。这工作正常,使用以下配置(docker-compose.yml的片段):

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

Graylog服务器接收我在Docker容器中登录JBoss实例的消息。它还添加了一些额外的GELF字段,如container_name和image_name。

我的问题是,我如何自己添加额外的GELF字段?我希望它将_username作为额外字段传递。我在MDC上下文中提供了此字段。 我可以使用CONSOLE记录器中的格式化程序(转换模式)将信息添加到消息中,方法是将以下内容添加到此记录器中:

%X{_user_name}

但这不是我想要的,因为它将在GELF消息字段中,而不是作为单独的额外字段添加。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

在当前的docker-compose版本(1.8.0)中似乎不可能包含额外的字段。

我最终从docker-compose文件中删除了任何日志记录配置,而是将GELF日志记录集成到docker容器的应用程序中。由于我使用的是JBoss AS 7,因此我使用了此处所述的步骤:http://logging.paluch.biz/examples/jbossas7.html

要记录容器ID,我添加了以下配置:

<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由docker容器上的HOSTNAME环境变量替换,并包含containerId。其他占位符由docker-compose环境变量替换。

通过包含完整的MDC,我能够将用户名(和其他一些字段)作为附加的GELF字段。 (有关MDC的更多信息,请参阅http://logback.qos.ch/manual/mdc.html