ماژول جدید و بومی NGINX برای ارسال مستقیم متریکها به Prometheus — Native Prometheus Integration with Nginx
خلاصه
تیم Categorica ماژول متنباز جدیدی برای NGINX منتشر کرده است که امکان جمعآوری و ارسال مستقیم متریکها به Prometheus را بدون نیاز به اکسپورترهای جانبی فراهم میکند. این ابزار با حذف کانتینرهای سایدکار، معماری مانیتورینگ را سادهتر و سبکتر میسازد.
مقدمه و زمینه
سرور NGINX سالهاست که به عنوان انتخاب اصلی برای Reverse Proxy و وبسرور در معماریهای مختلف نرمافزاری شناخته میشود. تیمها معمولاً از ابزارهایی مثل Prometheus برای جمعآوری دادههای عملکردی و از Grafana برای نمایش آنها استفاده میکنند. تا پیش از این، استاندارد رایج برای اتصال NGINX به Prometheus استفاده از ابزار مستقل NGINX Prometheus Exporter بود.
چرا یک ماژول بومی؟
ابزارهای سنتی اکسپورتر معمولاً به صورت یک وبسرور جداگانه اجرا میشوند. اگرچه این روش در عمل کار میکند، اما نیازمند پیادهسازی کانتینرهای سایدکار (Sidecar) در داکر یا مدیریت سرویسهای جداگانه است که پیچیدگی زیرساختی را افزایش میدهد. علاوه بر این، خودِ سرویس اکسپورتر معمولاً تحت مانیتورینگ مستقیم قرار نمیگیرد. تیم Categorica با انگیزهی رفع این چالش، ماژول بومی C شکل برای NGINX توسعه داده است که متریکها را مستقیماً از دل وبسرور استخراج میکند.
جزئیات فنی و نحوه کارکرد
این ماژول (nginx-stats-prometheus) مستقیماً به عنوان یک ماژول داینامیک در NGINX بارگذاری میشود. برای استفاده از آن، نیازمند کامپایل NGINX با پرچمهای سازگاری و ماژول وضعیت هستید:
- دسترسی به کورسهای سورس NGINX (که Makefile همراه پروژه میتواند به صورت خودکار دانلود کند)
- کامپایلر C99 (مانند Clang)
- کتابخانههای پایهای نظیر PCRE، OpenSSL و zlib
پس از ساخت و نصب ماژول، تنظیمات آن در فایل nginx.conf بسیار ساده است:
load_module modules/ngx_http_stats_prom_module.so;
http {
server {
listen 9100;
location /metrics {
prometheus_metrics;
}
}
}
متریکهای خروجی و محدودیتها
این ماژول بلافاصله پس از راهاندازی، متریکهای حیاتی فرآیند را در آدرس http://hostname:9100/metrics منتشر میکند. برخی از مهمترین آمارها عبارتند از:
- وضعیت سلامت پردازشگر (
nginx_up) - شناسه پردازنده کارگر (
nginx_process_pid) - مجموع درخواستهای HTTP (
nginx_http_requests_total) - دستهبندی پاسخها بر اساس کدهای وضعیت (
nginx_http_responses_total)
البته این ماژول محدودیتهایی نیز دارد؛ از جمله اینکه جایگزین صددرصدی و کاملی برای اکسپورترهای قدیمی نیست، تعداد کمتری متریک جمعآوری میکند و به版本 خاصی از NGINX وابستگی دارد که با هر بروزرسانی نیازمند کامپایل مجدد است. حافظه پیشفرض اختصاصیافته برای ذخیره متریکها ۱ مگابایت است که میتوان آن را با دستور prometheus_metrics_shm_size تغییر داد.
چرا برای مهندسان اهمیت دارد؟
برای تیمهایی که به دنبال بهینهسازی زیرساخت و کاهش مؤلفههای اضافی در معماری میکروسرویس یا کانتینری خود هستند، حذف یک سایدکارِ اکسپورتر و اتکا به یک ماژول بومی گامی رو به جلو در جهت کاهش پیچیدگی عملیاتی (Operational Complexity) به شمار میرود.
این مطلب بهصورت کاملاً خودکار و با هوش مصنوعی از مقالهٔ اصلی و بحث هکرنیوز تهیه شده و ممکن است خطا داشته باشد. حقوق مطلب اصلی متعلق به نویسندهٔ آن است. قوانین و گزارش مشکل