array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 17项目实战_Nginx日志分析 - 爱码网

日志格式分析

日志格式(非默认)

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

日志条目

"-" - - [06/Jan/2020:18:02:29 +0800] "GET /public/IT服务平台/ HTTP/1.1" 200 1327 "http://172.22.23.11/public/IT服务平台/15-mac必备系统工具/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36" 172.22.101.160 0

日志分析

统计PV量

# 统计2020年1月2日的PV量
[root@centos11 ~]# grep '02/Jan/2020' /usr/local/nginx/logs/access_public.log | wc -l
110

# 统计2020年1月2日00:00:00~13:00:00这段时间内的PV量
[root@centos11 ~]# awk '$4>="[02/Jan/2020:00:00:00" && $4<="[02/Jan/2020:13:00:00"{print $0}' /usr/local/nginx/logs/access_public.log | wc -l
28

统计一天内访问最多的10个IP

# 统计2020年1月2日一天内访问最多的10个IP(top10)
[root@centos11 ~]# grep '02/Jan/2020' /usr/local/nginx/logs/access_public.log | awk '{ips[$(NF-1)]++}END{for (i in ips){print i,ips[i]}}' | sort -k2 -rn | head -n10
172.22.72.30 22
172.22.50.237 16
172.22.69.128 12
172.22.225.131 8
172.22.42.173 7
172.22.85.68 6
172.22.105.26 6
172.22.70.155 5
172.22.218.231 5
172.22.108.52 5

统计一天内访问大于n次的IP

# 统计2020年1月2日访问大于10次的IP
[root@centos11 ~]# grep '02/Jan/2020' /usr/local/nginx/logs/access_public.log | awk '{ips[$(NF-1)]++}END{for (i in ips){if(ips[i]>10){print i,ips[i]}}}' | sort -k2rn
172.22.72.30 22
172.22.50.237 16
172.22.69.128 12

# 只使用awk完成
[root@centos11 ~]# awk '/02\/Jan\/2020/{ips[$(NF-1)]++}END{for (i in ips){if(ips[i]>10){print i,ips[i]}}}' /usr/local/nginx/logs/access_public.log | sort -k2rn
172.22.72.30 22
172.22.50.237 16
172.22.69.128 12

统计一天内访问最多的10个页面($request)

# 统计2020年1月2日一天内访问最多的10个页面(top10)
[root@centos11 ~]# awk '/02\/Jan\/2020/{urls[$7]++}END{for (i in urls){print urls[i],i}}' /usr/local/nginx/logs/access_public.log | sort -k1rn | head -n10
13 /public/IT服务平台/
10 /public/IT服务平台/03-办公软件/
7 /public/PPT模板/ppt模板16X9纯净版.ppt
5 /public/PPT模板/
4 /public/PPT模板/ppt模板纯净版.ppt
3 /public/IT服务平台/12-研发软件/
3 /public/IT服务平台/12-研发软件/Java/
3 /public/IT服务平台/25-客户端下载/
3 /public/IT服务平台/26-NextCloud/Ios_sui_10.1.5_1022.ipa
2 /public/IT服务平台/01-常用文档/

# 统计2020年1月1日00:00:00~2020年1月7日00:00:00这段时间内访问最多的10个页面(top10)
[root@centos11 ~]# awk '$4>="[01/Jan/2020:00:00:00" && $4<"[07/Jan/2020:00:00:00"{urls[$7]++}END{for (i in urls){print urls[i],i}}' /usr/local/nginx/logs/access_public.log | sort -k1rn | head -n10
599 /public/IT服务平台/09-系统镜像/OS%20X%2010.11.1%2815B42%29.cdr
274 /public/IT服务平台/
91 /public/IT服务平台/03-办公软件/
73 /public/IT服务平台/05-Polycom视频会议软件/RPDmac-release_3.2.1_48485.dmg
46 /public/IT服务平台/12-研发软件/
44 /public/IT服务平台/06-K3软件/K3CloudClientPortal.exe
38 /public/IT服务平台/12-研发软件/Java/
36 /public/IT服务平台/05-Polycom视频会议软件/Polycom%20RealPresence%20Desktop330.zip
31 /public/IT服务平台/25-客户端下载/
30 /public/IT服务平台/01-常用文档/

统计每个URL访问内容总大小($body_bytes_sent)

# 统计2020年1月2日一天内访问页面总大小最多的10个页面
# 显示效果:页面总大小 url
[root@centos11 ~]# awk '/02\/Jan\/2020/{size[$7]+=$10}END{for(i in size){print size[i],i}}' /usr/local/nginx/logs/access_public.log | sort -k1rn | head -n10
714913792 /public/IT服务平台/03-办公软件/01-Office系列软件/Visio%202016/SW_DVD5_Visio_Pro_2016_64Bit_ChnSimp_MLF_X20-42759.ISO
609447936 /public/IT服务平台/03-办公软件/01-Office系列软件/Visio%202016/SW_DVD5_Visio_Pro_2016_W32_ChnSimp_MLF_X20-41580.ISO
299891682 /public/IT服务平台/26-NextCloud/Ios_sui_10.1.5_1022.ipa
165674520 /public/IT服务平台/03-办公软件/03-Xmind/xmind-8-update8-windows.exe
138681500 /public/IT服务平台/26-NextCloud/Andriod_sui_10.1.5_1032.apk
121225744 /public/IT服务平台/06-K3软件/K3CloudClientPortal.exe
75260160 /public/IT服务平台/03-办公软件/06-金蝶云/suiSetup_1.1.2_1022-win.exe
70087283 /public/IT服务平台/06-K3软件/k3打印插件/K3Cloud打印插件.rar
26376260 /public/PPT模板/ppt模板16X9纯净版.ppt
8286208 /public/PPT模板/ppt模板4X3纯净版.ppt

