当前位置: 首页 > 知识库问答 >
问题:

将日志元数据写入rsyslog

楚方伟
2023-03-14

我有一个设置,其中docker容器使用Journal ald日志驱动程序来写入它们的日志。目前日志中的日志行被转发到主机上运行的rsyslog,但syslog行上的应用程序名称显示为dockerd

作为一种解决方法,我想将日志元数据中的CONTAINER_NAME字段写入syslog中出现的行中,这样我就可以确定在主机的syslog被发送到syslog聚合服务器之后,哪个容器写入了哪一行。

有什么建议吗?

共有3个答案

皮骏
2023-03-14

我把它放进了rsyslog,成功了。形态

if($!CONTAINER_TAG==“mycontainer”)然后{action(type=“omfile”file=“/var/log/mycontainer.log”)stop}

journalctl--unit docker CONTAINER_TAG=mycontainer很难找到这些信息,只有在redhat文档中才有记录:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/s1-structured_logging_with_rsyslog.html

我的用例是,我希望日志具有它提供的所有好处,但支持人员要求拥有正常文件。我们还将使用splunkproder来使用文件。

欧阳博超
2023-03-14

我认为最接近您可以获得图像名称。您可以添加日志标签以在日志中显示图像名称。此功能已在v1.11.0中添加。例如:

docker run --log-driver=journald --log-opt tag="{{.ImageName}}

也看看日志标签文档。希望这能有所帮助。

楚流觞
2023-03-14

我能够通过在解析来自Journal ald的结构化日志后定义一个模板来实现这一点。为了弄清楚哪些属性可用,我运行了Jouralctl-o详细-n 10

rsyslog有多种不同的方法来完成相同的配置,下面是我在CentOS 7机器上的配置:

module(load="imjournal" StateFile="imjournal.state") # Load imjournal module
module(load="mmjsonparse") # Load mmjsonparse module for structured logs

action(type="mmjsonparse") # Attempt to parse JSON

template(name="ContainerTemplate" type="list") {
    property(name="timestamp" dateFormat="rfc3339")
    constant(value=" ")
    property(name="$!CONTAINER_NAME")
    constant(value=" ")
    property(name="$!CONTAINER_ID")
    constant(value=" ")
    property(name="$!MESSAGE")
    constant(value="\n") # Separate logs with a newline
}

if ($!CONTAINER_NAME != "") then {
    action(type="omfile" file="/var/log/messages" template="ContainerFormat")
} else {
    *.info;mail.none;news.none;authpriv.none;cron.none action(type="omfile" file="/var/log/messages")
}
  • https://docs.docker.com/engine/admin/logging/journald/
  • http://www.rsyslog.com/doc/v8-stable/configuration/modules/imjournal.html
  • http://www.rsyslog.com/doc/master/configuration/modules/mmjsonparse.html
  • http://www.rsyslog.com/using-rsyslog-and-elasticsearch-to-handle-different-types-of-json-logs/
  • http://www.rsyslog.com/doc/v8-stable/configuration/templates.html
  • http://www.rsyslog.com/doc/v8-stable/rainerscript/control_structures.html#if-else-if-else
 类似资料:
  • 在中有一个,可以将日志写入到。 我需要在中使用相同的功能,但我还没有找到这样做的选项。有人知道如何使用实现同样的效果吗?

  • 问题内容: 我正在尝试使用Go写入日志文件。 我尝试了几种方法,但都失败了。这是我尝试过的: 日志文件被创建,但是没有任何打印或附加到该文件。为什么? 问题答案: 过去的工作方式一定不同,但这对我有用: 基于Go文档,不能用于,因为它会打开文件“供阅读:” 打开命名文件以供读取。如果成功,则可以使用返回文件上的方法进行读取;关联的文件描述符具有mode 。如果有错误,它将是类型。 编辑 检查后移至

  • 我创建了以下groovy脚本,以展示如何使用简单的注释将日志字段注入我们的类 当我运行groovy脚本时,我得到以下结果(在GROOVY CONSOLE上) 请告知我们如何将结果打印到WIN机器中的日志文件中,以及需要向groovy脚本中添加什么才能启用它? 例如: 日志文件 C: \程序文件\日志\我的。非常棒。日志 (应包含结果:)

  • 在HDFS中写入日志文件的最佳方式是什么?我正在尝试配置Apache Flume,并尝试配置能够为我提供数据可靠性的源。我试图配置“exec”,后来也查看了“spooldir”,但flume.apache上的以下文档。org对我的意图表示怀疑- 执行来源: 最常请求的功能之一是像“tail -F file_name”这样的用例,其中应用程序写入磁盘上的日志文件,Flume 尾随文件,将每一行作为事

  • 在我的应用程序的logback.xml中,我有一个AsyncAppender定义如下。 当我在Windows10上部署Tomcat中的war时。 null 请各位专家告诉我,我在这里做错了什么?AsyncAppender是否有其他属性可以帮助修复此行为?

  • 问题内容: 在我们的应用程序中,我们希望用户输入如下: 我想在单元测试中通过该部分,以便我可以恢复线程以执行其余代码。我如何从junit 写入内容? 问题答案: 你想要做的是使用的方法从。这将使您可以从junit 传递数据。