ASP.NET Coreのヘルスチェックの出力をカスタマイズする方法

こんにちは、暑くなってきて生きるのがしんどい石川です。今回はASP.NET Coreのヘルスチェック出力をカスタマイズする方法を紹介します。

デフォルトのヘルスチェック

早速ですが、デフォルトで用意されているヘルスチェックを実装し、エンドポイントを叩いてみましょう。

ヘルスチェックはStartup.csのConfigureServicesメソッドとConfigureメソッドに1行ずつ書くだけで表示できます。

public void ConfigureServices(IServiceCollection)
{
    services.AddHealthChecks();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseHealthChecks("/health")
}

さて、これで表示されるヘルスチェックは…

味気ねえ……………

ということでカスタマイズして見える情報を増やしたいと思います。

ビルド日時を表示する

.NET Coreでプログラムのビルド日時を取得する | cloud.config Tech Blogで紹介している手段でビルド日時を取得します。

UseHelthChecksメソッドにはHealthCheckOptionsを追加で受け入れるオーバーロードが用意されているのでそちらを用います。

app.UseHealthChecks("/health", new HealthCheckOptions()
{
   ResponseWriter = // ここにHttpContext.Response.WriteAsyncを返すTaskを渡す
});

ちょっとわかりにくいですが以下のようなメソッドを渡すとよさそうです。

private Task WriteResponse(HttpContext context, HealthReport result)
{
    context.Response.ContentType = "application/json; charset=utf-8"
    using(var stream = new MemoryStream())
    {
        using(var writer = new Utf8JsonWriter(stream, new JsonWriterOptions(){ Indented = true})
        {
            writer.WriteStartObject();
            writer.WriteString("Status", result.Status.ToString());
            // 前回記事で紹介したメソッドを呼び出す
            writer.WriteString("Build at", GetBuildTimeStamp().ToString());
            writer.WriteEndObject();
        }
    }

    var json = Encoding.UTF8.GetString(stream.ToArray());

    return context.Response.WriteAsync(json);
}

実際に渡してみます。

app.UseHealthChecks("/health", new HealthCheckOptions()
{
   ResponseWriter = WriteResponse
});

これを表示してみると…

いい感じ〜〜〜〜〜

といった感じでASP.NET Coreのヘルスチェックをカスタマイズする方法の紹介でした。

Utf8JsonWriterがちょっとクセがあって使いにくい感じでした…

それでは〜〜〜〜

FIXER Inc. 石川 順平
  • FIXER Inc. 石川 順平
  • 九州のとある高専卒のFIXER2年目。すき間時間でbotを作ったりAZ系の資格の勉強をしたりしています。まだまだAzure初心者です。趣味はゲームやったりバイクで出かけたりすることです。某MMORPGとか騎空士をしたりもしてます。

%d人のブロガーが「いいね」をつけました。