منبع اصلی نوشتار زیر در این لینک قرار دارد

تبدیل 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\” }” ;

 



برچسب ها : ,