Я запускаю веб-приложения как контейнеры Docker в Службе приложений Azure. Я хотел бы добавить агент Datadog в каждый контейнер, например, для чтения файлов журналов в фоновом режиме и публикации их в системе управления журналами Datadog. Вот что я пробовал:
1) Установка агента Datadog в качестве расширения, как описано в эта почта. Этот параметр недоступен для приложений службы приложений, он доступен только на виртуальных машинах.
2) Использование многоконтейнерных приложений, как описано в этом посте. Однако мы не нашли простого способа интегрировать это с Конвейеры выпуска Azure DevOps. Я предполагаю, что можно было бы создать настраиваемую задачу развертывания, обертывающую команды Azure CLI?
3) Включение агента Datadog в наши файлы Docker, следуя тому, как Datadog Dockerfiles построены. Процесс кажется довольно сложным и добавляет множество дополнительных зависимостей в наш Dockerfile. Мы также не хотели бы наследовать наши Dockerfile от Datadog Dockerfile с FROM datadog/agent.
Я предполагаю, что это довольно стандартная проблема для пользователей Azure + Datadog. Есть идеи, какой вариант самый чистый?


Я сомневаюсь, что агент Datadog когда-либо будет работать с веб-приложением App Services, поскольку у вас нет доступа к работающему хосту, он был разработан для виртуальных машин. Вы пробовали этот https://www.datadoghq.com/blog/azure-monitoring-enhancements/? Говорят, что поддерживают AppServices
Я создал расширение службы приложений для Datadog: github.com/payscale/datadog-app-service-extension
Чтобы ответить на ваш комментарий о желании использовать специальные показатели, это все еще возможно без агента в том же месте. После установки пакета данных nuget под названием statsdclient вы можете настроить его для отправки настраиваемых показателей агенту, расположенному в другом месте. Пример ниже:
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
Спасибо за ваш комментарий! Мы действительно используем аналогичный пакет под названием datadog-метрики для отправки пользовательских показателей в Datadog API. Я бы хотел использовать агент Datadog в качестве вспомогательного средства для сбора журналов из контейнера службы приложений. Но в итоге мы отправили журналы в Redis, а затем через Logstash в Datadog API.
Если я правильно понимаю то, что вы пишете, на мой взгляд, вам не стоит этого хотеть. Если вы хотите напрямую отправлять свои журналы в DataDog вместо того, чтобы сначала сохранять их самостоятельно, интеграция ваших журналов с другими системами окажется очень сложной. Например, что, если вы хотите отправить свои журналы также в анализатор журналов для проверки безопасности? Отправить это из вашего собственного хранилища журналов намного проще, чем сначала извлечь свои собственные журналы из DataDog.
Я написал расширение службы приложений для отправки метрик Datadog APM с ядром .NET и предоставил инструкции по его настройке здесь: https://github.com/payscale/datadog-app-service-extension
Дайте мне знать, если у вас возникнут какие-либо вопросы или это не относится к вашей ситуации.
Журналы из служб приложений также можно отправлять в хранилище BLOB-объектов и пересылать оттуда с помощью функции Azure. В отличие от трассировок и настраиваемых показателей из служб приложений, для этого не требуется виртуальная машина, на которой запущен агент. Документы и код для функции доступны здесь:
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())
);
Полный исходный код и необходимые пакеты NuGet находятся здесь:
Спасибо за ваш ответ! Мы действительно используем Azure Monitoring для служб приложений, но они предоставляют только предварительно определенные метрики. Мы хотим увеличивать пользовательские метрики с помощью агента DataDog. Но вы, вероятно, правы, в настоящее время нет возможности использовать агент со службами приложений.