Как интегрировать Prometheus с приложением .NET Core?

#c# #prometheus #.net-core-3.1

#c# #prometheus #.net-core-3.1

Вопрос:

Я пытаюсь интегрировать Prometheus для моего консольного приложения C # .NET Core. Я не разрабатываю ASP.NET Основное приложение. Как мне отправить данные метрик в prometheus так, как мы обычно делаем для ASP.NET Основное приложение?

В ASP.NET Основное приложение,

Откройте Startup.cs и обновите ConfigureServices и настройте, чтобы посмотреть что-то вроде:

 public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<MetricReporter>();

    services.AddControllers();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // Other middleware components omitted for brevity

    // Make sure these calls are made before the call to UseEndPoints.
    app.UseMetricServer();
    app.UseMiddleware<ResponseMetricMiddleware>();

    app.UseEndpoints(endpoints => { endpoints.MapControllers(); });
}
 

Как я могу сделать это для консольного приложения .NET Core?

Ответ №1:

Вы можете использовать пакет Prometheus-net, который предоставляет некоторые полезные функции для интеграции.Net и Prometheus. Из-за документации вы можете запустить автономный сервер kestrel для консольных приложений, у которых нет доступных конечных точек http. для этого у вас должен быть .Веб в конце значения атрибута Sdk в файле проекта.

после этого вам нужно запустить kestrel:

 var metricServer = new KestrelMetricServer(port: 1234);
metricServer.Start();
 

Другой способ — просто использовать автономные Http-обработчики следующим образом:

 var metricServer = new MetricServer(port: 1234);
metricServer.Start();
 

Конфигурация по умолчанию будет публиковать показатели по URL-адресу /metrics .

MetricServer.Start() может вызвать исключение «отказано в доступе» в Windows, если ваш пользователь не имеет права открывать веб-сервер на указанном порту. Вы можете использовать netsh команду, чтобы предоставить себе необходимые разрешения:

 netsh http add urlacl url=http:// :1234/metrics user=DOMAINuser