Використовуючи графану та Prometheus для моніторингу програм ASP.NET Core 8+
Введение
Спостереження є невід 'ємною складовою підтримки здоров' я та продуктивності ваших програм. Я вже користуюсь цим сайтом для спостережень відвідувачів, використовуючи Умамі і винятків та помилок за допомогою Скв але тепер я хотів додати контроль якості до комбінації В цьому інструкції ми познайомимося з тим, як налагодити систему спостереження для ASP.NET Core за допомогою графані та Prometheus.
Звичайно, ви можете користуватися сервісом Grafana Cloud,, але для цього інструкції, ми зосередимося на локальному встановленні всього, щоб мати повну контроль над вашим стегом спостереженняM SK2
Ми хочемо отримати ось таку панель.

Докер
Як зазвичай з цим сайтом, я хотів додати елементи Grafana та Prometheus до мого комп 'ютерного файлу комп' ютера, це дозволяє мені крутити все вгору і вниз в одній команді і зберігати все зашифроване
Тут ви бачите, що я створив сервіси prometheus та grafana. Вони використовують мою звичайну програмуM SK1 мережу і мають докерні об 'єми, щоб зберігати дані
Докер Compose File
prometheus:
image: prom/prometheus:latest
container_name: prometheus
volumes:
- prometheus-data:/prometheus
- ./prometheus.yml:/etc/prometheus/prometheus.yml
command:
- '--config.file=/etc/prometheus/prometheus.yml'
labels:
- "com.centurylinklabs.watchtower.enable=true"
networks:
- app_network
grafana:
image: grafana/grafana:latest
container_name: grafana
labels:
- "com.centurylinklabs.watchtower.enable=true"
volumes:
- grafana-data:/var/lib/grafana
networks:
- app_network
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=testpassword1234
- volumes:
grafana-data:
prometheus-data:
Ви побачите, що я встановив початковий пароль ( переконайтесь і змінюйте його на першому запускі !). Я також включив їх до автоматичної обробки МSK3 оновлення за допомогою телевізора
Ви' зауважте, що я не маюM SK1 тут жодних портів на карті , Я' використаю Caddy для того, щоб забезпечити доступ до сервісу Grafana, а Prometheus доступний лише з мережі Docker
Опціональні порти для локального запуску
Якщо ви хочете, ви можете додати
# Prometheus
ports:
- "9090:9090"
# Grafana
ports:
- "3000:3000"
Це дуже зручно, якщо ви ' працюєте локально . Запам 'ятайте, що в Windows ви можете запустити вашу програму у вашому IDE і використовувати МSK2hostM SK3docker.internalMSC5 МSK6з будь-яким портомMNK7 щоб отримати доступ до вашої програми з контейнераMRK8 ВиMسک9d також маєте на увазі 'bridgeMスク11 мережу у вашій докері
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
command:
- '--config.file=/etc/prometheus/prometheus.yml'
ports:
- "9090:9090"
networks:
- monitoring
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3000:3000"
networks:
- monitoring
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=admin
networks:
monitoring:
driver: bridge
Konfiguracja Prometheus
Тоді ми додаємо нове prometheus.yml файл для конфігурації Prometheus, щоб відрізати метрики з нашої ASP.NET Корінної додатки
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'mostlylucid'
metrics_path: /metrics
scheme: http
static_configs:
- targets: ['mostlylucid:8080']
Тут ви бачите, я використовую внутрішнє ім 'я mostlulucid що є ім 'ям мого докер-сервісу і його початковий порт '
Я покажу, як це можна зробити в ASP.NET Core незабаром
ASP.NET - це ядро застосування
Я слідував за тут можна знайти інструкції для створення цього.
Спочатку треба додати OpenTelemetry.Exporter.Prometheus.AspNetCore NuGet пакету до вашого ASP.NET Корейного проекту
dotnet add package OpenTelemetry.Exporter.Prometheus.AspNetCore
Далі, вам потрібно сконфигурувати вашу програму для викриття метрики Program.cs файл, ви можете додати наступний код
services.AddOpenTelemetry()
.WithMetrics(builder =>
{
builder.AddPrometheusExporter();
builder.AddMeter("Microsoft.AspNetCore.Hosting", "Microsoft.AspNetCore.Server.Kestrel");
});
app.MapPrometheusScrapingEndpoint();
Таким чином, Prometheus отримує кінцевий пункт і дані для відскапування і запускає два 'Meters', які забезпечують дані про ефективність ASPM SK2NET Core та KestrelMSC3
Обновляти
Я витратив деякий час на перемовини з . Це нова функція в | . | NET | МSK2 | і все ще трохи нестабільна, як здається |. | Нагорішня конфігурація дає базові характеристики, які вам потрібні для ASP \ . \ NET панелі керування, але там \ МSK5 \ є більше інформації, яку ви можете передати до Prometheus
Перш за все, найновіша бета OpenTelemetry.ExporterM SK1Prometheus.AspNetCore, здається, є більш стабільною, ніж бета МSK3 версія МSK4 принаймні на момент написання ). Тому я рекомендую вам використовувати її
dotnet add package OpenTelemetry.Exporter.Prometheus.AspNetCore --version 1.9.0-beta.2
Тоді ви можете додати до вашої додатки більш повний набір вимірювачів, як ось так:
services.AddOpenTelemetry()
.WithMetrics(builder =>
{
builder.AddPrometheusExporter();
builder.AddAspNetCoreInstrumentation();
builder.AddRuntimeInstrumentation();
builder.AddHttpClientInstrumentation();
});
Якщо ввести F12 в них, то побачите, що вони додають пакети так само, як і раніше
Наприклад, AddAspNetCoreInstrumentation додайте всі вбудовані метрики для ASP.NET Core.
return builder
.AddMeter("Microsoft.AspNetCore.Hosting")
.AddMeter("Microsoft.AspNetCore.Server.Kestrel")
.AddMeter("Microsoft.AspNetCore.Http.Connections")
.AddMeter("Microsoft.AspNetCore.Routing")
.AddMeter("Microsoft.AspNetCore.Diagnostics")
.AddMeter("Microsoft.AspNetCore.RateLimiting");
і т.д.
Як тільки вони ввімкнені, ви можете отримати більше інформації на панелях керування. Наприклад, я додав в шахту GC-метр, щоб показати використання пам 'яті ( і швидко відстежити випадкові витіки

