Aracılığıyla paylaş


.NET .NET Aspire sağlık kontrolleri

Sağlık kontrolleri, bir uygulama hakkında kullanılabilirlik ve durum bilgileri sağlar. Sağlık kontrolleri genellikle HTTP uç noktaları olarak sunulur, ancak günlükleri yazmak veya mevcut sağlık durumuna göre başka görevler gerçekleştirmek için uygulama tarafından dahili olarak da kullanılabilir. Sağlık kontrolleri, genellikle bir uygulamanın durumunu kontrol etmek için bir dış izleme hizmeti veya kapsayıcı düzenleyicisi ile birlikte kullanılır. Sağlık kontrolleri tarafından bildirilen veriler çeşitli senaryolar için kullanılabilir.

  • Kapsayıcı düzenleyicileri, yük dengeleyiciler, API ağ geçitleri ve diğer yönetim hizmetleri tarafından alınan kararları etkileyin. Örneğin, kapsayıcılı bir uygulama için sistem durumu denetimi başarısız olursa, yük dengeleyici yönlendirme trafiği tarafından atlanabilir.
  • Veritabanı veya önbellek gibi temel bağımlılıkların kullanılabilir olduğunu doğrulayın ve uygun bir durum iletisi döndürebilirsiniz.
  • Bir uygulama beklendiği gibi yanıt vermediğinde uyarıları veya bildirimleri tetikleme.

.NET .NET Aspire sağlık kontrolü uç noktaları

.NET .NET Aspire, Geliştirme ortamlarında, Program.cs dosyasından AddServiceDefaults ve MapDefaultEndpoints yöntemleri çağrıldığında iki varsayılan durum denetimi HTTP uç noktasını kullanıma sunar.

  • /health uç noktası, uygulamanın istekleri almaya hazır olduğu yerde normal çalışıp çalışmadığını gösterir. Uygulamanın başladıktan sonra trafiği kabul etmeye hazır olarak kabul edilmesi için tüm sistem durumu denetimlerinin geçmesi gerekir.

    GET /health
    

    /health uç noktası, uygulama sağlıklıolduğunda HTTP durum kodu 200 ve text/plain değeri Healthy döndürür.

  • /alive, bir uygulamanın çalışıp çalışmadığını veya kilitlendiğini ve yeniden başlatılması gerektiğini belirtir. Uygulamanın canlı olarak kabul edilmesi için yalnızca canlı etiketiyle etiketlenmiş durum denetimleri geçmelidir.

    GET /alive
    

    /alive uç noktası, uygulama canlıolduğunda HTTP durum kodu 200 ve text/plain değeri olarak Healthy döndürür.

AddServiceDefaults ve MapDefaultEndpoints yöntemleri, uygulamanıza yalnızca sistem durumu denetimlerinin ötesinde OpenTelemetry ve hizmet bulma yapılandırmaları gibi çeşitli yapılandırmalar da uygular.

Geliştirme dışı ortamlar

Geliştirme dışı ortamlarda, /health ve /alive uç noktaları varsayılan olarak devre dışı bırakılır. Bunları etkinleştirmeniz gerekiyorsa, bu uç noktaları konak filtreleme ve/veya yetkilendirme gibi çeşitli yönlendirme özellikleriyle korumanız önerilir. Daha fazla bilgi için bkz. Sağlık kontrolleri ASP.NET Core.

Ayrıca, kötüye kullanım veya hizmet reddi saldırılarını önlemek için bu uç noktalar için istek zaman aşımlarını ve çıkış önbelleğini yapılandırmak avantajlı olabilir. Bunu yapmak için aşağıdaki değiştirilmiş AddDefaultHealthChecks yöntemini göz önünde bulundurun:

