#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