# Використання Grafana і Prometheus для спостереження за ядром ASP. NET 8+ Програми

<!--category-- ASP.NET, Grafana, Prometheus, Docker -->
<datetime class="hidden">2024-09-18T04:45</datetime>

# Вступ

Слідкуючи за своїм застосуванням, ви зможете підтримувати здоров'я та ефективність його застосування. У мене вже є візити до цього сайту для моніторингу користувачів на основі [Умаміzambia_ districts. kgm](/blog/category/Umami) і винятки і помилки за допомогою [Seq](/blog/category/Seq) але зараз я хотів додати моніторинг вистави до цієї суміші.
У цьому путівнику ми дослідимо, як налаштувати спостереження за застосуваннями ядра ASP.NET з використанням Grafana і Prometheus.

Ви, звичайно ж, можете скористатися службою "Гмари Графани," але для цього провідника ми зосередимося на налаштуванні всього місцевого, щоб ви могли повністю контролювати стос моніторингу.

Метою є отримати панель приладу щось на зразок цього:

![Графана- ДашбордCity in Newfoundland Canada](grafanadashboard.png)

[TOC]

# Панель

Як завжди з цим сайтом я хотів додати елементи Графана і Prometheus до мого файлу складів, це дозволяє мені перевертати все вгору і вниз в одній команді і тримати все в порядку.

Тут ви бачите, що я заснував прометеус і сервіс "Гафана." Вони використовують мою спільну програму app_net і мають томи докерів для збереження даних.

## Набір файлів Docker

```yaml
  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:
```

Ви побачите, що я налаштував типовий пароль (не забудьте про нього і змініть його під час першого запуску!). Я також уможливив їх робити автозавершення, використовуючи " Вартову башту."

Ви помітите, що я не наклеюю тут порти, я буду використовувати каді, щоб надати доступ до служби Grafana, і Prometheus доступний тільки з мережі Docker.

## Додаткові порти для локального запуску

Якщо ви хочете додати

```yaml
# Prometheus
    ports:
      - "9090:9090"
# Grafana
    ports:
      - "3000:3000"
```

Що може бути корисним, якщо ти бігаєш локально. Зауважте, що у Windows ви можете запустити вашу програму у вашому IDE і використовувати 'host.docker.internal: 7240' (у будь- якому порті), щоб отримати доступ до вашої програми з контейнера. Ви також можете вказати мережу "bridge" у вашому файлі docker-combound таким чином.

```yaml
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
```

## Налаштування Prometheus

Потім ми додаємо новий `prometheus.yml` файл, призначений для налаштування Прометей для відтворення вимірів даних з нашої програми ASP. NET. Тут ми маємо основний приклад того, як може виглядати цей файл:

```yaml
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'mostlylucid'
    metrics_path: /metrics
    scheme: http                
    static_configs:
      - targets: ['mostlylucid:8080']
```

Тут ви бачите, що я вживаю внутрішню назву `mostlulucid` який є назвою моєї служби Docker і це типовий порт 8080.
Я объясню, как ты всплываешь в Короле АСПнет.

# Основна програма ASP. NET