public static IHostApplicationBuilder AddDefaultHealthChecks(this IHostApplicationBuilder builder)
{
    builder.Services.AddRequestTimeouts(
        configure: static timeouts =>
            timeouts.AddPolicy("HealthChecks", TimeSpan.FromSeconds(5)));

    builder.Services.AddOutputCache(
        configureOptions: static caching =>
            caching.AddPolicy("HealthChecks",
            build: static policy => policy.Expire(TimeSpan.FromSeconds(10))));

    builder.Services.AddHealthChecks()
        // Add a default liveness check to ensure app is responsive
        .AddCheck("self", () => HealthCheckResult.Healthy(), ["live"]);

    return builder;
}

Önceki kod:

  • HealthChecksadlı bir ilkeyle sistem durumu denetimi isteklerine 5 saniyelik bir zaman aşımı ekler.
  • sistem durumu denetimi yanıtlarına HealthChecksadlı bir ilkeyle 10 saniyelik bir önbellek ekler.

Şimdi güncelleştirilmiş MapDefaultEndpoints yöntemini göz önünde bulundurun:

public static WebApplication MapDefaultEndpoints(this WebApplication app)
{
    var healthChecks = app.MapGroup("");

    healthChecks
        .CacheOutput("HealthChecks")
        .WithRequestTimeout("HealthChecks");

    // All health checks must pass for app to be
    // considered ready to accept traffic after starting
    healthChecks.MapHealthChecks("/health");

    // Only health checks tagged with the "live" tag
    // must pass for app to be considered alive
    healthChecks.MapHealthChecks("/alive", new()
    {
        Predicate = static r => r.Tags.Contains("live")
    });

    return app;
}

Önceki kod:

  • Sağlık kontrolü uç noktalarını / yolu altında grupla.
  • Çıktıyı önbelleğe alır ve ilgili HealthChecks ilkesiyle bir istek süresi belirtir.

Güncelleştirilmiş AddDefaultHealthChecks ve MapDefaultEndpoints yöntemlerine ek olarak, hem istek zaman aşımları hem de çıktı önbelleği için ilgili hizmetleri de eklemeniz gerekir.

Uygun tüketen uygulamanın giriş noktasına (genellikle Program.cs dosyası) aşağıdaki kodu ekleyin:

// Wherever your services are being registered.
// Before the call to Build().
builder.Services.AddRequestTimeouts();
builder.Services.AddOutputCache();

var app = builder.Build();

// Wherever your app has been built, before the call to Run().
app.UseRequestTimeouts();
app.UseOutputCache();

app.Run();

Daha fazla bilgi için bkz. ASP.NET Core'de İstek zaman aşımları ara yazılımı ve Çıkış önbelleğe alma ara yazılımı ASP.NET Core'da.

Tümleştirme sistem durumu denetimleri

.NET .NET Aspire tümleştirmeleri, uygulamanız için ek sağlık kontrolleri de kaydedebilir. Bu sağlık kontrolleri, /health ve /alive uç noktalarının geri döndürülen durumuna katkıda bulunur. Örneğin, .NET AspirePostgreSQL tümleştirmesi, aşağıdaki koşulları doğrulamak için otomatik olarak bir sağlık kontrolü ekler.

  • Veritabanı bağlantısı kurulabilir
  • Veritabanı sorgusu başarıyla yürütülebilir

Bu işlemlerden herhangi biri başarısız olursa, ilgili sağlık kontrolü de başarısız olur.

Sağlık kontrollerini yapılandırma

Kullanılabilir yapılandırma seçeneklerinden birini kullanarak belirli bir tümleştirme için sistem durumu denetimlerini devre dışı bırakabilirsiniz. tümleştirmeleri, gibi yapılandırma dosyaları aracılığıyla ayarların uygulanması için Microsoft.Extensions.Configurations destekler:

{
  "Aspire": {
    "Npgsql": {
      "DisableHealthChecks": true,
    }
  }
}

Sistem durumu denetimlerini yapılandırmak için satır içi temsilci de kullanabilirsiniz:

builder.AddNpgsqlDbContext<MyDbContext>(
    "postgresdb",
    static settings => settings.DisableHealthChecks  = true);

Ayrıca bkz.