دی ۱۲ ۱۳۹۶

راه اندازی صفحه status سرویس nginx

خیلی از سرویس‌ها یک صفحه status دارند که به شما وضعیت فعلیشون شامل چیزایی مثلا تعداد درخواست همزمان، درخواست های در حال اتمام و از این قبیل را می دهند.

سرویس nginx هم یه صفحه status داره . تنها مشکلش اینه که نسخه غیر تجاریش دارای صفحه status خیلی کوچیکیه و داده زیادی در اختیار نمی ده ؛ برخلاف Nginx Plus که صفحه status مفصلی داره.

برای فعال کردن صفحه status سرویس nginx کانفیگ زیر را به یکی از virtualhost هاتون اضافه کنید (virtualhost پیشفرض بهتره)

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

پس از اضافه کردن این کانفیگ nginx -s reload را بزنید و از طریق لینک زیر بازش کنید.

http://127.0.0.1/nginx_status

خروجی مشابه زیر خواهید دید. خیلی از ابزارهای مانیتورینگ از همین داده ها برای کشیدن نمودارهای وضعیت Nginx استفاده می‌کنند.

Active connections: 6
server accepts handled requests
۶ ۶ ۱
Reading: 0 Writing: 1 Waiting: 5


دی ۱۲ ۱۳۹۶

تبدیل log_format از Apache به Nginx

تا اومدم LogFormat ای که تو Apache تعریف کرده بودم را به log_format سرویس nginx تبدیل کنم، پوستم کنده شد.  برای همین اینجا گذاشتم شاید به دردتون بخوره. من LogFormat را به صورت Json برای ارسال به graylog آماده کرده بودم.

LogFormat سرویس Apache2.4
من LogFormat را به صورت زیر تعریف کرده بودم و برای پیدا کردن لیست متغیر هام از اینجا استفاده کردم.

LogFormat “{ \”version\”: \”1.1\”, \”host\”: \”%V\”, \”short_message\”: \”%r\”, \”timestamp\”: %{%s}t, \”level\”: 6, \”_user_agent\”: \”%{User-Agent}i\”, \”_source_ip\”: \”%a\”, \”_duration_usec\”: %D, \”_duration_sec\”: %T, \”_request_size_byte\”: %O, \”_http_status\”: %s, \”_http_request_path\”: \”%U\”, \”_http_request\”: \”%U%q\”, \”_http_method\”: \”%m\”, \”_http_referer\”: \”%{Referer}i\” }” graylog2_access

تبدیل به فرمت log_formate در nginx
نتیجه شد کانفیگ زیر، تنها نکته اش اینه که معادل %U در nginx وجود نداشت و اون را با کمک map ساختمش. برای دیدن لیست متغیر های nginx به اینجا مراجعه کنید. ولی لیستش مثل Apache خیلی کامل نیست.

map $request_uri $request_uri_path {
“~^(?P[^?]*)(\?.*)?$” $path;
}

log_format graylog2_access “{ \”version\”: \”1.1\”, \”host\”: \”$realip_remote_addr\”, \”short_message\”: \”$request\”, \”timestamp\”: $time_iso8601, \”level\”: 6, \”_user_agent\”: \”$http_user_agent\”, \”_source_ip\”: \”$remote_addr\”, \”_duration_usec\”: $request_time, \”_request_size_byte\”: $bytes_sent, \”_http_status\”: $status, \”_http_request_path\”: \”$request_uri_path\”, \”_http_request\”: \”$request_uri\”, \”_http_method\”: \”$request_method\”, \”_http_referer\”: \”$http_referer\” }” ;