我被要求使用DataDog实现一个集中的监控和日志记录系统,该系统将接收来自各种服务和应用程序的信息,有些在虚拟机上作为Windows服务运行,有些在Kubernetes集群内运行。为了实现日志记录方面,以便DataDog能够正确地获取日志,我使用Serilog来进行日志记录。
我目前的计划是以json格式将日志写入控制台,并在每个服务器上安装DataDog代理或k8s节点捕获并将其发送给DataDog。这是有效的,至少对于我迄今为止实现它的k8s节点来说是有效的。(我尽量避免使用DataDog的自定义Serilog接收器,因为DataDog文档中不鼓励这样做(。
我的问题是,我无法在DataDog端正确获取日志。DataDog希望json包含一个属性调用Message,但Serilog将此属性命名为RenderedMessage(如果我使用JsonFormatter(renderMessage:true((或@m(如果我用RenderedCompactJsonFormater(((。
如何将日志发送到DataDog并在DataDog端正确获取?
回答我自己的问题。
DataDog日志记录页面有一个配置部分。在该页面上;JSON日志的预处理";部分允许您为一些主要日志消息属性指定备用属性名称。如果将@m添加到Message属性部分,将@l添加到Status属性部分,则可以正确地从RenderedCompactJsonFormatter
格式化程序中获取JSON消息。如果您分别添加RenderedMessage和Level,您将正确地摄取JsonFormatter(renderMessage: true)
格式化程序。您可以在每个部分中指定多个属性,因此可以同时支持这两种格式。
如果要使用控制台接收器只需对其应用相应的彩色主题即可。