Asp.Net Core ile Prometheus, Grafana ve AppMetrics Kullanarak Monitoring

Hakan Karabulut
Devops Türkiye☁️ 🐧 🐳 ☸️
4 min readMar 29, 2020

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 Mimarisi

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.

Grafana Dashboard

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.

Api metrik çıktısı

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.

Prometheus

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.

Grafana Dashboard

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;

--

--