2017-01-04 98 views
1

我想让我的docker-compose文件使用GELF协议将其日志写入Graylog服务器。这工作得很好,使用以下配置(泊坞窗 - compose.yml的片段):Docker GELF日志记录其他字段

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

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

我的问题是,我怎么能自己添加额外的GELF领域?我希望它通过_username作为额外的字段。我在我的MDC上下文中有这个字段。 我可以在我的控制台记录器使用格式化(转换模式),通过添加下面的这个记录器将信息添加到消息:

%X{_user_name} 

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

有什么想法?

回答

0

在当前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

+0

您是否能够获得gelf驱动程序提供的其他字段,如创建时间,图像.....? 我知道如何将字段添加到合成文件中定义的值中。这不会帮助你,因为你想从运行时添加一个值。 – herm