提问人:Larry Lustig 提问时间:1/5/2021 更新时间:8/8/2022 访问量:1888
如何让 Serilog json 格式的日志在 Datadog 中正确显示
How to get Serilog json-formatted logs to appear correctly in Datadog
问:
我被要求使用 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 端正确引入?
答:
回答我自己的问题。
“DataDog 日志记录”页面包含“配置”部分。在该页面上,“JSON 日志的预处理”部分允许您为一些主要日志消息属性指定备用属性名称。如果将@m添加到“消息属性”部分,@l添加到“状态属性”部分,则会正确地从格式化程序引入 JSON 消息。如果分别添加 RenderedMessage 和 Level,则将正确引入格式化程序。您可以在每个部分中指定多个属性,以便可以同时支持这两种格式。RenderedCompactJsonFormatter
JsonFormatter(renderMessage: true)
评论
Level
评论