DEV Community

Cover image for Visualize Asp Net Core metrics with Grafana
ohalay
ohalay

Posted on

Visualize Asp Net Core metrics with Grafana

Spoiler: In this article, we’ll walk through how to collect and visualize metrics from an ASP.NET Core application using OpenTelemetry, Prometheus, and Grafana. We’ll configure the necessary services and see how to monitor performance metrics in a real-time dashboard.

Collect metrics with OTLP

A metric is a measurement of your application’s behavior that we aggregate over a given time period and capture at runtime. OpenTelemetry (OTLP) is an industry standard for collecting and exporting metrics. Here’s an example of how to set it up in your ASP.NET Core application metrics:

appBuilder.Services.AddOpenTelemetry()
    .ConfigureResource(builder => builder
        .AddService(serviceName: "my_service_name"))
    .WithMetrics(builder => builder
        .AddAspNetCoreInstrumentation() // metric collector
    );
Enter fullscreen mode Exit fullscreen mode

Produce metrics with Prometheus

Once you've collected metrics with OpenTelemetry, you can export them using any supported OpenTelemetry exporter. To export them to Prometheus, we’ll add the .AddPrometheusExporter() method to the metric configuration. It works as a pull model, with a scrap date from the application. That means, an application should provide an endpoint with metrics for scrapping. To do that we need to add middleware app.MapPrometheusScrapingEndpoint(). Prometheus scrapes this /metrics endpoint at regular intervals to collect the application’s time-series data metrics:

# HELP http_requests_total The total number of HTTP requests.
# TYPE http_requests_total counter
http_requests_total{method="post",code="200"} 1027 1395066363000
Enter fullscreen mode Exit fullscreen mode

Define Grafana charts

The dotnet team created a Grafana charts for the built-in Asp Net Core metrics. We can also search the community charts published in Grafana. We just need to import it.

Run locally

We will use docker-compose with AspNet Core, Prometheus, and Grafana containers. We download Grafana charts and add them to the container (grafana folder). We also configured the Prometheus scrab job, prometheus.yml.

services:
  httpprometheus:
    image: ${DOCKER_REGISTRY-}httpprometheus
    build:
      context: HttpPrometheus
      dockerfile: Dockerfile
    environment:
      - OTEL_RESOURCE_ATTRIBUTES=service.namespace=demo,deployment.environment=dev

  prometheus:
    image: prom/prometheus
    restart: always
    ports:
      - 9090:9090
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro

  grafana: 
    image: grafana/grafana
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=P@ssw0rd
    restart: always
    ports:
      - 3000:3000
    volumes:
      - ./grafana/datasource.yml:/etc/grafana/provisioning/datasources/datasource.yml
      - ./grafana/dashboards:/etc/grafana/provisioning/dashboards 
Enter fullscreen mode Exit fullscreen mode

Source code

Vsualize Asp Net Core metrics with Promethous and Grafana

An example of Asp Net Core metric configuration using Promethous and Grafana. Also docker-compose was provided to run locally.

Requirements

  • .NET8
  • Docker





Help Links

Top comments (0)