如何在 Azure 应用服务中使用 Datadog 代理?

How to use Datadog agent in Azure App Service?

我 运行 Web 应用作为 Azure 应用服务中的 Docker 容器。我想将 Datadog 代理添加到每个容器,例如,在后台读取日志文件并将它们 post 到 Datadog 日志管理。这是我试过的:

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

2) 按照 in this post. However, we have not found a simple way to integrate this with Azure DevOps release pipelines 所述使用多容器应用程序。我想也许可以创建一个包含 Azure CLI 命令的自定义部署任务?

3) 按照 Datadog Docker 文件 are built 的方式将 Datadog 代理包含到我们的 Docker 文件中。这个过程看起来相当复杂,并且向我们的 Docker 文件添加了许多额外的依赖项。我们也不希望使用 FROM datadog/agent.

从 Datadog Docker 文件继承我们的 Docker 文件

我认为这对于 Azure+Datadog 用户来说一定是一个非常标准的问题。知道什么是最干净的选择吗?

我怀疑 Datadog 代理是否可以在 App Services 网络应用程序上运行,因为您无权访问 运行 主机,它是为 VM 设计的。 你试过这个 https://www.datadoghq.com/blog/azure-monitoring-enhancements/ 了吗?他们说他们支持 AppServices

为了回应您关于想要自定义指标的评论,即使代理不在同一地点,这仍然是可能的。安装名为 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

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

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

来自应用服务的日志也可以发送到 Blob 存储并通过 Azure 函数从那里转发。与应用服务中的跟踪和自定义指标不同,这不需要 VM 运行 代理。该函数的文档和代码可在此处获得:

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

如果您想使用 DataDog 从应用服务的 Azure 功能进行日志记录,您可以使用 Serilog 和 DataDog Sink 到日志文件:

        services
            .AddLogging(loggingBuilder =>
                loggingBuilder.AddSerilog(
                    new LoggerConfiguration()
                        .WriteTo.DatadogLogs(
                            apiKey: "REPLACE - DataDog API Key",
                            host: Environment.MachineName,
                            source: "REPLACE - Log-Source",
                            service: GetServiceName(),
                            configuration: new DatadogConfiguration(),
                            logLevel: LogEventLevel.Infomation
                        )
                        .CreateLogger())
            );

Full source code and required NuGet packages 在这里: