Asp.Net Core ile Prometheus, Grafana ve AppMetrics Kullanarak Monitoring
Uygulamamızın çalışma esnasında hem sistem hem de iş süreçleri ile ilgili bazı ölçülebilir verileri gözlemlemek gerekir. Böylece kullanım ve performans gibi önemli parametreler hakkında bilgi sahibi olup olası ya da mevcut sorunları teşhis edebiliriz.
Bu makalede Grafana, Prometheus ve AppMetrics kullanarak bir Dotnet projesinin nasıl izlenilebilir hale geldiğini göstermeye çalışacağım.
Öncelikli olarak kullanmış olduğumuz bu teknolojiler hakkında kısa bir bilgilendirme iyi olacaktır.
Prometheus
Prometheus, Google’ın Borgmon adındaki Monitoring çözümünden ilham alınarak ortaya çıkan bir Open-Source Monitoring uygulamasıdır.
Prometheus, enstrümante edilmiş işlerin oluşturduğu metrikleri direkt olarak ya da Short-Lived görevler için, Push Gateway yolu ile topar. Daha sonra bütün bu toparlanan datalar lokal olarak saklanır. Bu datalardan yeni time-serileri veya alarmlar oluşturmak için çeşitli kurallar uygulanır.
Grafana
Grafana açık kaynak kodlu gelişmiş bir raporlama platformudur. Metrik datalarınızın nerede saklandığına bakmasızın bu metrikler için sorgulama, görselleştirme ve bildirim alabilme olanağı sağlıyor. İstenildiği gibi özelleştirme olanağı sağlayan dashboard yapısı ile muazzam bir kolaylık ve veri görselleştirmesi olanağı sağlamaktadır.
AppMetrics
App Metrics, bir uygulama içindeki metrikleri kaydetmek için kullanılan açık kaynaklı ve cross-platform bir .NET kütüphanesidir.
Hadi Başlayalım
App.Metricts paketlerini dahil ederek başlıyoruz.
<PackageReference Include="App.Metrics.AspNetCore" Version="4.0.0-preview1.0.3" />
<PackageReference Include="App.Metrics.AspNetCore.Endpoints" Version="4.0.0-preview1.0.3" />
<PackageReference Include="App.Metrics.AspNetCore.Tracking" Version="4.0.0-preview1.0.3" />
<PackageReference Include="App.Metrics.Formatters.Prometheus" Version="4.0.0-preview1.0.3" />
Gelelim Startup.cs içinde yapacağımız ayarlamalara.
Dotnet projemizin metriklerine ulaşmak için Program.cs içinde de aşağıdaki gibi ayarlama yapmamız gerekmektedir.
Şimdi http://localhost:5000/metrics-text adresine postman üzerinden bir istek yaparak sonucu görüntüleyelim. /metrics ya da /metrics-text ile ilgili bir endpoint tanımlamıyorsunuz, indirmiş olduğumuz paket dahilinde bu gelmektedir.
Prometheus ve Grafana Kurulumu ve Ayarlar
Prometheus ve grafana’yı mac bilgisayara Homebrew ile indirmeyi tercih ediyorum.
brew install prometheus grafana
Şimdi servisleri ayağa kaldırabiliriz.
brew services start prometheus
brew services start grafana
Windows makinede kurulum için Prometheus ve Grafana bilgisayara indirilip bin klasörü içindeki .exe çalıştırılması yeterlidir.
Prometheus’u indirdikten sonra, prometheus.yml dosyasında ayarlamalarımızı yapmamız gerekmektedir. Bunlar;
- job_name: 'monitoringapi'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:5001']
metrics_path: /metrics-text
- job_name içerisine istediğiniz ismi verebilirsiniz.
- static_configs targets: Api’nin çalıştığı url
- metrics_path default olarak /metrics olarak gelir ancak buradan veri okumak çok zor olduğundan daha okunaklı olan /metrics-text olarak değiştiriyorum.
Yukarıdaki gibi ayarlarımızı yaptıktan sonra .exe dosyasını çalıştırıyoruz.
localhost:9090 adresinde Prometheus ayağa kalmış durumdadır.
localhost:3000 adresinde Grafana ayağa kalkar. Gelen login ekranında
username : admin
password : admin
yukarıdaki default bilgilerle giriş yaptıktan sonra aşağıdaki gibi bir ekran sizi karşılayacaktır.
Add data source kısmına tıklayıp Prometheus seçilmelidir. Gelen ekrana Prometheus’un çalıştığı port olan http://localhost:9090/ yazılarak bağlantı sağlanır.
http://localhost:3000/dashboard/import adresinden port bilgisi girilmesi gerekir. Port bilgisi için linkteki siteyi inceleyebilirsiniz.
Yukarıdaki gibi bir ayarlama yaptıktan sonra karşınıza aşağıdaki gibi bir görüntü çıkacaktır.
Sol tarafta bulunan Dashboard kısmından istediğiniz gibi ayarlamalar yapabilir, gelen istekleri, veritabanı ile ilgili bağlantıları ya da neyi görselleştirmek isterseniz ona göre ayarlama yapabilirsiniz.
Dashboard kısmından sonra uygulama içinde metrikleri nasıl ekleyeceğimizi inceleyelim.
IMetrics isimli inteface Dependency Injection ile metriklerini ölçmek istediğiniz yere initialize edilir.
Daha merkezi bir yapı içinde yapılandırmayı kurgulamak için aşağıdaki gibi bir class oluşturmayı tercih ediyorum.
Yukarıdaki görselde görüldüğü üzere metriklerimiz tanımlamış olduğumuz isimle karşımıza çıkmaktadır. Metriklerinizi tanımladığınız isimle Dashboard kısmında görebilirsiniz.
Örnek uygulamanın kaynak kodlarına erişim için;