2017-01-04 65 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