Nginx入門教程(五)---訪問日誌簡單分析,統計PV、UV等資料。
本文主要記錄瞭如何對 Nginx 的訪問日誌進行一些簡單的分析。例如分析每日的 PV、UV等指標。
更多內容歡迎訪問我的個人部落格 指月山瀑
1. 概述
Nginx訪問日誌記錄了Nginx的所有請求,預設會儲存在nginx/logs/access.log
檔案中,也可以在配置檔案中通過access_log
引數自定義存放位置。
如果實在找不到可以通過如下命令查詢
# find / -name "access.log"
/usr/local/nginx/logs/access.log
簡單檢視一些檔案中的內容
less access.log
內容大概是這樣子的
183.69.208.21 - - [16/May/2020:10:04:59 +0000] "GET / HTTP/1.1" 200 4230 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"
主要包含了IP、日期、HTTP Method和協議版本號 狀態碼 裝置資訊等。
本次分析主要用到了awk
命令
AWK 是一種處理文字檔案的語言,是一個強大的文字分析工具。可以簡單的理解為一種指令碼語言吧。
2. 具體分析
1. PV數
pv
是page view的縮寫,即頁面瀏覽,這裡我們可以簡單的把使用者的每一次請求都看做一次訪問。
於是通過access.log統計PV數就是統計內容的行數了。
具體命令如下:
wc -l access.log
#結果如下
108544 access.log
總PV數大約是108544。
2. 每天的PV數
只需要在PV數的基礎上增加按日期分組即可。
這裡就要用到awk
命令了,具體命令如下:
awk '{print substr($4 , 2, 11)}' access.log|\
sort |uniq -c|\
sort -rn|\
head -n 10
#結果如下
1901 21/May/2020
1755 23/Jun/2020
1667 15/Jul/2020
1620 24/May/2020
1593 24/Aug/2020
1579 02/Oct/2020
1485 16/Oct/2020
1387 23/May/2020
1361 29/May/2020
1274 01/Sep/2020
具體解析:
# AWK 基本語法
# $1 表示第一行內容
awk '{print $1}' access.log
awk '{print substr($4 , 2, 11)}' access.log 這句表示對第四列進行擷取然後列印出來 這裡擷取出來的剛好就是日期
uniq -c 則是計數(記錄重複的有多少個)
sort -rn 排序
3. UV數
UV即Unique visitor,唯一訪客,每個使用者只算一次。
可以簡單的把每個IP當做一個獨立訪客,這樣只需要對於UV我們可以按IP進行分組統計就行了。
awk '{print $1}' access.log |\
sort | uniq |\
wc -l
# 注意 需要先sort在uniq去重,因為uniq只會對相鄰的行進行去重
#結果如下
12354
4. 每天的UV數
同樣的UV基礎上增加按日期分組
awk '{print substr($4,2,11) " " $1}' access.log |\
sort | uniq |\
awk '{uv[$1]++;next}END{for(date in uv) print uv[date] " " date}'|\
sort -rn|\
head -n 10
# head 用於控制顯示多少個head -n 10 即顯示前10
# 結果如下
333 16/Oct/2020
321 12/Oct/2020
321 04/Oct/2020
319 29/May/2020
304 17/Jul/2020
299 05/Aug/2020
294 09/Oct/2020
293 23/Aug/2020
293 07/Oct/2020
290 28/Sep/2020
這次命令稍微複雜了一點點,具體分析如下
# 將日期($4)和IP($1)提取出來重組成新的內容
awk '{print substr($4,2,11) " " $1}' access.log |\
# 排序並去重 這樣統計出來的就是UV了
sort | uniq |\
# 取出每一行的第一列即日期 並將計數+1 最後for迴圈列印出來
awk '{uv[$1]++;next}END{for(date in uv) print uv[date] " " date}'
# 最後在按倒序排序
sort -rn
# 只輸出前10條記錄
head -n 10
5. 統計哪些裝置訪問過
cat access.log |\
awk '{devices[$12]++;next} END {for (d in devices) print devices[d] " " d}'|\
sort -rn|\
head -n 10
# 結果如下
88396 "Mozilla/5.0
9835 "-"
4021 "Mozilla/4.0
1705
1422 "Go-http-client/1.1"
847 "fasthttp"
759 "Sogou
531 "serpstatbot/1.0
330 "MauiBot
323 "Mozilla"
6. 統計被訪問最多的頁面
cat access.log|\
awk '{print $7}'|sort|uniq -c|\
grep post|\
sort -rn|\
head -n 10
# grep post 過濾掉其他記錄 只統計post下的頁面
# 結果如下
783 /post/etcd/05-watch/
565 /post/etcd/06-why-mvcc/
403 /post/etcd/03-v3-analyze/
354 /post/grpc/00-faq/
335 /post/elasticsearch/01-install-by-docker/
285 /post/etcd/04-etcd-architecture/
253 /post/grpc/04-interceptor/
231 /post/etcd/01-install/
230 /post/git/04-git-reduce/
225 /post/mysql/04-cap-lock/
3. 小結
主要用到了以下幾個命令
- wc 統計檔案內容行數、字數、位元組數
- -l 只統計行數
- cat 檢視檔案內容
- 會一次性載入出所有內容,不建議用在大檔案上
- ls -h 先檢視檔案大小
- awk文字分析工具
- sort 排序
- 預設升序 -r引數指定降序
- 預設按字元排序(該情況下2>10 因為 2>1) -n 引數指定按照數值大小排序
- grep過濾
- 支援正規表示式
- uniq 去重
- 大部分情況下需要和sort配合使用
- head 控制輸出行數
- 和sort配合可以只輸出topn
- 管道操作符
|
- 通過該命令可以將一個命令的輸出作為另一個命令的輸出 非常常用
相關文章
- awk統計訪問nginx日誌次數Nginx
- Nginx訪問日誌詳解——各個部分含義——非常簡單Nginx
- 統計網站PV和UV網站
- MongoDB最簡單的入門教程之五-通過Restful API訪問MongoDBMongoDBRESTAPI
- Laravel 10 行程式碼實現簡單的網站 pv uv 統計Laravel行程網站
- 在Linux中,如何統計ip訪問情況?分析 nginx 訪問日誌?如何找出訪問頁面數量在前十位的ip?LinuxNginx
- Spring Boot入門(五):使用JDBC訪問MySql資料庫Spring BootJDBCMySql資料庫
- Python資料分析入門(五)Python
- 使用goaccess統計nginx日誌GoNginx
- MongoDB最簡單的入門教程之二 使用nodejs訪問MongoDBMongoDBNodeJS
- Linux下使用GoAccess監控Nginx訪問日誌LinuxGoNginx
- Nginx 簡單入門指北不指南Nginx
- 【Linux入門教程】4 使用者管理、系統效能分析、系統日誌及日誌分析、訊號機制與訊號處理Linux
- Flink計算pv和uv的通用方法
- nginx日誌分析工具goaccessNginxGo
- 【UV統計】海量資料統計的前世今生
- nginx高階訪客日誌切割Nginx
- mysql日誌系統簡單使用MySql
- Nginx統計訪問IP並排序Nginx排序
- 簡單的 Go 入門教程Go
- Python入門教程—資料分析工具PandasPython
- FeignClient配置日誌訪問client
- 分散式系統監控(五)- 日誌分析分散式
- 簡單分析MySQL 一則慢日誌監控誤報問題MySql
- 日誌實時分析:從入門到精通
- OSS訪問日誌分析(1):概念+巨集觀指標指標
- Spark+Hbase 億級流量分析實戰( PV/UV )Spark
- [2]SpinalHDL教程——Scala簡單入門
- Spring Boot 入門(五):整合 AOP 進行日誌管理Spring Boot
- Flink實時計算pv、uv的幾種方法
- Tomcat訪問日誌淺析Tomcat
- Spring Boot從入門到實戰:整合AOPLog來記錄介面訪問日誌Spring Boot
- 對 MySQL 慢查詢日誌的簡單分析MySql
- 使用 Nginx 構建前端日誌統計服務Nginx前端
- linux系統伺服器,nginx日誌切割儲存教程。Linux伺服器Nginx
- 日誌服務之分析使用者訪問行為
- [20180625]簡單計算日誌生成率.txt
- ASP入門教程 1小時ASP入門,非常簡單