微服务系列文章 之 Nginx状态监控日志分析详解

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 <="[25/Mar/2020:08:00:00"' /var/log/nginx/access``.log | ``awk '{print $1}' | ``sort | ``uniq -c| ``sort -nr |``wc -l |

4、查看访问100次以上的IP

|---|--------------------------------------------------------------------------------------------------------------------------------|
| | awk '{print $1}' /var/log/nginx/access``.log | ``sort -n |``uniq -c |``awk '{if($1 >100) print $0}'``|``sort -rn |

5、查看指定ip访问过的url和访问次数

|---|---------------------------------------------------------------------------------------------------------------------------|
| | grep "39.105.67.140" /var/log/nginx/access``.log|``awk '{print $7}' |``sort |``uniq -c |``sort -n -k 1 -r |

6、根据访问URL统计PV

|---|------------------------------------------------------------------------|
| | cat /var/log/nginx/access``.log |``awk '{print $7}' |``wc -l |

7、查询访问最频繁的URL(前10)

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

8、查看访问最频的URL(排除/api/appid)(前10)

|---|-------------------------------------------------------------------------------------------------------------------------------------------|
| | grep -``v '/api/appid' /var/log/nginx/access``.log|``awk '{print $7}' | ``sort |``uniq -c | ``sort -rn | ``head -n 10 |

9、查看页面访问次数超过100次的页面

|---|---------------------------------------------------------------------------------------------------------------------------------------|
| | cat /var/log/nginx/access``.log | ``cut -d ``' ' -f 7 | ``sort |``uniq -c | ``awk '{if ($1 > 100) print $0}' | ``less |

10、查看最近1000条记录,访问量最高的页面

|---|---------------------------------------------------------------------------------------------------------------|
| | tail -1000 ``/var/log/nginx/access``.log |``awk '{print $7}'``|``sort``|``uniq -c|``sort -nr|``less |

11、统计每小时的请求数,top10的时间点(精确到小时)

|---|-----------------------------------------------------------------------------------------------------------------------|
| | awk '{print $4}' /var/log/nginx/access``.log |``cut -c 14-15|``sort``|``uniq -c|``sort -nr|``head -n 10 |

12、统计每分钟的请求数,top10的时间点(精确到分钟)

|---|-----------------------------------------------------------------------------------------------------------------------|
| | awk '{print $4}' /var/log/nginx/access``.log |``cut -c 14-18|``sort``|``uniq -c|``sort -nr|``head -n 10 |

13、统计每秒的请求数,top10的时间点(精确到秒)

|---|-----------------------------------------------------------------------------------------------------------------------|
| | awk '{print $4}' /var/log/nginx/access``.log |``cut -c 14-21|``sort``|``uniq -c|``sort -nr|``head -n 10 |

14、查找指定时间段的日志

|---|------------------------------------------------------------------------------------------------------|
| | awk '$4 >="[25/Mar/2020:01:00:00" && $4 <="[25/Mar/2020:08:00:00"' /var/log/nginx/access``.log |

15、列出传输时间超过 0.6 秒的url,显示前10条

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

16、列出/api/appid请求时间超过0.6秒的时间点

|---|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| | cat /var/log/nginx/access``.log |``awk '(substr($NF,2,5) > 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 |

相关推荐
米丘3 天前
微前端之 Web Components 完全指南
微服务·html
ping某4 天前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
霸道流氓气质6 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
网络研究院6 天前
2026年网络安全
网络·安全·法律·法规·趋势·发展
酣大智6 天前
ARP代理--工作原理
运维·网络·arp·arp代理
treesforest6 天前
AI安全系统如何识别异常访问?IP风险识别正在成为关键能力
网络·人工智能·tcp/ip·安全·web安全
shushangyun_6 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
2601_961845156 天前
粉笔行测题库|系统班|刷题
网络·百度·微信·微信公众平台·facebook·新浪微博
程序猿阿伟6 天前
《Chrome离线扩展安装的底层逻辑与场景落地指南》
服务器·网络·chrome
InHand云飞小白6 天前
无人值守站点网络困境?工业级路由器IR315破解连接难题
网络·物联网·4g·工业路由器·4g路由器·iiot·蜂窝路由器