如何让 Serilog json 格式的日志在 Datadog 中正确显示

How to get Serilog json-formatted logs to appear correctly in Datadog

提问人:Larry Lustig 提问时间:1/5/2021 更新时间:8/8/2022 访问量:1888

问:

我被要求使用 DataDog 实现一个集中式监控和日志记录系统,该系统将从各种服务和应用程序接收信息,其中一些在虚拟机上作为 Windows 服务运行,一些在 Kubernetes 集群中运行。为了实现日志记录方面,以便 DataDog 可以正确摄取日志,我使用 Serilog 进行日志记录。

我的计划是以 json 格式将日志写入控制台,并在每个服务器或 k8s 节点上安装 DataDog 代理,捕获并将它们发送到 DataDog。这有效,至少对于我到目前为止已经实现它的 k8s 节点。(我试图避免为 DataDog 使用自定义 Serilog 接收器,因为 DataDog 文档中不鼓励这样做)。

我的问题是我无法在 DataDog 端正确摄取日志。DataDog 期望 json 包含属性调用 Message,但 Serilog 将此属性命名为 RenderedMessage(如果我使用 JsonFormatter(renderMessage: true))或 @m(如果我使用 RenderedCompactJsonFormatter())。

如何将日志发送到 DataDog 并在 DataDog 端正确引入?

JSON 日志记录 serilog datadog 日志传送

评论


答:

7赞 Larry Lustig 1/6/2021 #1

回答我自己的问题。

“DataDog 日志记录”页面包含“配置”部分。在该页面上,“JSON 日志的预处理”部分允许您为一些主要日志消息属性指定备用属性名称。如果将@m添加到“消息属性”部分,@l添加到“状态属性”部分,则会正确地从格式化程序引入 JSON 消息。如果分别添加 RenderedMessage 和 Level,则将正确引入格式化程序。您可以在每个部分中指定多个属性,以便可以同时支持这两种格式。RenderedCompactJsonFormatterJsonFormatter(renderMessage: true)

评论

0赞 Pavisa 9/13/2022
就我而言,JSON 格式化程序是 PascalCase 而不是 camelCase,这意味着该属性与任何默认别名都不匹配。一旦我添加了状态属性别名,一切都按预期工作。Level
-1赞 macf00bar 8/8/2022 #2

如果要使用控制台接收器,只需对其应用相应的彩色主题即可。