Я слідкував за [тут знайдено інструкції](https://github.com/dotnet/aspire/tree/main/src/Grafana) чтобы устроить это.

Спочатку потрібно додати `OpenTelemetry.Exporter.Prometheus.AspNetCore` Пакунок NuGet до вашого проекту ASP. NET. Ви можете зробити це за допомогою виконання наступної команди у вашому каталозі проекту:

```bash
dotnet add package OpenTelemetry.Exporter.Prometheus.AspNetCore
```

Далі, вам слід налаштувати вашу програму на виявлення вимірів. У вашій `Program.cs` файл, ви можете додати такий код:

```csharp
   services.AddOpenTelemetry()
        .WithMetrics(builder =>
        {
            builder.AddPrometheusExporter();
            builder.AddMeter("Microsoft.AspNetCore.Hosting", "Microsoft.AspNetCore.Server.Kestrel");
        });
   
    app.MapPrometheusScrapingEndpoint();
```

Ця програма надає кінцеву точку і дані для Prometheus, щоб відшкребти і встановити два " Метри," які нададуть дані щодо швидкодії ядра ASP. NET і Kestrel.

## Оновити

Я провела немного времени, вмешиваясь. Це нова функція в.NET 8 і все ще трохи невловимий, як здається. У налаштуваннях, наведеному вище, містяться основні можливості панелі приладів ASP. NET, але докладніші відомості ви можете отримати за допомогою Prometheus.

Спочатку остання Бета OpenTelemitry.Exporter. Prometheus. AspNetCore здається більш стабільною ніж версія бета 1 (принаймні на час написання). Тому я рекомендую вам скористатися цим.

```bash
dotnet add package OpenTelemetry.Exporter.Prometheus.AspNetCore --version 1.9.0-beta.2
```

Після цього ви можете додати до вашої програми більш повний набір Метерів:

```csharp
    services.AddOpenTelemetry()
        .WithMetrics(builder =>
        {
            builder.AddPrometheusExporter();
            builder.AddAspNetCoreInstrumentation();
            builder.AddRuntimeInstrumentation();
            builder.AddHttpClientInstrumentation();
        }); 
```

Якщо ви додасте до них F12, ви побачите, що ці пакунки додаються як раніше:

Наприклад, `AddAspNetCoreInstrumentation` додати всі вбудовані вихідні дані для ядра ASP. NET.

```csharp
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, щоб показати використання пам'яті (і швидко прослідковую за допомогою посередніх витоків).

![Використання пам' яті](grafana-gcmemory.png)

# КаддіCity in New Brunswick Canada

Тепер у нас є Графана і працює я додав деякі конфігурації кафеді, щоб викрити службу Графана зовнішньому світу.

```json
grafana.mostlylucid.net
{
   reverse_proxy grafana:3000
}

http://grafana.mostlyucid.net
{
   redir https://{host}{uri}
}
```

Я направил свой домен на этот кав'ярный сервер и теперь могу добраться до Графаны из исходного мира.

# Як встановити графану

Після того, як все буде запущено, ви зможете отримати доступ до Grafana за допомогою вашої адреси (http: // localhost; 3000, якщо запущено локально) у вашому переглядачі інтернету. Увійти до системи з використанням вказаних вами реєстраційних даних у вашому файлі Docker Compose.

Тоді вам потрібно створити джерело даних для Prometheus. Щоб зробити це, натисніть піктограму передач на лівій бічній панелі, а потім натисніть кнопку " Джерела даних." Натисніть кнопку " Додати джерело даних," виберіть " Prometheus " і налаштуйте адресу URL, щоб вказати на ваш екземпляр Prometheus (http: // prometheus: 9090, якщо запущено локально).

![Джерело даних Prometheus](grafana-prometheussetup.png)

Після цього ви можете почати створювати панелі приладів і візуалізувати ваші вихідні дані!

## Дошки приладів

Ми будемо використовувати панелі приладів, щоб візуалізувати вихідні дані, зібрані з нашої програми ASP.NET. Ви можете створити власні панелі приладів або імпортувати існуючі з сховища панелі приладів Grafana.

Для цього ми використаємо такі панелі приладів

- [Панель огляду ядра ASP. NET](https://grafana.com/grafana/dashboards/19924-asp-net-core/) - показує найважливіші вихідні дані для програм ASP.NET.

- [ASP. NET Core End point Drashboard](https://grafana.com/grafana/dashboards/19925-asp-net-core-endpoints/) - показує метрики окремих кінцевих пунктів у вашому додатку.

Щоб додати ці дані до Dashboards - > New- > Import і вставити ідентифікатор панелі приладів до поля імпортування.
![Імпортувати панель приладів](grafana-aspnetcoredash.png)

Це додасть панель приладів до вашого примірника Ґрафани.

НЕМ можна зайти до цих щойно імпортованих панель приладів і налаштувати їх так, щоб вони вказували на наше джерело даних Prometheus.

Це покаже вам погляд, який ми бачили на початку статті. for `Job` Ви можете вибрати назву завдання, яке ми спеціально встановили у `prometheus.yml` файл. У нашому випадку `mostlylucid`. Тоді ви повинні почати бачити виміри на вашому панелі приладів!

# Включення

У цьому путівнику ми обговорювали, як встановити моніторинг на твою програму АСП.NET, використовуючи Grafana і Prometheus. Ми пройшли етапи налаштування Докера, Прометея, і Графани, а також викриття вимірів з вашої програми ASP.NET. За допомогою цього налаштування ви можете спостерігати за швидкодією ваших програм і отримувати цінні знання про їхню поведінку. Щасливого моніторингу!