Docker GELF 记录附加字段
Docker GELF logging additional fields
我正在尝试使用 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 消息字段中,而不是作为单独的额外字段添加。
有什么想法吗?
在当前的 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>
Field dockerContainer 被 docker 容器上的 HOSTNAME 环境变量替换并包含 containerId。其他占位符替换为 docker-compose 环境变量。
通过包含完整的 MDC,我能够将用户名(和其他一些字段)作为附加的 GELF 字段。 (有关 MDC 的更多信息,请参阅 http://logback.qos.ch/manual/mdc.html)
我正在尝试使用 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 消息字段中,而不是作为单独的额外字段添加。
有什么想法吗?
在当前的 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>
Field dockerContainer 被 docker 容器上的 HOSTNAME 环境变量替换并包含 containerId。其他占位符替换为 docker-compose 环境变量。
通过包含完整的 MDC,我能够将用户名(和其他一些字段)作为附加的 GELF 字段。 (有关 MDC 的更多信息,请参阅 http://logback.qos.ch/manual/mdc.html)