IBM Instana ile uygulama performansını uçtan uca gözlemleme!
Bu makalede sizlere daha önce Kurumsal Gözlemlenebilirlik — Instana Enterprise Observability başlıklı bir yazımda bahsetmiş olduğum Instana ürününün yeteneklerinden kısa kısa bahsedeceğim.
Instana’nın microservice olarak geliştirilmiş bir uygulamada oluşan Event’leri nasıl hızla identfy, debug ve resolve ettiğini göstermeye çalışacağım.
Uygulamamamız adı Stan’s Robot Shop ve JAVA,Pyhton,MySQL gibi çeşitli teknolojileri kullanıyor.
Hadi başlayalım! :)
1- RobotShop uygulamasının bağımlılıklarına göz atalım..
RobotShop uygulamasındaki tüm servis bağımlılıklarını görüntülemek için Instana’yı kullanacağız. Instana, servisler arasındaki ilişkileri otomatik olarak keşfeder ve bunları “Dynamic Graph” özelliği dinamik bir grafikte ilişkilendirir.
Daha sonra açılan ekranda “Dependecies” sekmesine tıklayacağız.
“Dependecies” kısmında ise uygulamaya ait servislerimizin dinamik haritasını göreceğiz.
Aynı zamanda gelen isteklerin uygulama üzerinde gerçek zamanlı olarak nasıl ilerlediğini görebiliriz. Görünüm için pattern değiştirerek izleme açınızı oluşturabilirsiniz. Instana uygulamanız üzerinden geçen her isteği (1sn granularity) izleyebildiği için bunu yapabiliyor.
Dikkatli incelediğimizde iki servisin renkli vurgulandığını görebilirsiniz. Bu servislerde birer uyarının olduğu mesajı veriyor. Eğer istersek burada “Incoming Calls” , “Max Erroneous Call Rate”, “Max Latency” filtrelerini kullanarak vurgu yönünü değiştirebilirsiniz.
Servisin hangi teknoloji ile geliştirildiği hakkında bilgi almak için imleci o servisin üzerine getirdiğimiz servisin detaylarını görebiliriz. Örneğin, Discount servisine baktığımızda HTTP, Java Virtual Machine (JVM) ve Spring Boot kullanıldığını ve database olarakta MongoDB kullanıldığını görüyoruz.
2- Events & Alerts otomatik olarak değerlendirme
Genelde bir problem olduğunda kontrol paneline girip bakmayacağımız için, bir Event meydana geldiğinde SRE/IT operatörünün bakış açısına değerlendirelim biraz.
Instana, ilgili olayları ve sorunları otomatik olarak incident halinde gruplandırır.
“Dynamic Graph” özelliğini kullanarak hangi olayların ve/veya sorunların ilişkili olduğunu belirler.
Instana ayrıca, hangilerinin son kullanıcıları etkilediğini veya son kullanıcıları etkileme konusunda yakın bir risk oluşturduğunu belirlemek için olay ve sorun gruplarını sürekli olarak değerlendirir.
Bunlar Instana’nın alarm vereceği şeylerdir, bu nedenle bir SRE/IT operatörü olarak çok önemli olmayan şeyler için sürekli kesintiye uğramazsınız.
Sidebar menüde “Events” bölümüne girdiğimize “Incidents”, “Issues”ve “Changes” kayıtlarını görebiliriz.
Şimdi “Events” bölümünü detaylı inceleyelim..
Instana, erroneous calls sayısında ani artışın olduğunu ve önemli bir şey olduğunu fark ediyor, bu nedenle bu Eventi almak için herhangi bir konfigürasyon veya threshold belirlememiz gerekmedi.
Daha fazla ayrıntı için ‘discount’ hizmetindeki Eventi inceleyelim.
“Incident Timeline”, “Triggering Event”, and “Related Events” için detayları aşağıdaki gibi görebiliriz.
Şimdi bu eventi daha detaylı inceleyelim..
Eventi incelediğimizde , soruna MySQL veritabanının anormal bir şekilde terminate olduğunu görebiliriz. Veritabanına erişimi olmayan her sorgu hakkında daha fazla detaya ulaşabiliriz.
“Erroneous calls” ani artışla ilgili Eventi seçmeniz ve Analyze Calls seçeceğini ile tüm sorguları analiz edebilirsiniz.
İncelemeye devam edelim :)
Tüm sorguları analiz etmek zaman alır, Instana bizim için tüm sorguları End Point seviyesinde gruplandırıyor.
Şu anda sadece tek bir End Point var, daha fazla End Point olsaydı listeli bir şekilde görebilecektik. EndPoint’ler Instana tarafından otomatik olarak discovery edilir ve map edilir.
(CONNECT) endpointi ile birlikte MySQL’e yapılan her hatalı çağrının ayrıntılarına girebiliriz.
3- End-to-end traces
Şimdi bir sorgunun uçtan uca izleme detaylarına göz atalım.
Listedeki ilk “Connect”sorgusuna ait detayları gösteren dashboard kısmına bakalım..
İsteğin nerede başladığını ve yol boyunca yapılan her aramayı görebiliriz. Timeline görünümü, her sorguda harcanan sürenin yanı sıra Erreneous Calls, Error Logs, Warning Logs ve Latency gibi temel performans metriklerini sağlar.
İhtiyacınız olan tüm herşey tek bir dashboard üzerinde sunulmaktadır. Böylece birden fazla araç kullanmadan veya çok sayıda dashboard kullanarrak ileri geri gezinmeden, sorunu tam olarak belirlemek için daha fazla ayrıntıya inebiliriz.
Şimdi sağ taraftaki Details & Stack Trace alanını inceleyelim.
Details bölümünde sorgunun tipi,kategorisi,statement ve connection bilgisi yer almaktadır ve ayrıca her span için daha fazla bilgiye ulaşmak için alt kısımdaki StackTrace kısmına spanlere tıklayabiliriz.
Her bir sorgunun bir servisten diğerine nasıl geçtiğini sadece tıklayarak görebiliriz..
Şimdi “Discount” servisindeki problemin kök nedenini öğrenelim..
Orta kısımda bulunan “Calls” bölümünde her sorgunun alt sorgularıyla birlikte detayını görebiliyoruz.
‘Discount’ hizmetini etkileyen olayın temel nedeninin MySQL veritabanıyla ilgili olduğunu doğruladık. Veritabanının anormal bir şekilde sonlandırılmasının bir bağlantı hatasına (HikariPool-1 -Connection is not avalabile request timed out after 2000ms) neden olduğunu görebiliriz.
MySQL tarafındaki connection hatasını çözdüğümüzde, tekrar MySQL summary kısmına gelip sorgu sayısının arttığını ve hatalı sorgu sayıların düştüğünü ayrıca latency süresinin de azaldığını görebiliriz.
Bu senaryoda “discount” servisinde yaşanılan hatalı sorgu sayıların artması sonucunda yavaşlık problemini veri tabanı ölçeğinde olduğunu tespit ettik, ve problemi çözdükten sonra hatanın giderildiğini gördük.
Instana’nın uygulama tarafındaki sorunları tanımlama ve bu sorunların Root Cause analizini nasıl yaptığını anlamış olduk..
Ayrıca Instana, sürecin bir çok noktasını otomatik hale getirdiği için, Dev/SRE ekiplerinin farklı işlerin yapılmasına zaman kazandırdığını söyleyebiliriz.
Dağıtık mimaride geliştirdiğiniz uygulamalarınıza ait sorunlar ortaya çıktığında, tüm trace verilerini derinlemesine incelemek için Instana ile çok kolay ve hızlıdır.
Buraya kadar okuduğunuz için teşekkür ederim 🙏