Azure Application Insights, Monitoring için kullanılır.
Azure monitoringin bir özelliği olan Application Insights, geliştiriciler ve DevOps uzmanları için genişletilebilir bir Uygulama Performansı Yönetimi hizmetidir. Canlı uygulamalarımızı izlemek, “request’leri takip etmek, exception oluşan durumları tespit etmek — hangi durumlarda exception oluştuğunu görmek, exception tipleri neler-, uygulama içindeki tüm ağırlık düzeyine göre oluşan logları kontrol etmek” için kullanılır. Performans anormalliklerini otomatik olarak algılar ve sorunları teşhis etmemize ve kullanıcıların uygulamamızla gerçekte ne yaptığını anlamamıza yardımcı olacak güçlü analiz araçları içerir. Uygulama servislerinin de yer aldığı, subscription altından application insight oluşturulur. Application insight yaratıldığında herhangi bir programlama dili üzerinden bağlantıyı sağlayabilmek adına bir instrumentation key elde edilir. Bu instrumentation key, konfigurasyon dosyasında azure bağlantılarının tutulduğu yerin altına konumlandırılır.
azure: application-insights: instrumentation-key: xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx
Java örneklendirmesi ile anlatırsak:
pom.xml dosyamıza kullanılacak olan kütüphanenin bilgileri dependency olarak eklenir.
<dependency> <groupId>com.microsoft.azure</groupId> <artifactId>applicationinsights-spring-boot-starter</artifactId> <version>2.6.3</version> </dependency> <dependency> <groupId>com.microsoft.azure</groupId> <artifactId>applicationinsights-logging-logback</artifactId> <version>2.6.3</version> </dependency>
Uygulama içine entegrasyonu sırasında, konfigurasyon dosyamız ile loglama için ayarların bulunduğu xml dosyasının aynı dizinde yer alması gerekir.Loglamanın yapıldığı xml dosyasında, yeni bir appender olarak application insight’ı tanıtmak gereklidir.
<appender name="aiAppender" class="com.microsoft.applicationinsights.logback.ApplicationInsightsAppender"> <instrumentationKey>${instrumentationKey}</instrumentationKey> </appender> <!-- Burada ${instrumentationKey} konfigurasyon dosyasından alındığı için property olarak bu dosyanın üst kısmında tanımlama yapılması gerekir. (yml dosyasındaki indentation dikkat edilerek source parametresi belirlenir.) --> <!--Spring property olarak tanımlanışı şu şekildedir:--> <springProperty scope="context" name="instrumentationKey" source="azure.application-insights.instrumentation-key"/>
Ana ekranda şu şekilde gösterilir:
Yukarıdaki resimden de görüldüğü gibi uygulamaya ait bilgileri chartlar halinde görebileceğimiz şekilde zaman filtreli olarak ana ekranda gözükür.
Detay kırılımlarını incelersek:
Application map, distributed olarak tasarlanmış modern cloud ve mikroservis mimarisine sahip yapılar için oluşturulmuş bir kırılımdır. Application map sayesinde, hangi mikroservisin çalıştığını — hangi mikroservisler arası iletişim sağlandığını, akışın nasıl gerçekleştiğini göstermek için kullanılır. Buradan canlı veri akışı, servis bağlantı izlemeleri gerçekleştirilir. Monolitik sistemlerde efektif kullanımı yoktur. Sadece servis akışlarını izleyebiliriz.
Smart detection, alert & alarm oluşturarak sistemin time out’a uğradığı uzun süreli exception’ların oluştuğu servislerin cevap verme süresinin belli bir thresholdun üzerinde yer aldığı durumlarda zaman filtreli olarak kullanımı sağlanır. Belirlenen tespit yöntemlerinden biri yoksa, hiçbir şey göstermez.
Live metrics, start edildikten sonra belirlenen zaman aralığında uygulamaya ait aşağıdaki chartlardaki bilgileri takip etmeyi sağlar. Zaman aralığı canlı akış sağlandığı için kısa tutularak uygulamanın yük testleri yapılırken ya da çok hit aldığı durumlardaki oranlarını hızlı yakalamamızda yardımcı olabilecek tool’lardan biri olarak kullanılabilir. Her bir chart’a ait datayı loglardan View in Logs seçeneği ile bulabiliriz.
Transaction Search, zaman bazlı filtreleme yaparak uygulama içindeki tüm takibi sağlayabileceğimiz alan burası olarak gösterilebilir.
Availability, url ping testi, ssl sertifikası kontrolü testi, mikroservis uygulamalarda akışın gerçekleşip gerçekleşmediğine dair testleri barındıran bir alt kırılımdır. Tanımı yapılmamış testlerde görüntü aşağıdaki gibidir.
Failures,
4 ana başlık altında uygulamaya ait alınan hataları hem grafik hem de log olarak görüntüleyebildiğimiz alandır. Bunlar: operasyonlar(Request name, Request Count, Pin), Dependencies/Bağımlıklar, Exceptions , Roles (Requesti atan kullanıcının cloud role’u — burada bağlı olan application’ın active directory’deki rolü üzerinden kontroller yapılır. — , Dependencies, Dependency Failures , Requests, Failed Requests, Total Exceptions, Actions)
Hem sunucu hem de browser üzerinden ayrı kategorilerde filtreleme ile ayrı grafikleri gözlemleyebiliriz.
Her bir request’in end-to-end transaction details’ine ulaşabiliriz. Stack trace üzerinden hatanın nereden kaynaklandığını board üzerinden görebiliriz. Request üzerinden end to end transaction şu şekilde gözükür:
View all telemetry ise, stack traces’ı ve bunun detaylarını gösterir.
New Failures Analysis ile başarısızlıkları custom queryler ile genelleştirmek ve uygulamayı takip etmemiz adına kullanışlı bir alan sağlar. Failure rates, Requests Volume, Request Details, Exception Analysis, Exception Details, Dependency Failure Analysis, Dependency Volume, Dependency Details gibi alanlar altında listeler ve chartlar halinde çıktıları gözlemleyebiliriz.
LOGS:
Application Insight içinde yer alan alt kategorilerden biri olan logs kısmı uygulamamıza ait tüm logların tutulabilmesi için kullanılabilir. Projenin loglama kısmına eklenmiş ve entegre edilmiştir. Uygulamanın tüm logları sorgular yazılarak alınır.
Kendine ait bir sorgu dili mevcuttur. Temel operatorleri şu şekilde listelenebilir.
project : seçili kolonları getirmek için kullanılır.
top X: SQL ‘de olduğu gibi listedeki belirlenen X kadar item’ı getirir.
where: SQL’deki gibi koşul yazmak üzerine kullanılır.
SecurityEvent
| where TimeGenerated > ago(30m)
| where toint(Level) >= 10
| : bu sembol her bir operatörden önce kullanılır. (Mantıksal operatörler hariç)
and, or: Koşullar arasında kullanılan mantıksal operatörlerdir.
ago, before : time bazlı temel fonksiyonlardır.
summarize: group by ile benzer şekilde belirlenen kolona göre gruplamaya yardımcı olur.
sort by: SQL’de kullanıldığı gibi baştan sıralı için ASC ile, tersten sıralama için desc ile beraber kullanılır.
Temel olarak 3 kısımdan oluşur:
Bazı sorgular önceden hazırlanmış olarak gelirken, diğerleri özel tanımlı olarak hazırlanabilir. Traces bölümü, uygulamamız tarafından oluşturulan logları listeler. Önem derecesine göre bu listeden sadece hataları değil uyarı — hata ayıklama ve bilgileri de görebiliriz. Uygulamadan gönderilen isteklerin durumlarını ve bodylerini görmek için doğrudan İstekler bölümünden zaman filtreli sorgular gönderebiliriz. Aynı şekilde en çok kullanılanlardan biri olan istisnaları/exceptionları görmek ve hataları ayıklamak için İstisnalar bölümünden zaman filtreli sorgular atılabilir.
Çokça kullanılabilecek ve takip edilmesini kolaylaştıran sorguları hem fonksiyonlar hem de sorgular kısmında görebiliyoruz. Fonksiyonlar, tıpkı programlamada olduğu gibi, functionName() herhangi bir yere yazılarak çağrılır ve çıktısı gözlemlenebilir.
Son olarak logların çıktısını, chart olarak görebilmek adına render operatörü ile beraber chart ismini verdiğimizde çıktıyı o şekilde de elde edebiliriz.
Eğer uygulamamız azure üzerinde deployed haldeyse ve benim fikrimce .NET ile yazılmışsa bu monitoring uygulaması oldukça kullanışlı. Java için kütüphanelerin son versiyonlarını ara sıra kontrol etmeyi unutmayın 🙂