Skip to main content

Post mortem

Tamamlanmadı

Dokümanın yazımı ve geliştirilmesi devam ediyor. Bu süreçte değişiklikler olabilir.

BaşlıkAçıklama
Tarih09.09.2022 08:10 - 09:10
KatılanlarKerim Kaan Dönmez, Kadir Pir, Mustafa Mecit
OlayRabbitMQ'nun bellek limitine takılması sonucu mesaj alışverişinin kesilmesi
EtkiOperasyona sipariş iletiminin durması, Logo'ya sipariş akışının durması, SMS blacklist taleplerinin iletilememesi ve İYS entegrasyonuna bildirimlerin yapılamaması
AçıklamaCloudAMQP'de host edilen canlı ortam RabbitMQ servisi belirlenmiş bellek limitini geçtiği için RabbitMQ'nun producer bağlantılarını koparması ve yenisine izin vermemesi sebebiyle uygulamalardan RabbitMQ'ya mesajlar iletilememiştir.
ÇözümBellek limitinin altına indiği tespit edilip deploy alınarak sunuculardaki uygulamalar reload edilerek bağlantılar tekrar sağlanmıştır ve normal akışa dönülmüştür.
BulgularCloudAMQP'daki metrik grafikleri ve loglar ile yine CloudAMQP'den 08:14'teki alarm maili ve ekipten gelen siparişlerin operasyona iletilemediğine dair tespit

Zaman Çizelgesi

  • 08:14 - CloudAMQP'den alarm mailinin gelmesi
  • 09:00 - Sipariş operasyonunun sekteye uğradığının fark edilmesi ile Logo akışından gelen uyarı mesajları
  • 09:08 - Hem uygulama hem RabbitMQ metriklerinin kontrol edilmesi ile sunucudaki logların kontrol edilmesi
  • 09:08 - Reloading amaçlı deploya başlanması
  • 09:12 - RabbitMQ loglarından fark edilen durumdan dolayı ve kuyrukların normale dönmemesi sebebiyle RabbitMQ'nun yeniden başlatılması
  • 09:14 - v2 uygulamasının reloading amaçlı deployuna başlanması
  • 09:28 - Deployun bitmesi ile normale dönülmesi

Analiz ve Aksiyon

09:00 civarı Logo akışının kontrol edildiği Slack kanalından ve Mustafa Mecit tarafından siparişlerin operasyona akışındaki sorunun iletilmesi ile öncelikle RabbitMQ management dashboard üzerinden kontroller sağlanmış burada mesaj, bağlantı ve consumer sayıları kontrol edilmiş bir anormallik gözlenmemiştir. Ardından uygulama logları ile sunucudaki konsol logları incelenmiş ve konuyla ilgili herhangi bir ize rastlanılmadığından, CloudAMQP metrik ve loglarının kontrolüne geçilmiştir. Aşağıda görülen metriklerde reboot işlemi öncesi memory değerinin çok yükseldiği tespit edilmiştir.

6 saatlik CloudAMQP Metrikleri

Mevcut CloudAMQP paketimizdeki limite takıldığımız fark edilip ardından neden olduğunu tespit edebilmek adına CloudAMQP'deki RabbitMQ logları incelenmeye geçilmiştir. Aşağıda ekran görüntüsünde yer alan loglardan kaynaklı olarak vm_memory_high_watermark değerine (0,81) ulaşıldığı ve bu sebeple mevcut bağlantıları (producer) koparttığı görülmüştür.

Loglar

Bu tespitler üzerine producer bağlantılarının tekrar sağlanması için v2 uygulama sunucularına reloading amaçlı bir deployment başlatılmıştır. Bu süreçte takip sağlanarak bağlantıların normale dönüp dönmediğine bakılmıştır. Sorunun çözülmediği fark edildiğinde ise RabbitMQ servisinin reboot edilmesi sağlanmıştır. Akabinde bir deploy daha başlatılarak bağlantıların normale dönmesi sağlanmıştır.

Durum normale döndükten sonra RabbitMQ bellek durumu izlenmiş ve 430 MB seviyelerinde seyrettiği görülmüştür. High watermark değeri 760 MB'dır.

Etkilenenler

  • Siparişlerin operasyona iletiminde sekte sonucu depolar ve saha yönetimi
  • Logo kuyrukları aracılığı ile iletilen siparişlerin aksaması sonucu stoklarda geç güncelleme
  • Kullanıcılardan gelen SMS/Push izin isteklerinin sekteye uğraması
  • İYS entegrasyonu kapsamında alınan izinlerin ve redlerin iletilememesi
  • Aktif olan HepsiExpress entegrasyonundan gelen siparişlerin işlenememesi

Trendyol ve Trendyol Market entegrasyonları bu süreçte kapalı oldukları için etkilenmemiştir.

Operasyon

Sorunun çözülmesi sonucu yapılanlar:

  • İletilemeyen siparişlerin elogii entegrasyonuna iletilmesi sağlandı
  • İletilemeyen Logo sipariş kayıtlarının tekrar iletilmesi sağlandı
  • İşlenemeyen HepsiExpress siparişlerinin iptali sağlandı

Edinilen Dersler ve Alınan Aksiyonlar

  • v2 uygulaması bu durumdan direkt olarak etkilenmiş olmasına karşın herhangi bir hata loguna rastlanılmadı, kullanılan AMQP client'ı bu durumu handle edemiyor olabilir. Bağlantının koptuğunu tespit edemediğinden bağlantıyı retry ederek sağlayamadı. Bu durum tekrar yaşanırsa tespiti aynı şekilde uygulama bazında zor olacaktır.
  • CloudAMQP'den sağlanan CW metrikleri ve alarmları olay öncesi tümüyle kaldırıldığı için RabbitMQ tarafında kör duruma düşülmüştür. Bu durumu çözmek amacıyla CloudAMQP'nin sağladığı alarmların limitleri (threshold) düşürülerek erken uyarma sağlandı.
  • CloudAMQP'de yaratılan alarmların Slack'teki #infra-alarms kanalına bildirilmesi sağlandı.
  • Kök sebep olan memory limitine ulaşılmasına neden olan sorun tespit edilemedi, bu noktada limitin 0.81 değerinden daha yükseğe çıkarılması düşünülebilir.
  • Sorun tekrarlanırsa dikey ölçekleme yapmak gerekebilir.
  • (2022-09-14) vm_memory_high_watermark limiti 0,81'den 0,9'a çıkarıldı.