# 统计2020年1月2日一天内访问次数最多的10个页面
# 显示效果:访问次数 页面总大小 url
[root@centos11 ~]# awk '/02\/Jan\/2020/{urls[$7]++;size[$7]+=$10}END{for(i in size){print urls[i],size[i],i}}' /usr/local/nginx/logs/access_public.log | sort -k1rn | head -n10
13 17223 /public/IT服务平台/
10 5900 /public/IT服务平台/03-办公软件/
7 26376260 /public/PPT模板/ppt模板16X9纯净版.ppt
5 1430 /public/PPT模板/
4 1853440 /public/PPT模板/ppt模板纯净版.ppt
3 1080 /public/IT服务平台/12-研发软件/
3 2325 /public/IT服务平台/12-研发软件/Java/
3 299891682 /public/IT服务平台/26-NextCloud/Ios_sui_10.1.5_1022.ipa
3 942 /public/IT服务平台/25-客户端下载/
2 1142 /public/IT服务平台/01-常用文档/

统计每个IP访问状态码数量($status)

# 统计2020年1月2日一天内每个IP访问状态码数量
[root@centos11 ~]# awk '/02\/Jan\/2020/{ips_code[$(NF-1)" "$9]++}END{for(i in ips_code){print i,ips_code[i]}}' /usr/local/nginx/logs/access_public.log | sort -k1rn | head -n10
172.22.102.88 200 2
172.22.105.26 200 6
172.22.108.52 200 5
172.22.218.231 200 5
172.22.225.131 200 5
172.22.225.131 206 3
172.22.41.18 200 3
172.22.42.173 200 7
172.22.50.138 200 2
172.22.50.217 200 4

统计每个IP访问状态码为200的出现次数($status)

[root@centos11 ~]# awk '/02\/Jan\/2020/{if($9=="200"){status[$(NF-1)" "$9]++}}END{for(i in status){print i,status[i]}}' /usr/local/nginx/logs/access_public.log | sort -k3rn | head -n10
172.22.72.30 200 22
172.22.50.237 200 16
172.22.69.128 200 12
172.22.42.173 200 7
172.22.105.26 200 6
172.22.85.68 200 6
172.22.108.52 200 5
172.22.218.231 200 5
172.22.225.131 200 5
172.22.70.155 200 5

统计前n分钟的PV量

# 介绍一下date的用法
[root@centos11 ~]# date
Mon Jan  6 21:16:47 CST 2020
# 获取一分钟后的时间
[root@centos11 ~]# date -d '1 min'
Mon Jan  6 21:17:49 CST 2020
# 获取一分钟前的时间: -1 min 或者 1 min ago
[root@centos11 ~]# date -d '-1 min'
Mon Jan  6 21:15:52 CST 2020
[root@centos11 ~]# date -d '1 min ago'
Mon Jan  6 21:15:55 CST 2020


# 统计1分钟前的PV量
[root@centos11 ~]# new_date=$(date -d '-1 minute' +%d/%b/%Y:%H:%M);awk -v date_new=$new_date '$0 ~ date_new {i++} END{print i}' /usr/local/nginx/logs/access_public.log

统计某个时间段内,访问状态码为200

# 统计2019年9月5日09:00-16:00,访问状态码为200的IP
[root@centos11 ~]# awk '$4>="[02/Jan/2020:09:00:00" && $4<="[02/Jan/2020:16:00:00"{if($9=="200"){ip_code[$(NF-1)" "$9]++}}END{for(i in ip_code){print i,ip_code[i]}}' /usr/local/nginx/logs/access_public.log | sort -k3rn
172.22.72.30 200 22
172.22.50.237 200 16
172.22.69.128 200 12
172.22.85.68 200 6
172.22.225.131 200 5
172.22.70.155 200 5
172.22.105.26 200 4
172.22.50.217 200 4
172.22.102.88 200 2
172.22.72.23 200 2

统计某个时间段内,各种状态码的数量

# 统计2019年9月5日09:00-16:00,各种状态码的数量
[root@centos11 ~]# awk '$4>="[02/Jan/2020:09:00:00" && $4<="[02/Jan/2020:16:00:00"{code[$9]++}END{for(i in code){print i,code[i]}}' /usr/local/nginx/logs/access_public.log
200 78
206 3

[root@centos11 ~]# awk '$4>="[02/Jan/2020:09:00:00" && $4<="[02/Jan/2020:16:00:00"{code[$9]++;total++}END{for(i in code){printf i"\t";printf code[i]"\t";printf "%.2f",code[i]/total*100;print "%"}}' /usr/local/nginx/logs/access_public.log
200	78	96.30%
206	3	3.70%

[root@centos11 ~]# awk '$4>="[02/Jan/2020:09:00:00" && $4<="[02/Jan/2020:16:00:00"{code[$9]++;total++}END{for(i in code){printf i"\t";printf code[i]"\t";printf "%.2f%\n",code[i]/total*100}}' /usr/local/nginx/logs/access_public.log
200	78	96.30%
206	3	3.70%

作业

Nginx日志默认格式

$remote_addr $1

$time_local $4

$request $7

$status $9

$body_bytes_sent $10

相关文章: