nginx系列友情連接:
nginx高性能WEB服務器系列之一簡介及安裝
https://www.cnblogs.com/maxtgood/p/9597596.html
nginx高性能WEB服務器系列之二命令管理
https://www.cnblogs.com/maxtgood/p/9597990.html
nginx高性能WEB服務器系列之三版本升級
https://www.cnblogs.com/maxtgood/p/9598113.html
nginx高性能WEB服務器系列之四配置文件詳解
https://www.cnblogs.com/maxtgood/p/9598333.html
nginx高性能WEB服務器系列之五--實戰項目線上nginx多站點配置
https://www.cnblogs.com/maxtgood/p/9598610.html
nginx高性能WEB服務器系列之六--nginx負載均衡配置+健康檢查
https://www.cnblogs.com/maxtgood/p/9599068.html
nginx高性能WEB服務器系列之七--nginx反向代理
https://www.cnblogs.com/maxtgood/p/9599335.html
nginx高性能WEB服務器系列之八--nginx日誌分析與切割
https://www.cnblogs.com/maxtgood/p/9599542.html
nginx高性能WEB服務器系列之九--nginx運維故障平常解決方案
https://www.cnblogs.com/maxtgood/p/9599752.htmlhtml
注:原創做品,容許轉載,轉載時請務必以超連接形式標明文章 原始出處 、做者信息和本聲明。不然將追究法律責任。python
nginx的強大之處沒必要要我細說,當初第一次接觸nginx的時候就發現了它的強大之處,而且自我以爲很是有必要出一篇記錄nginx的各個功能及坑點。nginx
歡迎你們對nginx感興趣的朋友們來一塊兒學習與及時提出錯誤及誤點。有問題的能夠在評論區@我。shell
一:nginx日誌分析瀏覽器
其實在咱們平常的運維工做中,只要有線上使用過Nginx服務器的人都知道,nginx正常運行後,咱們都會常常密切關注Nginx訪問日誌的相關狀況,發現有異常的日誌信息須要進行及時處理。bash
那麼我將跟你們一塊兒來研究和分析Nginx日誌,nginx通常默認日誌路徑爲:/usr/local/nginx/logs/access.log 和error.log文件。以下圖:服務器
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"'; access_log logs/access.log main;
格式解釋:運維
$remote_addr, $http_x_forwarded_for 記錄客戶端IP地址 $remote_user 記錄客戶端用戶名稱 $request 記錄請求的URL和HTTP協議 $status 記錄請求狀態 $body_bytes_sent 發送給客戶端的字節數,不包括響應頭的大小; 該變量與Apache模塊mod_log_config裏的「%B」參數兼容。 $bytes_sent 發送給客戶端的總字節數。 $connection_requests 當前經過一個鏈接得到的請求數量。 $http_referer 記錄從哪一個頁面連接訪問過來的 $http_user_agent 記錄客戶端瀏覽器相關信息 $request_length 請求的長度(包括請求行,請求頭和請求正文)。 $request_time 請求處理時間,單位爲秒,精度毫秒; 從讀入客戶端的第一個字節開始,直到把最後一個字符發送給客戶端後進行日誌寫入爲止。
那麼通常Nginx日誌分析需求有以下幾點:性能
1) 分析截止目前爲止訪問量最高的IP排行。
awk '{print $1}' /usr/local/nginx/logs/access.log|sort |uniq -c |sort -nr |head -20就能夠了。
2)找到當前日誌中502或者404錯誤的頁面並統計。
awk '{print $0}' /usr/local/nginx/logs/access.log|egrep "404|502"|awk '{print $1,$7,$9}'|more
固然還有不少需求,只要你搞清楚了日誌的格式與由來,而且有shell或者python基礎的話,相信都不是問題的。
二:nginx日誌切割案例
Nginx 是一個很是輕量的 Web 服務器,體積小、性能高、速度快等諸多優勢。但不足的是也存在缺點,好比在產生的訪問日誌文件一直就是一個,不會自動地進行切割,若是訪問量很大的話,將會致使日誌文件容量很是大,不便於管理。固然了,咱們也不但願看到這麼龐大的一個訪問日誌文件,那須要手動對這個文件進行切割。那麼這裏就天然而然用到了shell+crontab 命令了。(固然是用python也是能夠的)
腳本的功能,就是定時切割日誌,這裏切割的方法咱們直接使用mv便可。
nginx日誌切割腳本
以下:
#!/bin/bash #auto mv nginx log shell #by author wugk S_LOG=/usr/local/nginx/logs/access.log D_LOG=/data/backup/`date +%Y%m%d` echo -e "\033[32mPlease wait start cut shell scripts...\033[1m" sleep 2 if [ ! -d $D_LOG ];then mkdir -p $D_LOG fi mv $S_LOG $D_LOG kill -USR1 `cat /usr/local/nginx/logs/nginx.pid` echo "-------------------------------------------" echo "The Nginx log Cutting Successfully!" echo "You can access backup nginx log $D_LOG/access.log files."
最後在crontab中添加以下代碼便可,天天晚上自動去切割日誌:
0 0 * * * /bin/sh /data/sh/auto_nginx_log.sh >>/tmp/nginx_cut.log 2>&1