1. 程式人生 > 其它 >nginx配置日誌為json格式,nginx按照天實現日誌分割,nginx配置負載均衡

nginx配置日誌為json格式,nginx按照天實現日誌分割,nginx配置負載均衡

技術標籤:nginxnginx

1.nginx功能,可以作為HTTP伺服器,也可作為反向代理伺服器,郵件伺服器。支援FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能。並且支援很多第三方的模組擴充套件。在使用nginx過程中我們除了要使用nginx自身的功能之外,我們還需要讓它使用起來更加得心應手和舒服,這時我們可以自己配置nginx日誌顯示,實現服務監聽,訪問統計等。一個好的nginx日誌配置方便我們對服務的監控,負載均衡和session共享可以方便我們橫向擴充套件服務,日誌分割使我們更容易區分每天服務的訪問情況。具體配置如下

1.nginx配置日誌為json格式,方便其它服務抓取資料,實現訪問監聽

	#配置日誌為json格式
	log_format main '{
		  "@timestamp":"$time_local",
		  "host":"$server_addr",
		  "clientip":"$remote_addr",
		  "remote_user":"$remote_user",
		  "request":"$request",
		  "http_user_agent":"$http_user_agent",
		  "size":"$body_bytes_sent",
		  "responsetime":"$request_time",
		  "upstreamtime":"$upstream_response_time",
		  "upstreamhost":"$upstream_addr",
		  "http_host":"$host",
		  "url":"$uri",
		  "domain":"$host",
		  "xff":"$http_x_forwarded_for",
		  "referer":"$http_referer",
		  "status":"$status"
		}';

2.nginx配置日誌按照天分割,配置在server裡

		 #日誌按照天分割
		if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})")
			{
				set $year $1;
				set $month $2;
				set $day $3;
				set $hour $4;
				set $minutes $5;
				set $seconds $6;
			}
		access_log  logs/nginx_access_$year-$month-$day.log  main;

3.nginx配置負載均衡,使用ip_hash實現session共享

	#負載均衡,使用ip_hash實現session共享
	upstream dianyu_net_server {
         server 102.13.22.223:8080;
         server 102.13.22.224:8080;
		 server 102.13.22.225:8080;
         ip_hash;
		}

4.nginx全部配置如下


#配置啟動使用者為root
user  root;
worker_processes  1;


events {
    worker_connections  1024;
}


http {

	#配置日誌為json格式
	log_format main '{
		  "@timestamp":"$time_local",
		  "host":"$server_addr",
		  "clientip":"$remote_addr",
		  "remote_user":"$remote_user",
		  "request":"$request",
		  "http_user_agent":"$http_user_agent",
		  "size":"$body_bytes_sent",
		  "responsetime":"$request_time",
		  "upstreamtime":"$upstream_response_time",
		  "upstreamhost":"$upstream_addr",
		  "http_host":"$host",
		  "url":"$uri",
		  "domain":"$host",
		  "xff":"$http_x_forwarded_for",
		  "referer":"$http_referer",
		  "status":"$status"
		}';
	#不生效
    #access_log  logs/access.log  main;#1、轉發的日誌檢視
	
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
	
	#負載均衡實現session共享,缺少配置流量分配和健康檢查
	upstream dianyu_net_server {
         server 102.13.22.223:8080;
         server 102.13.22.224:8080;
		 server 102.13.22.225:8080;
         ip_hash;
		}

		server {
		  listen 80;
		  server_name 127.0.0.1;



		  location / {
			proxy_pass http://dianyu_net_server;
			gzip on;
			gzip_min_length 1k;
			gzip_buffers 16 64k;
			gzip_http_version 1.1;
			gzip_comp_level 6;
			gzip_types text/plain application/x-javascript text/css application/xml image/jpeg image/gif image/png;
			gzip_vary on;
			gzip_disable    "MSIE [1-6]\."; 
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			#proxy_set_header X-Forwarded-For $http_x_forwarded_for;
			proxy_set_header Host $http_host;
			proxy_connect_timeout 100;
			proxy_read_timeout 600;
			proxy_send_timeout 600;
			proxy_buffer_size 64k;
			proxy_buffers 4 32k;
			proxy_busy_buffers_size 64k;
			proxy_temp_file_write_size 64k;
		  }
		 
		 #日誌按照天分割
		if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})")
			{
				set $year $1;
				set $month $2;
				set $day $3;
				set $hour $4;
				set $minutes $5;
				set $seconds $6;
			}
		access_log  logs/nginx_access_$year-$month-$day.log  main;

		}  



 }

nginx日誌欄位解釋,引數明細

$remote_addr客戶端ip地址(代理伺服器,顯示代理服務ip)
$http_x_forwarded_for可以記錄客戶端IP,通過代理伺服器來記錄客戶端的ip地址
$remote_user使用者記錄遠端客戶端的使用者名稱稱(一般為‘-’)
$time_local用具記錄訪問時間和時區
$status響應狀態碼 ‘404’頁面找不到 ‘200’成功等
$request_time整個請求的總時間,從接收使用者請求的第一個位元組到傳送完響應資料的時間,即包括接收請求資料時間,程式響應時間,輸出響應資料時間
$bytes_sent傳輸給客戶端的位元組數
$body_bytes_sent給客戶端傳送的檔案主題內容位元組數,響應頭不計算在內
$request_length請求的長度(包括請求的地址,http請求頭和請求主體)
$http_refererurl跳轉來源,用來記錄從哪個頁面連結訪問過來的
$upstream_addr後臺提供服務的地址(即轉發處理的目標地址)
$upstream_response_time從nginx向後端建立連線開始到接受完資料然後關閉連線為止的時間
$http_user_agent使用者所使用的代理(一般為瀏覽器)
$request用於記錄請求的url以及請求方法
$request_body客戶端的請求主體,此變數可以在location中使用,將請求主體通過proxy_pass,fastcgi_pass,uwsgi_pass和scgi_pass傳遞給下一級的代理
$args請求中的引數值
$uri請求中的當前URI(不帶請求引數,引數位於$args),可以不同於瀏覽器傳遞的$request_uri的值,它可以通過內部重定向,或者使用index指令修改
$request_uri這個變數等於包含一些客戶端請求引數的原始URI,它無法修改
$remote_port客戶端埠