2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

# .NET 9 でより純粋なメトリクス

Posted at

Metricsはプログラムの健全な運用をサポートしますが、過剰なメトリクスは問題の調査、ダッシュボード表示、およびログストレージにおいて負担となります。特に、健康チェックのリクエストメトリクスのような、ほとんど意味のない指標には注意が必要です。

.NET 9 では、新しい機能が導入され、一部のエンドポイントやリクエストでHTTPメトリクスの記録を選択的に除外することができます。

以下の方法で特定のエンドポイントのメトリクス記録を除外することができます:

  • Web APIコントローラー、SignalRハブ、または gRPC サービスに[DisableHttpMetrics]属性を追加します。
  • アプリケーションの起動時にエンドポイントをマッピングするときにDisableHttpMetrics()を呼び出します。
using Microsoft.AspNetCore.Http.Features;
using Microsoft.AspNetCore.Http.HttpResults;
using OpenTelemetry.Metrics;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddHealthChecks();
builder.Services.AddOpenTelemetry()
    .WithMetrics(builder => 
    {
        builder.AddMeter("Microsoft.AspNetCore.Hosting", "Microsoft.AspNetCore.Server.Kestrel");
        builder.AddView("http.server.request.duration",
            new ExplicitBucketHistogramConfiguration
            {
                Boundaries = new double[] { 0, 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 }
            });
    });

var app = builder.Build();

app.MapGet("/test", () => 
{
    return "ok";
});

app.MapHealthChecks("/healthz");
app.Run();

プログラムを実行し、次のコマンドを実行します:

dotnet-counters monitor -n DisableHttpMetricsDemo --counters Microsoft.AspNetCore.Hosting

(dotnet-counters がインストールされていない場合は、以下のコマンドでインストールしてください:dotnet tool install --global dotnet-counters

その後、http://localhost:5189/healthz にリクエストを送信すると、次のような結果が得られます:

画像

次に、26行目のコードを以下のように変更します:

app.MapHealthChecks("/healthz").DisableHttpMetrics();

再度トラッキングコマンドを実行し、/healthz にリクエストを送信すると、/healthz はメトリクスに含まれなくなります。

より複雑なシナリオでは、リクエストが特定のエンドポイントに直接マッピングされない場合や、動的にHTTPリクエストのメトリクス記録を除外したい場合、新しいプロパティMetricsDisabledを含むIHttpMetricsTagsFeatureインターフェースを使用できます。

HTTPリクエストを処理する際に、MetricsDisabledtrueに設定することで、そのリクエストのメトリクス記録を除外できます。

ミドルウェアを使って条件付きでHTTPリクエストのメトリクス記録を除外する具体例です。

app.Use(async (context, next) => 
{
    if (context.Request.Headers.ContainsKey("x-disable-metrics"))
    {
        var feature = context.Features.Get<IHttpMetricsTagsFeature>();
        if (feature != null)
        {
            feature.MetricsDisabled = true;
        }
    }
    await next(context);
});

詳細な検証方法は上記の通りです。

(Translated by GPT)

元のリンク:https://mp.weixin.qq.com/s?__biz=MzA3NDM1MzIyMQ==&mid=2247488390&idx=1&sn=085532e83fe46a46f94dab18fcb48a97&chksm=9f004caca877c5ba0bb91723f5881ee25451f7fc5f03102593d465cca25b79b6409e92886dd5&token=1036480445&lang=zh_CN#rd&wt.mc_id=MVP_325642

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?