ماژول وضعیت NginX و تولید خروجی JSON

همانطور که احتمالا می دانید NGINX دارای یک سری امکانات است که در قالب ماژول بارگذاری می شوند. یکی از این ماژول ها، وضعیت سرور NGINX در قالب یک صفحه html نشان می دهد. (ماژول stub_status) کافی است به مسیر مشخص شده در فایل پیکربندی درخواست ارسال کنید و وضعیت سرور NGINX را دریافت نمایید. اطلاعات ارائه شده بسیار مختصر بوده و وضعیت NGINX را در مورد پردازش درخواست های ورودی نشان می دهد.
در این پست علاوه بر معرفی این ماژول تغییراتی که در آن برای پشتیبانی از خروجی JSON داده شده است را بیان کرده ایم.
اگر NGINX را در Ubuntu Sever  با استفاده از apt نصب کرده باشید ماژول آمار نیز به همراه آن نصب می شود؛ اما به صورت پیشفرض غیر فعال است. برای فعالسازی این ماژول پیکربندی زیر را برای NGINX در درون بلاک server {…} اعمال نمایید.

location /nginx_status {
    stub_status on;
    access_log   off;
    allow 1.1.1.1;
    deny all;
}

در صورتی که آدرس وب سایت شما example.com باشد صفحه وضعیت NGINX از طریق آدرس http://example.com/nginx_status در دسترس خواهد بود. خروجی مشابه تصویر زیر بدست می آید:

Active connections: 43 
server accepts handled requests
 ۷۳۶۸ ۷۳۶۸ ۱۰۹۹۳ 
Reading: 0 Writing: 5 Waiting: 38

طبق پیکربندی بیان شده در بالا تنها آدرس ۱.۱.۱.۱ مجوز دسترسی به این صفحه را خواهد داشت. برای جلوگیری از ثبت لاگ به همراه دسترسی به این صفحه آن را با دستور access_log off غیر فعال می کنیم.
آیتم های موجود در خروجی ماژول به شرح زیر است:

  • Active Connections؛ تعداد تمام کانکشن های باز. این عدد نشان دهنده تعداد کاربران نیست. یک کاربر برای نمایش یک صفحه می تواند تعداد زیادی کانکشن موازی همزمان به سرویس دهنده وب باز کند.
  • Server accepts handled requests؛ در این بخش سه مقدار را نشان می دهد؛ اولین مقدار تعداد کانکشن های پذیرفته شده (accepts) را نشان می دهد. مقدار دوم تعداد کانکشن های هندل شده (handled) را نشان می دهد. معمولا این دو مقدار با یکدیگر برابرند. مقدار سوم تعداد درخواست های هندل شده را نشان می دهد. معمولا این مقدار از دو مقدار قبلی بزرگتر است. با تقسیم مقدار سوم با دومین مقدار تعداد درخواست هندل شده بر کانکشن را بدست می دهد. در مثال بالا این مقدار برابر است با ۱.۴۹ درخواست بر کانکشن.
  • Reading؛ تعداد هدرهای درخواستی که NGINX مشغول خواندن آن است.
  • Writing؛ تعداد بدنه درخواستی که NGINX در حال خواندن، پردازش و یا در حال نوشتن پاسخ آن برای مشتری است.
  • Waiting؛ تعداد کانکشن های keep-alive را نشان می دهد. این مقدار به keepalive-timeout وابسته است.

تغییر در ماژول

خروجی تولید شده به وسیله ماژول stub_stats برای عامل انسانی خوانا است. در صورتی که بخواهیم از این ماژول برای سامانه مانیتورینگ استفاده کنیم، کار مقدار مشکل می شود. با کمی تغییر در کد منبع این ماژول می توان خروجی را با فرمت JSON تولید کرد. تغییرات ایحاد شده بر روی نسخه ۱.۱۵.۸ نرم افزار NGINX است. (خیلی بعیده بعدا کسی به این کد دست بزنه!) کد این ماژول در یک فایل C در مسیر زیر قرار دارد.

/nginx-1.15.8/src/http/modules/ngx_http_stub_status_module.c

نسخه تغییر یافته این کد را می توانید از آدرس https://github.com/gtavasoli/Nginx-Modules دریافت کنید. تغییرات اعمال شده با حفظ کد قبلی است. متغیر ngsom در این کد نوع خروجی را نشان می دهد. در صورتی که مقدار این متغیر Plain باشد مشابه کد فعلی ماژول عمل کرده و خروجی متنی تولید می کند و در صورتی که مقدار این متغیر JSON مقداردهی شود، خروجی با فرمت JSON تولید می شود.
برای کامپایل این ماژول می بایست کد NGINX را مجددا کامپایل نمایید. برای کامپایل NGINX از روی کد می توانید به پست «کامپایل و ساخت NGINX بر روی Ubuntu 18.04 LTS» مراجعه نمایید. نمونه ای از خروجی به فرمت JSON در شکل زیر نشان داده شده است.

مزیت این خروجی این است که می توان از آن به عنوان ورودی ابزار مانیتورینگ استفاده کرد.
از کارهایی که باید انجام شود این است که تبدیل فرمت های خروجی این ماژول در فایل پیکربندی قابل تنظیم باشد. برای رسیدن به چیزی شبیه NGINX+ می بایست امکانات این ماژول را افزایش دهم.

مطالب مرتبط:

Leave a Reply

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *