我在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用户,我认为这肯定是一个非常标准的问题。有什么想法是最干净的选择吗?
答案 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>