Post mortem
Dokümanın yazımı ve geliştirilmesi devam ediyor. Bu süreçte değişiklikler olabilir.
| Başlık | Açıklama |
|---|---|
| Tarih | 09.09.2022 08:10 - 09:10 |
| Katılanlar | Kerim Kaan Dönmez, Kadir Pir, Mustafa Mecit |
| Olay | RabbitMQ'nun bellek limitine takılması sonucu mesaj alışverişinin kesilmesi |
| Etki | Operasyona sipariş iletiminin durması, Logo'ya sipariş akışının durması, SMS blacklist taleplerinin iletilememesi ve İYS entegrasyonuna bildirimlerin yapılamaması |
| Açıklama | CloudAMQP'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üm | Bellek 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. |
| Bulgular | CloudAMQP'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.

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.

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-alarmskanalı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_watermarklimiti 0,81'den 0,9'a çıkarıldı.