首页 > 技术文章 > Nginx 日志分析

zoer 2020-05-31 14:47 原文

Nginx 日志分析

说明:

  1. 日志分析是运维人员在对系统及应用程序维护时的一个必要的也是最有效的工具之一,所以学习日志分析是做为一个运维人员的必要选择,及掌握日志分析是作为一个运维人员的必要技能
  2. 在centons6以上的系统版本中,这种日志数据由系统服务rsyslog同一管理,根据其配置文件/etc/rsyslog.conf中的设置决定将内核消息及各种系统程序消息记录到什么位置。
  3. 由于日志的重要性,所以syslog服务成为服务器五个必备服务成员之一。及network(网络服务)、sshd(远程连接服务)、crond(任务计划服务)、sysstat(性能监控服务)及syslog(日志服务)

Nginx日志内容具体分析:

在成功安装nginx后,我们通过nginx的配置文件(nginx.conf),可以看到nginx日志的格式及存放位置。首先我们这里根据一条日志及配置文件中的日志格式来解读下日志内容的具体含义

101.38.162.61 - - [27/Apr/2018:14:03:40 +0800] "POST /wp-admin/admin-ajax.php HTTP/1.1" 200 58 "http://39.105.23.127/wp-admin/widgets.php" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36" "-"
Nginx的默认配置文件中,log_format即日志格式
① $remote_addr     远程连接地址,即请求者的ip(即101.38.162.61)如果有前端,则此处的ip是代理服务器的ip地址
② $remote_user     远程连接的用户,此处为空白,因其是匿名的,即第二个- ,
	此处有两个--,然而第一个-对应日志格式中的-
③ [$time_local]      服务器本地时间(即27/Apr/2018:14:03:40 +0800)
④ "$request"        请求的协议及方法及请求的目录(即:用的HTTP1.1协议以post方法请求的/wp-admin/admin-ajax.php目录)
⑤ $status           状态码,这里的状态码是200
⑥ $body_bytes_sent 发送给客户端的字节数,不包括响应头的大小,这里是58字节
⑦  $http_referer     告诉服务器该请求来自哪里
这里的请求来自http://39.105.23.127/wp-admin/widgets.php
⑧  $http_user_agent       浏览页面的访问者在用什么操作系统(包括版本号)浏览器(包括版本号)和用户个人偏好的代码 即对应得"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36".
⑨  $http_x_forwarded_for"   是一个 HTTP 扩展头部,用来表示 HTTP 请求端真实 IP,这里为空,因为该架构没有使用代理服务器,真实ip是$remote_addr,所以此处为空

⑩ 注:此处是默认的日志格式,我们可以根据需要自行添加和删减,例如$bytes_sent发送给客户端的总字节数;$connection_requests 当前通过一个连接获得的请求数量; $request_time 请求处理时间,单位为秒; $request_length请求的长度等。

日志的用途:

我们可以利用AWK工具,结合日志文件中的条件过滤出我们需要ip
1、分析截止目前为止访问量最高的ip排行
awk '{print $1}' host.access.log |sort |uniq -c|sort -nr |head -20
过滤出hos.access.log日志文件中访问量前20的ip

sort 将文件进行排序,并将排序结果标准输出
uniq -nr  去重并在右边显示重复出现的次数
sort -nr  -n依照大小来排序,-r倒序

2、找到当前日志中对应状态码的错误页面来统计,比如502
awk '{print $0}' host.access.log |grep '502' |awk '{print $1,$7,$9}'
这里的 {print $0} |grep 502 是指从所有内容中过滤出带有502的行,交给后面处理

3、在日常生产中难免会碰到cc攻击。例如对服务器发送大量head请求,占用连接数,导致服务器不能提供正常的访问,我们可以通过对日志文件分析,参考方法1,过滤出异常ip请求,然后写自动脚本,达到防火墙进行限制80端口访问

4、当然也可以过滤出日志文件中其他的参考,比如请求的大小请求的连接数等,进步加强对网站架构的掌握,做到进步优化

推荐阅读