Apinizer ile Anomali Tespiti

Talha Uysal
Apinizer
Published in
6 min readMar 24, 2022

Herkese selamlar, bu yazımda Apinizer Platform’unun API Monitoring modülü altında yer alan “Anomaly Detector by Query” Türkçe karşılığıyla sorgu ile anomali dedektöründen bahsedeceğim. İlk olarak anomali kavramı nedir bunu açıklayalım.

Anomali, beklenmeyen, olağan dışı, alışıla gelmedik ifadelerinin dilimizdeki karşılığıdır eğer yaşanan bir olay kendi akışından farklı olarak gelişiyorsa ve beklenmeyen sonuçları doğuruyorsa buradaki anomaliler tespit edilmeli ve gerekiyorsa da bu durumlar için aksiyon almak gerekmektedir.

Peki biz Apinizer’da bu konuya neden önem veriyoruz ?

  • Apinizer bir API Yönetim Platformu’dur, Apinizer üzerinde konumlandırdığınız API ve web servislerinizin loglama, cacheleme, yük denetimi, mesaj içeriği dönüştürme gibi bir çok işlemi kod yazmadan form tabanlı arayüzlerle yönetimini gerçekleştirmenize olanak sağlar.
  • Apinizer üzerinde konumlandırdığınız API ve web servislerinize gelen olağan dışı istekler ya da beklenmeyen hata durumlarını tespit etmeniz oluşturmuş olduğunuz sistemlerin devamlılığı ve güvenliği için olmazsa olmazdır. Çünkü koruyamadığınız ya da insanlara hizmet veremediğiniz bir sistem neden önemli olsun ki.
  • İşte burada anomali tespitinin önemi ortaya çıkmaktadır. Şimdi bir anomali tespit ortamı hazırlayalım ve yukarıda belirtmiş olduğum konuya karşı önlemlerimizi almaya başlayalım.

Aşağıdaki görselde de yer aldığı gibi ilgili alanlar doldurulur ve de seçilir.

İsim ve açıklama alanlarına yazılan ifadelerle oluşturulan anomali dedektörünün anlamlandırılması sağlanır. Environment seçimi de gerçekleştirilerek ilk aşama geçilir. Apinizer’da environment kavramının ne olduğunu öğrenmek isterseniz buradaki linke tıklayabilirsiniz.

İkinci olarak ise anomali tespitini gerçekleştirecek olan “query (sorgu)” ifadesinin yazılması gereklidir. Peki Apinizer’da query (sorgu) nedir ?

Query, Apinizer’da tutulan log kayıtlarının analizi için kullanılır.

Yukarıdaki görselde de görüldüğü üzere yeni bir sorguda oluşturabiliriz ya da var olan bir sorguyu da seçebiliriz. Biz burada yeni bir sorgu oluşturarak ilerleyeceğiz.

Yukarıdaki görselde de görüldüğü üzere isim ve açıklama alanları anlamlı bir şekilde doldurulur. Yazılacak olan sorgu türleri ise kullanıma bağlı olarak “and, or, not” mantıksal ifadeleri ile çeşitlendirilebilir. İlk olarak kendi örneğimizde uygulayacağımız query’inin tanımını gerçekleştirelim. Yazdığımız sorguda 200'e eşit olmayan HTTP durum kodları sorgulanabilmektedir.

Başka bir sorgu örneği daha oluşturalım ve sorgularımızı çeşitlendirebileceğimizi görmüş olalım.

İstemcinin IP’sinin 10.10.10.1 olduğu logların analizi yukarıda verilen query ile gerçekleşebilir.

Başka bir query örneği verecek olursak eğer “username” bilgisi “ap” ile başlayan logların analizinin gerçekleştirileceği query’e ait görsel yukarıda yer almaktadır.

Örneklerimizde de görüldüğü üzere farklı kullanım senaryolarına göre query tanımları gerçekleştirebilmekteyiz. Biz kendi örneğimizde kullanacağımız query’imizi kaydedip aşağıdaki görselde yer alan görünümü elde etmeliyiz.

Üçüncü aşamada ise filtreleme işleminin gerçekleştirilmesi gereklidir.

Filtre, sorgunun çalıştırılacağı zaman aralığı ve api proxy loglarının belirtilmesi için kullanılır.

Yukarıdaki görselde de görüldüğü üzere yeni bir filtre veya var olan bir filtrenin seçimiyle filtreleme işlemini gerçekleştirebiliriz. Biz burada yeni bir filtre oluşturarak ilerleyeceğiz.

Yukarıdaki görselde de görüldüğü üzere isim ve açıklama alanları anlamlı bir şekilde doldurulmaktadır. Filtreleme işleminin gerçekleştirildiği alan ise aşağıdaki görselde yer almaktadır.

“Proxies” ifadesi altında yer alan kısımda filtreleme işleminin gerçekleştirileceği proxy’lerin seçimi gerçekleştirilmektedir. Biz örneğimizde bütün proxy’lere filtreleme uygulamak istediğimiz için “All Proxies” olarak seçimini gerçekleştiriyoruz. Eğer proxy seçimi yapmak isterseniz sağ üst köşede yer alan “Add” butonu ile bu işlemi gerçekleştirebilirsiniz.

“Date Range” alanı ile bu filtrenin uygulanacağı tarih aralığının seçilmesi gereklidir. Biz son bir saate bakacağımız için “1 saat öncesinden şu ana kadar” olan alanı seçmemiz gereklidir.

“Result Type” ile log kayıtlarını filtrelemek için istek işleminin sonuç tip bilgileri seçilebilir.

“Order List” seçeneği ile sorgu sonucunun sıralanması için log kaydından yer alan alanlar üzerinden sıralama koşulları eklenebilir.

Belirtilen alanlar doldurulur ve sağ alt köşede yer alan save butonuna tıklanır yapılan işlemler kaydedilir ve aşağıdaki görselde yer alan görünüm elde edilir.

Dördüncü aşamada ise “Threshold (Eşik)” değerininin belirlenmesi gerekmektedir. Bu threshold ifadesini tanımlayacak olursak eğer;

Threshold, yazılan sorgunun toplam sonuç sayısı ile filtrenin toplam sonuç sayısının toplamının filtrenin toplam sonuç sayısına bölünmesiyle çıkan değerdir.

Eğer threshold için belirtilen değerden fazla bir threshold değeri ile karşılaşılırsa oluşturulan anomali detektöründe gerekli aksiyonların alınması gereklidir. Biz bu örneğimizde threshold değerini %50 olarak belirlemekteyiz İlgili alana ait görselde aşağıda yer almaktadır.

Beşinci aşamada ise bir anomali yaşandığı zaman yapılması gereken aksiyonların belirtilmesi gerekmektedir. Aksiyonların belirtileceği alan ise aşağıdaki görselde yer almaktadır.

“Add Action” butonuna tıklanır ve aksiyonların yer aldığı pop-up ekranı görüntülenir.

Apinizer’da kullanım senaryonuza göre farklı aksiyon türleri vardır. Biz bu örneğimizde herhangi bir anomali tespitinden sonra belirlenen kullanıcıya bir mail atılmasını istediğimiz için “Send E-Mail” isimli aksiyonu seçmekteyiz. Diğer aksiyon türlerinin neler olduğunu ve nasıl kullanılacağını öğrenmek isterseniz buradaki linke tıklayabilirsiniz. “Send E-Mail” ifadesi seçildiğinde ilgili alana ait görsel aşağıdaki gibidir.

Yukarıdaki görselde de görüldüğü üzere ilgili alanlar doldurulur, sağ tarafta işaretlenmiş alan içerisinde yer alan mesaj özelleştirme ifadeleri ile de atılacak olan e-mail özelleştirilebilir. Sağ alt köşede yer alan “Add” butonuna tıklanarak e-mail gönderme aksiyonu eklenir ve aşağıdaki görselde yer alan görünüm elde edilir.

Altıncı aşamada ise oluşturulan sorgunun ve filterinin ne sıklıkla ve ne kadar çalıştırılacağının belirtilmesi gereklidir. Bunun için bir “job schedule” tanımlanmalıdır.

Yukarıdaki görselde de görüldüğü üzere “Create Job Schedule” butonuna tıklanır ve aşağıdaki görselde yer alan pop-up ekranı karşımıza gelmektedir.

Tanımladığımız job schedule bilgisi, gerçekleştirilecek olan işin her dakika ve 15 Mart ve 16 Mart arasında gerçekleştirileceğini belirtir. Sağ alt köşede yer alan save butonuna tıklanır ve aşağıda yer alan görseldeki gibi bir görünüm elde edilir.

Yukarıdaki görselde de görüldüğü üzere tanımlanan işin başlangıç ve bitiş tarihi bilgisi yer alır. Bu işin başlatılması için Start butonuna tıklanır ve iş Running durumuna geçiş yapar.

Son aşamada ise yapılacak olan anomali tespitlerinin loglarının ne kadar tutulacağı bilgisinin belirlenmesi gereklidir. Biz bu örneğimizde bir gün olacak şekilde log kayıtlarını saklamak istemekteyiz.

Bu ayarlamalar yapıldıktan sonra save butonu ile anomali detektörü oluşturulur ve aşağıdaki görselde yer alan görünüm elde edilir.

Yukarıdaki görselde de görüldüğü üzere “Details” butonuna tıklanır ve oluşturulan anomali dedektörünün detaylarına tıklanır.

Görselde de görüldüğü üzere belirlediğimiz eşik değeri aşıldığı için “eşik aşıldı” ifadesi ile karşılaşmaktayız. Eşik aşıldığı aksiyon olarak sistem kullanıcısına e-mail atılması işlemi gerçekleştirilecekti oluşturduğumuz e-mail şablonuna göre Apinizer’dan aldığımız e-mail aşağıdaki görselde yer almaktadır.

Görüldüğü Apinizer kendi üzerinde yer alan API Proxy’lerde bir anomali tespit etti ve bizim istediğimiz şekilde bu olayın bize bilgilendirmesini gerçekleştirdi.

  • Apinizer hakkında daha detaylı bilgi almak için tıklayınız.
  • Apinizer’ı test etmek kendi anomali dedektörünüzü oluşturmak için tıklayınız.

--

--