« Tüm yayınlar

Nginx'ten Gerçek Metrik Almak: OpenResty ve Prometheus Deneyimi

Nginx'in dört metrikle sınırlı stub_status'undan OpenResty ile tam Prometheus metriklerine geçiş: kardinalite kontrolü ve gauge/histogram tercihleri.

Nginx'in yerleşik stub_status uç noktası yalnızca dört sayı verir: aktif bağlantılar, kabul edilen, işlenen ve toplam istek sayısı. Route bazlı gecikme yok, hata kodu kırılımı yok. Erişim logları var ama gerçek zamanlı grafikte izlenebilecek metrikler değil.

Çözüm, request yaşam döngüsüne Lua gömen bir nginx dağıtımı olan OpenResty ile geldi; keşif nginx-lua-prometheus projesi üzerinden oldu. OpenResty'nin upstream nginx'i yakından takip ettiği ve büyük ölçekte kanıtlanmış olduğu doğrulandıktan sonra standart nginx yerine geçildi ve Prometheus metrikleri doğrudan istek işleme kodundan dışa aktarılmaya başlandı.

Asıl zorlu iş, kardinalite patlamasını kontrol altına almaktı. Ham istek yolları, istemci IP'leri ve Host başlıkları sınırsız zaman serisi üretme riski taşıyordu. Çözüm: UUID'leri, sayısal ID'leri ve hex token'ları genel bir '$param' yer tutucusuna indirgeyen desen tabanlı temizleme, IP'ler için subnet düzeyinde maskeleme ve Host değerlerinin ham string yerine birkaç kategoriye sınıflandırılmasıydı.

Yanıt süresi izleminde, düşük trafikli route'lar için histogram yerine gauge tercih edildi; çünkü az örnekle hesaplanan histogram yüzdelikleri güvenilmezdi ve depolama maliyetini gereksiz yere şişiriyordu. Gauge, son isteğin gerçek süresini raporlar; sessiz endpoint'ler için daha doğru bir yaklaşımdır, ancak eski değerlerin sessizce kalıcı olabilmesi nedeniyle dikkatli yönetim gerektirir.