1

我被要求使用 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 端正确摄取?

4

1 回答 1

1

回答我自己的问题。

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

于 2021-01-05T17:47:25.543 回答