- Giriş
- Nedir
- Tanıyalım
- Health Check
- Health Check UI
- Özelleştirmeler
- Akılda Kalanlar
- Öneriler
Giriş
Bu yazı içerisinde basit ve sade hali ile kullandığımız ürün ve hizmetlerin durumunu sorgulayabileceğimiz bir yapıyı ne kadar kolay kurabileceğimizi birlikte deneyimlemek istiyorum.
j : Müşteriler bir kaç saattir sisteme erişimde sıkıntılar yaşıyormuş.
j: Ayrıca sistemde bir gariplik var MSSQL server çok yavaşlamış.
s : SQL Server’a bağlanabiliyor musunuz?
j : Evet bağlanabiliyoruz.
s : Sorgu atabiliyor musunuz? (bkz: sorgu atmak )
j : Evet bay s.
s : Bana hemen sp_WhoIsActive’i çağırın!!!11 (Büyük harfler ile)
Nedir
“Health Check” bizlere,
bir uygulamanın veya sistemin sağlıklı çalışıp çalışmadığını kontrol imkanı sağlar.
Ayrıca uygulamanın sağlık durumunu sorgulayabileceğimiz bir endpoint sunar.
Basit bir örnek ile kontrol edebilecekleriniz;
- Uygulamanız için kulladığın bir veritabanı veya servisin durumunu
- Uygulamanızın çalıştığı environment ile ilgili hafıza ve disk durumunu
- Uygulamanın kendi durumunu
Bu sayede uygulamalarımıza otomatik olarak sistemin arızalı kısımlarına nasıl müdahale etmesi gerektiğini veya böyle bir durum oluştuğunda nasıl aksiyonlar alacağınızı belirtebilirsiniz.(isteğimiz)
“veya manuel olarak bir şeyler yapabilirsiniz.” (gerçeğimiz)
Basit bir örnek ile kontrol sonrası yapabileceklerimiz;
- Kullanıcılara ya da kendinize hatalı alanları bildirebilirsiniz.
- Hatalı kısımlara müdahale edebiliriz. (etmeyede bilirsiniz)
Tanıyalım
Burada bizlere uygulama geliştirirken kullandığımız birçok ürünün basit health check ’lerini paketler halinde sunan arkadaşlara teşekkür ederek başlamak gerekir.
Hakkı teslim edelim; dotnet core içerisinde health check ile ilgili boşluğu doldurmaya çalışan arkadaşlar hakkında daha detaylı bir bilgi almak isterseniz şu videoyu izleyebilirsiniz.
Eski projenin linki
http://github.com/xabaril/beatpulse [DEPRECATED]
Aktif projenin linki https://github.com/Xabaril/AspNetCore.Diagnostics.HealthChecks
Proje sayfasına girdiğinizde göreceğiniz hazır health check ’lerden bazıları
…Sql Server, MySql, Oracle, Sqlite, RavenDB, Postgres, EventStore, RabbitMQ, Elasticsearch, Redis, System: Disk Storage, Private Memory, Virtual Memory, Process, Windows, Service…
Health Check
Health Check Namespace
Microsoft.Extensions.Diagnostics.HealthChecks
Hemen namespace’i verdim çünkü bu namespace olmasa bundan sonra anlatılacakların hiç bir anlamı yok. İleride custom bir HealthCheck oluştururken ihtiyacımız olacak.
dotnet new webapi -n HealthCheck -o HealthCheck
# HealthCheck
dotnet add package Microsoft.AspNetCore.Diagnostics.HealthChecks
# UI için gerekli olacak paket
dotnet add package AspNetCore.HealthChecks.UI
# Örnek HC paketleri
dotnet add package AspNetCore.HealthChecks.RabbitMQ
dotnet add package AspNetCore.HealthChecks.System
dotnet add package AspNetCore.HealthChecks.Redis
Basit Ayarlar
public void ConfigureServices(IServiceCollection services)
{
services.AddHealthChecks();
}
_p_ublic void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseHealthChecks("/hc");
}
En basit hali ile yukarıdaki gibi konfigüre ettiğinizde. “hc” path’inde sizi karşılayacak görüntü bu olmalıdır.
Şimdi farklı HealthCheck ’ler eklemeye başlayalım.
Yeni bir kontrol eklemenin farklı birçok yolu var fakat burada yakalamanız gereken nokta en sonunda bu kontrollerin geriye bir durum döndürüyor olmasıdır.
Eğer ihtiyacınız olur ise kendi modelinizi oluşturarak status haricinde kendi modellerinizi de servis üzerinden durum kontrollerine ekleme imkanınız bulunuyor.
Basit kontrollerinizi aşağıdaki gibi ekleyebilirsiniz.
IHealthCheck interface’ini implement ederek daha karmaşık HealthCheck ’ler ekleyebilirsiniz.
Health Check UI
public void ConfigureServices(IServiceCollection services)
{
services.AddHealthChecks();
}
_p_ublic void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseHealthChecks("/hc");
}
Özelleştirmeler
Uygulama içerisinde endpoint’leri belirlemek istediğinizde
UseHealthChecks() için path’i ayarlamanız yeterli olacaktır.
Microsoft.AspNetCore.Diagnostics.HealthChecks altındaki
HealthCheckOptions sayesinde health report response’larını özelleştirme imkanı bulunmaktadır. Kendiniz için bir ResponseWriter oluşturabilirsiniz.
Aslında HealthChecksUI da özünde bunu gerçekleştirmektedir.
UseHealthChecksUI() için özelleştirilen endpoint’lerde kafa karıştırabilen bir nokta ApiPath ile belirttiğimiz path’in UI tarafından kullanılıyor olmasıdır.
Aslında sadece basit örneklerde belirlediğimiz “/hc” endpoint’lerinin ResponseWriter ’ları ile ApiPath ’in ResponseWriter ’ları farklıdır.
Konfigure ederken appsettings veya direkt kod içerisinden tanımlamalar yapma şansınız bulunmaktadır.
Akılda Kalanlar
(+) “WebHook ile entegrasyon yapma şansı var” diyerek cümleyi devam ettirmek istedim fakat bu konuda yapılabileceklerinizi hayal gücünüze bırakıyorum.
(+) Çok hızlı bir şekilde bir UI’a sahip oluyorsunuz.
(+) Çok hızlı bir şekilde bilinen ürünler için Health Check ’ler oluşturabiliyorsunuz.
(+) UI Style and branding customization (Custom bir CSS ile görüntüyü kendiniz için değiştirebiliyorsunuz.
(+) UI Kubernetes automatic services discovery özelliğine sahip
(-) Direkt olarak kendi UI’ı sadece internal kullanımlara uygun olduğunu düşünüyorum
İşimize nerede yaradı diye soracak olursanız. Şirket içerisinde kullandığımız ve harici servislere ihtiyaç duyan bazı ufak uygulamaların (Botlar, Devletlü Servisler, Banka Servisleri vb) sıhhat kontrollerini gerçekleştirdik.
Öneriler
Docker HEALTHCHECK ve Asp.Net HealthChecks durumlarının birlikte kullanımı
~ ~ Tarkanın Viking Kanı filmindeki dev ahtapot dostumuz işe yarar çok güzel bir kullanım örneği paylaştı bunu da eklemek istedik. (Cümlenin başındaki karakterler kendisinin mention’lı halidir :) belirtmek isterim)
Bir docker container’ınız olduğunu düşünün ve bu docker container içerisinde çalışan uygulamanız için sadece bir tane kritik HealthCheck kontrolü var, diğerleri öldürmesede ciddi yaralıyor şeklinde ayarlanmış.
Bu ayarlamalar ile docker container’ına ben ölmüşsem beni yeniden yarat yaralıysam yaralarımı saracak bir şeyler yap şeklinde aksiyonlar aldırabiliyorsunuz.
İlgilenenler için docker dokümantasyonun ilgili kısmını aşağıda paylaşıyorum.
Slack WebHook Görüntüsünü Merak Edenler
Örnek bir api oluşturup kasıtlı hatalar yaratarak webhook mesajlarının yukarıdaki bahsettiğimiz ayarlar (gecikme süresi, sağlık durumu vb.) ile ortaya çıkan görüntüsü aşağıdaki gibidir.
Top comments (0)