如何在Azure App Service中使用Datadog代理?

时间:2018-12-21 06:50:36

标签: azure azure-devops azure-web-sites datadog

我在Azure App Service中将Web应用程序作为Docker容器运行。我想将Datadog代理添加到每个容器,例如,在后台读取日志文件并将其发布到Datadog日志管理中。这是我尝试过的:

1)按照this post中的说明安装Datadog代理作为扩展。此选项似乎不适用于App Service应用程序,仅在VM上可用。

2)使用in this post中所述的多容器应用程序。但是,我们还没有找到一种将其与Azure DevOps release pipelines集成的简单方法。我想可能可以创建一个包装Azure CLI命令的自定义部署任务?

3)通过遵循Datadog Dockerfile are built的方式,将Datadog代理包含到我们的Dockerfile中。该过程似乎非常复杂,并为我们的Dockerfile添加了许多额外的依赖项。我们也不想使用FROM datadog/agent从Datadog Dockerfile继承我们的Dockerfile。

对于Azure + Datadog用户,我认为这肯定是一个非常标准的问题。有什么想法是最干净的选择吗?

5 个答案:

答案 0 :(得分:1)

我怀疑Datadog代理是否会在App Services Web应用程序上正常工作,因为您无权访问正在运行的主机,它是为VM设计的。 您是否尝试过此https://www.datadoghq.com/blog/azure-monitoring-enhancements/?他们说他们支持AppServices

答案 1 :(得分:1)

来自App Services的日志也可以发送到Blob存储,并通过Azure功能从那里转发。与来自App Services的跟踪和自定义指标不同,这不需要运行代理的VM。该功能的文档和代码在此处提供:

https://github.com/DataDog/datadog-serverless-functions/tree/master/azure/blobs_logs_monitoring

答案 2 :(得分:0)

要回复您对需要自定义指标的评论,在没有座席位于同一位置的情况下仍然可以这样做。安装名为statsdclient的datadog的nuget软件包后,您可以对其进行配置,以将自定义指标发送到其他位置的代理。下面的示例:

using StatsdClient;

var dogstatsdConfig = new StatsdConfig
{
    StatsdServerName = "127.0.0.1", // Optional if DD_AGENT_HOST environment variable set
    StatsdPort = 8125, // Optional; If not present takes the DD_DOGSTATSD_PORT environment variable value, else default is 8125
    Prefix = "myTestApp", // Optional; by default no prefix will be prepended
    ConstantTags = new string[1] { "myTag:myTestAppje" } // Optional
};

StatsdClient.DogStatsd.Configure(dogstatsdConfig);
StatsdClient.DogStatsd.Increment("fakeVisitorCountByTwo", 2); //Custom metric itself

答案 3 :(得分:0)

我已经编写了一个应用程序服务扩展,用于通过.NET Core发送Datadog APM指标,并提供了有关如何在此处进行设置的说明:https://github.com/payscale/datadog-app-service-extension

如果您有任何疑问或不适用于您的情况,请告诉我。

答案 4 :(得分:0)

如果要使用DataDog从App Service的Azure功能进行日志记录,可以使用Serilog和DataDog Sink到日志文件:

  <link id="maincss" rel="stylesheet">
</head>
<body>
  <script id="mainscript"></script>
  <script>
    function readTextFile(file, callback) {
        var rawFile = new XMLHttpRequest();
        rawFile.overrideMimeType("application/json");
        rawFile.open("GET", file, true);
        rawFile.onreadystatechange = function() {
            if (rawFile.readyState === 4 && rawFile.status == "200") {
                callback(rawFile.responseText);
            }
        }
        rawFile.send(null);
    }

    readTextFile("/dist/manifest.json", function(text){
        var data = JSON.parse(text);
        document.getElementById('mainscript').setAttribute('src', '/dist/'+data.main[1]);
        document.getElementById('maincss').setAttribute('href', '/dist/'+data.main[0]);
    });
  </script>

Full source code and required NuGet packages在这里: