Trendyol’da Load Balancer Altyapımızı Nasıl Monitor Ediyoruz?

Mehmet Celebi
4 min readMay 27, 2021

Selamlar, bu medium yazısında Trendyol’da load balancer altyapımızı nasıl monitör ettiğimizden bahsedeceğiz, ancak öncesinde nasıl bir LB altyapımız olduğundan bahsetmekte fayda var.

2019 yılının sonlarına doğru, event dönemlerinde karşıladığımız anlık trafiğin 550 bin seviyelerini aşması ile birlikte kullandığımız kutu çözümler ihtiyaçlarımıza cevap vermekte yetersiz kalmaya başladı. (Bahsi geçen kutu çözümlerden burada söz etmiştik.) Bu doğrultuda yeni çözümler aramaya başladık, birçok uygulama test ettik, ve eldeki seçenekler arasında ihtiyaçlarımıza en uygun olanın tengine olduğuna karar verdik.

Tengine Nedir?

Alibaba kuruluşlarından biri olan Taobao’nun geliştirdiği, nginx tabanlı open source load balancer uygulamasıdır. Tengine hakkında daha fazla bilgiye buradan ulaşabilirsiniz.

Ne Şekilde Kullanıyoruz?

Trendyol’da multi-datacenter bir mimari ile çalışıyoruz. Müşteri trafiğimiz CloudFlare üzerinden belirlediğimiz yüzdesel oranlarla datacenter’larımıza dağılıyor. Her datacenter’da internal ve external olarak gruplandırdığımız load balancer instance’larımız mevcut. CloudFlare üzerinden gelen bu trafiği external load balancer’larımız karşılıyor ve belirli metodlar ile upstream’lere iletiyor.

Bunun dışında kalan trafiğimiz ise birbirine bağımlılığı olan (api to api) uygulamalarımızın iç iletişiminden oluşuyor. Aynı datacenter içerisinde veya DC to DC iletişimleri internal olarak gruplandırdığımız load balancer’lar üzerinden yönlendiriyoruz.

Trendyol Multi-DC Traffic Flow

Load balancer altyapımızın teknik detaylarından, yaptığımız konfigürasyonlardan ve otomasyon sistemlerimizden detaylı bahsedeceğiz ancak bu başka bir yazının konusu.

Nasıl Monitör Ediyoruz?

Bu kısmı metricleri export etme, toplama ve alert üretme olarak 3 ayrı kısımda açıklayacağız.

1-) Metric’leri Export Etmek

Bu aşamada şuan için 3 adet exporter kullanıyoruz.

Node exporter ile instance’ların cpu utilization, memory usage, network throughput gibi performans ve hardware metriclerini,

VTS exporter ile Tengine üzerinden anlık request miktarı, response süreleri, hata oranları gibi tengine metriclerini,

Bird exporter ile BGP komşuluklarını kurduğumuz bird’ün metriclerini toplayabiliyoruz.

Bu exporter’ları deployment esnasında, tüm load balancerlarımıza kuruyoruz. Kurulum sonrası exporter servisi running olduğunda data toplamaya hazır hale geliyor.

2-) Metric’leri Toplamak

Sıra geldi export ettiğimiz metricleri toplamaya. Bunun için her datacenter’da load balancer fabric’ini oluştururken bir tane de monitor node oluşturuyoruz.

Oluşturduğumuz monitor node üzerinde temelde 3 adet uygulama çalışıyor.

Prometheus, bizim için belirttiğimiz target’lar üzerinde seçtiğimiz metric’leri topluyor.

Aynı zamanda Prometheus konfigürasyonu içerisinde alerts klasörü altına, her exporterdan oluşturacağımız alarmları tanımlıyoruz. Örneğin aşağıda node_reboot_required değeri 1'in üzerine çıktığında alarm üretecek olan kuralı görüyorsunuz.

Ürettiğimiz bu alarmlardan bildirimler yaratabilmek için, Prometheus’un Alertmanager’a göndermesini sağlıyoruz.

Prometheus konfigürasyonu içerisinde Alertmanager tanımı

Monitor node üzerinde kullandığımız bir diğer uygulama ise Grafana.

Grafana, Prometheusun topladığı metric’leri bizim için anlamlı bir hale getiriyor. Bunun için öncelikle Prometheus sunucusunu grafana’ya data source olarak eklemeli ve uygun dashboardları yaratmalıyız.

Grafana — Data Source Alanı

Örneğin aşağıda VTS Exporter üzerinden aldığımız HTTP Status code’ların grafiğini ve bu grafik için gerekli regex’i görebilirsiniz.

3-) Alarm Üretmek

Daha önce Prometheus üzerinde target’ları tanımlayıp, ihtiyacımız olan metricler ile rule oluşturarak alarm üretmiş, ve bu alarmları Alertmanager’a göndermiştik.

Alertmanager’ı kurduğumuz monitor node’un 9093 portuna gittiğimizde yukarıda örnek verdiğimiz alarmın buraya düştüğünü görebiliriz.

Şimdi ise bu alarmın bize SMS / Telefon / Mail olarak gelmesini sağlayacağız. Bu aşamada ise imdadımıza, dışarıdan satın aldığımız bir hizmet olan PagerDuty yetişiyor.

Bunun için PagerDuty’de bir service directory yaratıp service key oluşturuyoruz. Bu service key ile Alertmanager üzerinde entegrasyon için gerekli konfigürasyonu yapıyoruz.

Bu aşamadan sonra Prometheus’un Alertmanager’a ilettiği alarmlar, PagerDuty’e düşüyor. PagerDuty, service directory altında belirttiğimiz nöbet listelerine göre o günün nöbetçisini, ulaşamaz ise yedek nöbetçiyi arıyor.

Soru : Peki ya monitor node’umuzda bir sorun olursa nasıl alarm üreteceğiz?

Bu noktada devreye Deadmansnitch giriyor, Deadmansnitch’de tıpkı PagerDuty gibi dışarıdan satın almış olduğumuz bir hizmet. Monitor node üzerinde PagerDuty entegrasyonunu yaptığımız yerde ek olarak birde Deadmansnitch konfigürasyonu yapıyor ve 5 dakikada bir heartbeat alarmı üretmesini sağlıyoruz.

Alertmanager üzerinde de görebildiğimiz bu Watchdog alarmı, 5 dakikalık aralıklarla Deadmansnitch’e gidiyor.

15 dakika içerisinde bu watchdog alarmı Deadmansnitch’e hiç gelmez ise, Deadmansnitch alarm üretiyor.

Başka konularda görüşmek üzere! Teşekkürler.

--

--