Кадді
Тепер ми маємо графану, яка працює. Я додав певну конфігурацію Caddy до мого Caddyfile для того, щоб показати службу Grafana зовнішньому світу.
grafana.mostlylucid.net
{
reverse_proxy grafana:3000
}
http://grafana.mostlyucid.net
{
redir https://{host}{uri}
}
Я показав свій Домен на цей сервер Caddy, і тепер я можу отримати доступ до графани з зовнішнього світу.
Установлення графани
Після того, як все працює, ви можете отримати доступ до графані, навігаючись до вашого веб-сайту (httpM SK2localhost;3000 при локальному запускі МSK4 у вашому веб-браузері МSK5 Заходьте, використовуючи дані, які ви встановили в файлі Docker Compose
Далі вам потрібно запустити вихідний код для Prometheus. Для цьогоM SK1 натиснути на значок передач у лівій панелі збоку, потім ще натисніть на "Źródла даних". Натиснути na МSK5Добавити вихідного коду данихМSK6 виберите | " | Prometheus | МSK8 | і сконфигуруйте URL для того, щоб показати вашому экземпляру Prometeus.

Після цього, ви можете почати створювати панелі керування і візуалізувати ваші метрикиM SK1
Навігатори
Ми' використовуватимемо панелі для візуалізації показників, зібраних з нашої ASP.NET Core applicationM SK2 Ви можете створити власні панелі або импортувати наявні з репозитори графани панелі
Для цього ми - ' - використовуємо ось такі панелі
ASP.NET Корінь обкладинки - показує найважливіші показники ASP
ASP.NET Core Endpoint Dashboard - показує метрики для окремих кінцевих точок в вашій програмі .
Для того, щоб додати їх до панелі, треба ввести і ввести ID панелі в поле введення.

Далі вона додасть панель до вашої instance Grafana.
Тоді ми можемо зайти до цих нововвезених панелей і налаштувати їх, щоб звернути увагу на наш Prometheus вихідний код.
Це дасть вам вигляд, який ми бачили на початку статті. Для Job ви вибираєте ім 'я робота, яке ми спеціально встановили в prometheus.yml файл. У нашому випадку mostlylucid. Тоді ви маєте почати бачити, як метрики заповнюються на вашій панелі
На завершення
В цьому інструкції ми розповідали про те, як налагодити систему спостереження за вашими ASP. NET-корейними застосуваннями, використовуючи Grafana та Prometheus. Ми пройшли етапи конфігурації докеру , PrometheusMSC4 і GrafanaM SK5, а також про те як відобразити метрики з вашого ASP