【问题标题】:How to log using NLog directly to Datadog如何使用 NLog 直接记录到 Datadog
【发布时间】:2020-11-15 16:43:14
【问题描述】:

使用 Nlog 从我的 asp.net Core 应用程序登录,我想查看 Datadog 中的日志。

Datadog 允许我可视化日志数据,并以方便的方式对日志进行切片、搜索、选择和排序,从而为我的客户提供支持。

我正在寻找一种使用 NLog 直接发布到 Datadog API 的方法,因此我不需要使用 Windows 代理来收集日志。

下面是如何做到这一点,因为我在任何地方都找不到答案。

【问题讨论】:

    标签: logging nlog datadog


    【解决方案1】:

    在 Datadog 中,在 Integrations, APIs 中创建一个 API 密钥。为 API 密钥命名。

    在 NLog.config 中创建一个目标。网址是 datadoghq.com 或 datadoghq.eu(适用于欧洲)。

     <target xsi:type="WebService"
            name="datadog"
            url="https://http-intake.logs.datadoghq.com/v1/input"
            encoding="utf-8"
            protocol="JsonPost"
            preAuthenticate="false" >
            <parameter name='date' type='System.String' layout='${longdate}'/> 
            <parameter name='ipaddress' type='System.String' layout='${aspnet-request-ip}'/>
            <parameter name="userid" type='System.String' layout="${aspnet-User-Identity}" />
            <parameter name="level"  type='System.String'  layout="${level:upperCase=true}"/>
            <parameter name="version" type='System.String'  layout="${configsetting:name=VersionSettings.Version:default=?}" />
            <parameter name="threadid"  type='System.String' layout="${threadid}" />
            <parameter name="controller"  type='System.String' layout="${aspnet-mvc-controller}" />
            <parameter name="class" type='System.String'  layout="${callsite:className=True:includeNamespace=False:fileName=False:includeSourcePath=False:methodName=True:cleanNamesOfAnonymousDelegates=True:cleanNamesOfAsyncContinuations=True}" />
            <parameter name="message" type='System.String'  layout="${message}" />
            <parameter name="elapsed"  type='System.String' layout ="${event-properties:item=elapsed}" />
            <parameter name="service"  type='System.String' layout="${configsetting:name=Nlog.Component}" />
            <parameter name="hostname"  type='System.String' layout="${configsetting:name=Nlog.HostName}" />
            <parameter name="exception"  type='System.String' layout="${exception:format=ToString}" />
            <parameter name="ddsource"  type='System.String' layout="csharp" />
            <header name="DD-API-KEY" layout="${configsetting:name=Nlog.datadog}"/>
            <header name="Content-Type" layout="application/json"/>
    </target>       
    

    现在创建一个写入目标的规则,你就完成了!

    所有参数都可以配置为 Datadog 中的列,和/或要选择的构面。我正在使用日期参数,以便日期与其他日志匹配,而不是显示内置日期。

    【讨论】:

    • 谢谢,我看到了,但是没有文档,不知道能不能像上面这个例子那样使用布局。您认为在 WebService 之上使用它有什么好处,或者您只是提供指针来查看?还是谢谢。
    • 不幸的是,实现 NLog-target 的人没有添加对从 NLog.config 配置 LogFormatter-attributes 的支持。
    • 嗨@PietervanKampen,我收到以下内部nlog 错误。有任何想法吗?谢谢:- 错误 WebService 目标 [datadog]:已引发错误。异常:System.ArgumentException:必须使用适当的属性或方法修改“Content-Type”标头。
    • @PietervanKampen,另外,只是想澄清一下,“DD-API-KEY”是您在集成中为 API 密钥定义的名称吗?谢谢!
    猜你喜欢
    • 2014-06-12
    • 1970-01-01
    • 2011-03-18
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    相关资源
    最近更新 更多