Nginx之12火眼金睛 – (状态监控 & 日志分析)

什么是Nginx状态监控

  当Nginx在线上运行时,我们想监控Nginx整理的访问及性能情况,但需要用ssh登陆到该主机中进行使用命令进行查看,这种操作无疑是比较繁琐的,但Nginx提供了一个内置的状态信息监控页面可用于监控Nginx的整体访问情况,这个功能由ngx_http_stub_status_module模块进行实现。

如何启用监控模块

  使用nginx -V命令检查编译的参数,如果有–with-http_stub_status_module此模块的,就代码已经启用了status功能,如果没有可以在编译时加上此编译的参数。

  在 http段中,我们加入server段监听主机为本地及端口为80的配置,并在location段中指定访问的uri为status时匹配到我们配置的nginx status页面。

server {
listen 80;
server_name localhost;
location /status {
stub_status on;
}
}

查看状态监控信息

#信息详解
active connections:当前的客户端活动连接数(包含正在等待的客户端连接),相当于TCP连接状态处于Established和SYN_ACK

server accepts handled requests:
accepts: 已接受的客户端连接总数,即已被worker进程接收的连接
handled: 已被处理的连接总数
requests: 客户端的http请求总数

reading: 当前正在读取的http请求数(读取到http请求首部)
writing:当前准备响应的连接数(写入到http响应首部)
waiting: 当前处于等待的空闲客户端请求数, 等待的时间为Reading和Writing之间的间隔

什么是访问日志

  访问日志是记录Nginx接受用户请求及处理过程中一系列的日志记录,可以通过这些日志分析到用户IP、位置、在什么时间访问、使用什么操作系统、使用什么浏览器访问了什么页面等,从进行我们一系列的分析。

  首先我们了解一下日志定义格式及日志详解

#日志定义格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#日志字段详解
$remote_addr: 客户端的ip地址
$remote_user: 用于记录远程客户端的用户名称
$time_local: 用于记录访问时间和时区
$request: 用于记录请求的url以及请求方法
$status: 响应状态码
$body_bytes_sent: 给客户端发送的文件主体内容字节数
$http_referer: 可以记录用户是从哪个链接访问过来的
$http_user_agent: 用户所使用的浏览器信息
$http_x_forwarded_for: 可以记录客户端IP,通过代理服务器来记录客户端的ip地址

如何进行分析

  在以上了解了日志中每一个字段的定义,可以根据日志做出一些类似以下的分析:
1.根据访问IP统计UV
cat /usr/local/nginx/logs/access.log |awk '{print $1}' |sort |uniq -c |wc -l

  2.统计访问URL统计PV
cat /usr/local/nginx/logs/access.log |awk '{print $7}' |wc -l

  3.查询访问最频繁的IP(前10)
cat /usr/local/nginx/logs/access.log |awk '{print $1}' |sort | uniq -c |sort -n -k 1 -r |head -n10

  4.查询访问最频繁的URL(前10)
cat /usr/local/nginx/logs/access.log |awk '{print $7}' |sort | uniq -c |sort -n -k 1 -r| head -n10