利用Grafana和Prometheus监测 ASP.NET核心8+应用 (中文 (Chinese Simplified))

利用Grafana和Prometheus监测 ASP.NET核心8+应用

Comments

NOTE: Apart from English (and even then it's questionable, I'm Scottish). These are machine translated in languages I don't read. If they're terrible please contact me.
You can see how this translation was done in this article.

Wednesday, 18 September 2024

//

2 minute read

一. 导言 导言 导言 导言 导言 导言 一,导言 导言 导言 导言 导言 导言

监测是维持您申请的健康和绩效的一个重要部分。 我已经用这个网站来监测用户访问 木美 例外和差错 Seq 单位 但现在我想把业绩监测加到组合中 在此指南中,我们将探讨如何利用格拉法纳和普罗米修斯对你们的 ASP.NET核心应用进行监测。

当然,你可以使用格拉法纳云服务, 但是对于这个指南, 我们将专注于在当地设置一切, 这样你就可以完全控制你的监控堆。

目标是得到一个像这样的仪表板:

Grafana 设计板

嵌嵌入器

就像这个网站一样,我想把格拉法纳元素和普罗米修斯元素 加入我的老二作曲文件, 这样我就可以把所有东西 都按一个命令上下旋转, 并把它包装起来。

在这里,你可以看到,我设置了布洛埃修斯 和folfana服务。 它们使用我共同的应用程序网络, 并有 docker 数量来持续数据 。

docker 撰写文件

  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    volumes:
      - ./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:

您会看到我设置了一个默认密码( 确定并在第一次运行时更改此密码! ) 。 我还用观测塔使这些设备自动更新。

你们会注意到,我不会在这里绘制任何港口的地图, 我会利用Caddy提供Grafana服务, 普罗米修斯只能从Docker网络内进入。

本地运行可选端口

如果您想要,可以添加

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

如果你是本地人的话,这很方便 在 Windows 中注意, 您可以在 IDE 中运行您的应用程序, 并使用“ 主机. docker. internal: 7240 ” (无论哪个端口) 在容器内访问您的应用程序 。 您也可以在您的 docker- complicate 文件中指定一个“ bridge” 网络 。

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 配置 Prometheus 的文件, 以从 ASP. NET 核心应用程序中抓取衡量标准 。 以下是这个文件可能长什么样的基本例子:

global:
  scrape_interval: 15s

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

你看,我用的是内部名称 mostlulucid 也就是我的 docker 服务的名称, 它的默认端口为 8080 。 我很快会在ASP.NET核心公司 报道你是如何实现这个功能的

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();

这为普罗米修斯刮刮痕提供了终点和数据,并建立了两个“计量器”,为ASP.NET Core和Kestrel提供了性能数据。

更新更新更新

我花了一些时间来搞乱。 这是在.NET 8中的新特征, 似乎还是有点模糊。 上面的配置给出了 ASP. NET 仪表板所需的基本功能, 但是您可以传递更多信息给 Prometheus 。

首先是最新的 Open 遥测 Beta。 Expotor. prometheus. AspNetCore 似乎比 bita 1 版本( 至少在撰写本文时) 更稳定 。 所以我建议你用这个

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

然后您可以在您的应用程序中添加更完整的一套 Meters, 像这样 :

    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计数仪,以显示记忆的使用情况(并快速追踪记忆泄漏情况)。

内存使用

卡迪( 卡迪)

现在Grafana开始运行 我在我的Caddyfile加了一些Caddy配置 将Grafana的服务 暴露给外面的世界。

grafana.mostlylucid.net
{
   reverse_proxy grafana:3000
}

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

我将我的域指向这个Caddy服务器, 现在我可以访问外部世界的Grafana。

设置格拉法纳

网络浏览器的浏览器可以访问格拉法纳(http://localhost;如果本地运行的话,3000)。 使用您在 Docker Compose 文件中设定的证书记录 。

然后您需要为 Prometheus 设置数据源 。 要做到这一点,请单击左侧栏的齿轮图标,然后单击“数据源”。 点击“ 添加数据源 ”, 选择“ Prometheus ”, 并配置 URL 以指向您的 Prometheus 实例( http:// prometheus: 9090 if running local ) 。

Prometheus 数据源

在那之后,你可以开始创建仪表板 并想象你的量度!

仪表板

我们将使用仪表板 将ASP.NET核心应用 收集的测量数据进行视觉化分析 您可以创建自己的仪表板或从格拉法纳仪表板库导入已有的仪表板。

为此,我们将使用以下仪表板

添加到 Dashboards - > new - > import 并粘贴进口字段的仪表板识别码。 导入仪表板

这将在格拉法纳实例中添加仪表板。

然后我们可以进入那些新进口的仪表板, 并配置它们来指向我们的普罗米修斯数据源。

这应该能给你们带来我们在该条开头所看到的观点。 用于 Job 您选择了我们专门在 prometheus.yml 文件。 以我们为例 mostlylucid.. 那你就应该开始看到 仪表板里充斥的量子了!

在结论结论中

使用格拉法纳和普罗米修斯, 我们经历了多克、普罗米修斯和格拉法纳的配置步骤, 以及如何揭开ASP. 有了这个设置,你现在可以监测应用软件的性能, 并获得对其行为的有价值的洞察力。 快乐监控!

logo

©2024 Scott Galloway