Elastic APM ile Uygulama Performans Takibi
Uygulamamızı geliştirmeyi tamamladık, müşterimize test/uat ortamında uygulamayı tanıttık ve artık teslim etmeye hazırız. Peki teslim ettikten sonrası?
Sonrasında aşağıdaki yakınmaları ve geri bildirimleri almak özellikle yazılım projelerinde oldukça yaygındır:
- Sizinle test ederken çalışıyordu şimdi çalışmıyor.
- Tıklıyorum ama dönüp duruyor ve kaydetmiyor.
- Kaydettiğini söyledi ama kaydı göremiyorum.
- Özellikle sabah saatlerinde açılması uzun sürüyor işlerim gecikiyor.
- Aynı işlemi dün yapabildim ama bugün yapamıyorum.
Peki bu durumda müşteriye nasıl cevap vereceğiz? Uygulamayı geliştirirken zaten birçok zorluk ve değişiklik ile mücadele etmiştik ve tam rahata erdiğimizi düşünüp, şöyle sandalyemizde geri yaslanacakken şimdi de bu kullanıcı şikayetleri ile karşılaşıyoruz.
- Loglara baksak, tek tek incelesek acaba bulabilir miyiz?
- Kaydettiğini söylüyorsa kaydetmiştir, uygulamanın size yalan borcu mu var canım.
- Sabah yavaşmış ama akşam hızlanıyormuş, uykusunu alamamış mı diyeceğiz?
- 1 haftadır versiyon çıkmıyoruz dün çalışıyorsa bugün de çalışması gerekir.
Yukarıdaki düşünceler aklımızdan geçerken hemen süper bir çözüm buluruz :) kesin sistem ekipleri ile ilgilidir en iyisi onlara yönlendireyim ya da bağlantı sorunları olabilir ilgili kişiler kontrol etsin.
Peki bu yönlendirmeleri yapmadan önce biz kendi uygulamamızın davranışlarından nasıl emin olabiliriz? Sağlıklı çalışıp çalışmadığına, istenildiği sürelerde yanıt verip vermediğine, hata oranları ve sisteme hangi saatlerde ne kadar yük geldiği gibi bilgilere nasıl ulaşırız?
Burada karşımıza APM ürünleri, çözüm olarak çıkıyor. Piyasada kendini kanıtlamış bir çok APM ürünü mevcut, biz AppDynamics ve Elastic APM ürünleri ile bu ihtiyacımızı karşılıyoruz.
Bu yazıyı open source ve ücretsiz olması nedeni ile Elastic APM üzerinden örnekler ile ele alacağım.
Elastic APM ile ilgili detaylı bilgilere ulaşmak için aşağıdaki bağlantıyı kullanabilirsiniz.
https://www.elastic.co/observability/application-performance-monitoring
APM ile asp.net ve .net core sonrası versiyonlara sahip uygulamalarımızı izliyoruz ve tamamen ücretsiz olan versiyonunu kullanıyoruz.
Uygulamanızı Elastic APM ile izlemek istiyorsanız kullandığı dil ve frameworke özel implementasyon adımlarına yine aşağıdaki bağlantı ile ulaşabilirsiniz.
https://www.elastic.co/guide/en/apm/agent/index.html
Hali hazırda kullandığımız bir ELK olduğu için biz aynı yapı üzerinde APM özelliğini de aktif hale getirdik. Bu işlem için izlemeniz gereken yollar aşağıdaki bağlantıda detaylıca anlatılıyor.
https://www.elastic.co/guide/en/apm/guide/master/apm-quick-start.html
APM özelliğini aktif hale getirdiğinizde aşağıdaki görüntüde olduğu gibi Kibana’da sol menüde Observibility altında APM seçeneğini görebilirsiniz.
Menüden APM seçeneğine tıkladığınızda sizi “Services” sayfasına götürecek ve izlediğiniz uygulamaların bilgilerini ekranda gösterecektir.
Bu ekranda bir özet görüntü mevcuttur. Sağ üst köşeden istenildiğinde ortamlar(dev,test,uat,prod ..vs) arası geçişler yapılabilir. Bizim gibi uygulama sayınız fazla ise arama kısmından uygulama adı ya da farklı özellikleri üzerinden filtreleme yapabilirsiniz. Kolonların içindeki farklı renkler ise geçmiş bir dönem ile şimdiki verilerin farklarını gösterir. Bu karşılaştırma sayesinde metriklerin geçmiş döneme göre farklılıklarını rahat bir şekilde görebiliriz.
Alt kısımdaki tablonun;
- Name alanı uygulamaya config kısmında verdiğiniz isimdir.
- Environment alanı yine config kısmında belirttiğiniz ortamı ifade eder.
- Throughput alanı TPM (Transaction per minute) yani dakikada alınan istek sayısını gösterir.
- Failed transaction rate ise isteklerin ne kadarının hata aldığı ile ilgili metriği ifade eder.
Herhangi bir uygulamanın detayını görmek için listeden adına tıklamak yeterlidir. Tıkladığınızda o uygulamaya ait detay sayfası karşınıza gelecektir.
Sağ üst kısımdan ortam değişikliği yapılabilir. Uygulamanın sadece PROD ortamına ait metrikleri incelemek isterseniz Environment kısmından seçerek ilerleyebilirsiniz. (Bunun için configlerde her ortam için farklı değer yazmış olmanız gerekmektedir.)
Latency kısmında ortalama bir isteğe cevap verilirken geçen süreler yer almaktadır. Bu örnekte gecikmelerin anlık olarak yükselip alçaldığı net şekilde görülebilir. Gerekiyor ise bu tepeler incelenerek kök neden analizi yapılmalıdır.
Aynı ekranda alt kısımlara doğru indiğimizde Transactions ve Throughput alanlarını görürüz.
Throughput kısmında TPM olarak değerler incelenebilir. Transaction kısmında ise seçilen süre zarfında gelen requestlere dair detaylar ve bu transactionların uygulamanın geneline olan etkisi gösterilmektedir. (impact kısmını basitçe tpm x latency olarak düşünebiliriz.)
Biraz daha alt kısımlara indiğimizde Failed Transaction Rate ve Error tablarını görüyoruz.
Failed transaction rate kısmında gelen requestlerin yüzdelik olarak ne kadarının hata aldığını izleyebilir, Error kısmında ise seçilen sürede alınan hataların ve bu hataların tekrarlanma sayılarını görebiliriz.
Diğer bir bilgi ekranı ise Dependency kısmıdır, burada takip ettiğimiz uygulamanın diğer hangi uygulamalar ile iletişime geçtiğini ve bağımlılıklarını görebiliriz.
Bu bağımlılıkların gecikmeleri, tpm cinsinden trafikleri, hata oranları ve bağımlılığın uygulamaya olan etkisini yukarıdaki tablo ile görebiliriz.
Bu ekranda en alt kısımda ise uygulamanın çalıştığı ortamlara ait veriler bulunmaktadır.
Tabloyu inceleyecek olursak, sunucu adı, ortalama gecikme süresi, istek sayısı, hata oranı, CPU ve memory (RAM) kullanımı görülebilir.
Son olarak transaction detayını da ele alarak yazıyı noktalayalım.
Örnekleme yöntemi ile farklı tüm transactionlar APM üzerinden incelenebilir ve detayları görülebilir. Yukarıdaki örnekte web uygulamasına yapılan isteğin, api katmanına geldiği burada da bir ORM ile database tarafına Select sorguları atıldığı görülmektedir.
Biz APM tarafında http headerları loglamasını istemediğimiz için bu özelliğini config tarafında kapatıyoruz, body kısmında maskelemek istediğimiz key-value alanlar var ise bunları configden kapatabiliyoruz.
Yukarıda gösterdiğim tüm özellikler open source ve ücretsiz şekilde kullanılabilmektedir. Veriler elastic üzerinde saklanarak, kibana arayüzünde görselleştirilebiliyor.
Yazılımlarınızı son kullanıcılara test etmeden önce Jmeter gibi ürünler ile yük testi yapmayı ve yaptığınız yük testlerinin APM sistemlerde nasıl bir görüntü çizdiğini incelemenizi tavsiye ediyorum.
Okuduğunuz için teşekkür ederim (: