歡迎您光臨本站 註冊首頁

Nginx狀態監控以及日誌分析詳解

←手機掃碼閱讀     月球人 @ 2020-06-05 , reply:0

1、Nginx狀態監控

Nginx提供了一個內置的狀態信息監控頁面可用於監控Nginx的整體訪問情況,這個功能由ngx_http_stub_status_module模塊進行實現。

使用nginx -V 2>&1 | grep -o with-http_stub_status_module命令檢測當前Nginx是否有status功能,如果輸出ngx_http_stub_status_module則說明是有的,如果沒有可以在編譯時加上此模塊。

默認情況下,status是關閉的,我們需要開啟,並指定uri來訪問數據。

 server { listen 80; server_name default_server; location /status { stub_status on; allow 114.247.125.227; } }


allow配置只允許指定的Ip才能訪問nginx status功能,去掉就是不限制。

重啟Nginx之後,瀏覽器訪問http://{IP}/status查看狀態監控信息

  • Active connections:當前的客戶端活動連接數(包含正在等待的客戶端連接),相當於TCP連接狀態處於Established和SYN_ACK

  • accepts: 已接受的客戶端連接總數,即已被worker進程接收的連接

  • handled: 已被處理的連接總數

  • requests: 客戶端的http請求總數

  • Reading: 當前正在讀取的http請求數(讀取到http請求首部)

  • Writing: 當前準備響應的連接數(寫入到http響應首部)

  • Waiting: 當前處於等待的空閒客戶端請求數, 等待的時間為Reading和Writing之間的間隔

採集到Nginx數據之後就可以用監控工具給監控起來了。

2、日誌分析

Nginx默認的日誌格式配置可以在/etc/nginx/nginx.conf中找到

 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" $request_time $upstream_response_time';


打印的日誌實例

39.105.66.117 - mp [11/Sep/2019:19:03:01 +0800] "POST /salesplatform-gateway/users HTTP/1.1" 200 575 "-" "Apache-HttpClient/4.5.5 (Java/1.8.0_161)" "-" 0.040 0.040
39.105.66.117 - mp [11/Sep/2019:19:03:08 +0800] "POST /salesplatform-gateway/users HTTP/1.1" 200 575 "-" "Apache-HttpClient/4.5.5 (Java/1.8.0_161)" "-" 0.008 0.008

  • $remote_addr: 客戶端的ip地址

  • $remote_user: 用於記錄遠程客戶端的用戶名稱

  • $time_local: 用於記錄訪問時間和時區

  • $request: 用於記錄請求的url以及請求方法

  • $status: 響應狀態碼

  • $body_bytes_sent: 給客戶端發送的文件主體內容字節數

  • $http_referer: 可以記錄用戶是從哪個鏈接訪問過來的

  • $http_user_agent: 用戶所使用的瀏覽器信息

  • $http_x_forwarded_for: 可以記錄客戶端IP,通過代理服務器來記錄客戶端的ip地址

  • $request_time: 指的是從接受用戶請求的第一個字節到發送完響應數據的時間,即$request_time包括接收客戶端請求數據的時間、後端程序響應的時間、發送響應數據給客戶端的時間

  • $upstream_response_time: 用於接收來自上游服務器的響應的時間

常用分析命令

1、根據訪問IP統計UV

 awk '{print $1}' paycenteraccess.log | sort -n | uniq | wc -l


2、查詢訪問最頻繁的IP(前10)

 awk '{print $1}' /var/log/nginx/access.log | sort -n |uniq -c | sort -rn | head -n 10


3、查看某一時間段的IP訪問量(1-8點)

 awk '$4 >="[25/Mar/2020:01:00:00" && $4  0.6 && $7~//api/appid/){print $4,$7,substr($NF,2,5)}' | awk -F '"' '{print $1,$2,$3}' |sort -k3 -rn | head -10


17、獲取前10條最耗時的請求時間、url、耗時

 cat /var/log/nginx/access.log |awk '{print $4,$7,substr($NF,2,5)}' | awk -F '"' '{print $1,$2,$3}' | sort -k3 -rn | head -10




[月球人 ] Nginx狀態監控以及日誌分析詳解已經有138次圍觀

http://coctec.com/docs/nginx/show-post-237106.html