Nginx基础入门2 日志

Nginx 日志Log
一.日志配置
1.日志模块:官方文档http://nginx.org/en/docs/http/ngx_http_log_module.html
日志模块的名称 ngx_http_log_module
2. 相关指令
log_format 日志格式
access_log 访问日志
error_log 错误日志
open_log_file_cache 日志缓存

open_log_file_cache 指令的各项参数说明如下:
max: 设置缓存中的最大文件描述符数量。如果超过设置的最大文件描述符数量,则采用  LRU (Least Recently Used) 算法清除"较不常使用的文件描述符"。  LRU (Least Recently Used) 算 法的基本概念是:当内存缓冲区剩余的可用空间不够时,缓冲区尽可能地先保留使用者最常使用 的数据,将最近未使用的数据移出内存,腾出空间来加载另外的数据。

inactive:  设置一个时间,如果在设置的时间内没有使用此文件描述符,则自动删除此描述符。 此参数为可选参数,默认的时间为 10 秒钟。

min_uses: 在参数 inactive 指定的时间范围内,如果日志文件超过被使用的次数,则将该日 志文件的描述符记入缓存。默认次数为 1。

valid: 设置多长时间检查一次,看一看变量指定的日志文件路径与文件名是否仍然存在。默 认时间为 60秒。
off: 禁止使用缓存。

open_log_file_cache  指令的设置示例如下:
open_log_file_cache  max=1000  inactive=20s  min_uses=2  valid=1m; 

3.日志的格式和命令 log_format
简介:Nginx有非常灵活的日志记录模式。每个级别的配置可以有各自独立的访问日志。日志格式通过log_format命令定义。
语法:Syntax: log_format name [escape=default|json] string …;
name 表示格式名称 string 表示定义的格式
默认值
Default: log_format combined “…”; log_format 有默认的无需设置的combined日志格式,相当于apache的combined日志格式
环境:Context: http context 网站代理服务器的日志格式
log_format porxy '$http_x_forwarded_for - r e m o t e u s e r [ remote_user [ remoteuser[time_local] ’
’ “$request” $status KaTeX parse error: Double superscript at position 19: …y_bytes_sent ' '̲ "http_referer" “$http_user_agent” ';
如果Nginx位于负载均衡器,squid,nginx反向代理之后,web服务器无法直接获取到客户端真实的IP地址。
r e m o t e a d d r 获 取 的 是 反 向 代 理 的 I P 地 址 。 反 向 代 理 服 务 器 在 转 发 请 求 的 h t t p 头 信 息 中 , 可 以 增 加 X − F o r w a r d e d − F o r 信 息 , 用 来 记 录 客 户 端 I P 地 址 和 客 户 端 请 求 的 服 务 器 地 址 。 定 义 设 置 位 置 v i m / e t c / n g i n x / n g i n x . c o n f 日 志 部 分 配 置 l o g f o r m a t m a i n ′ remote_addr获取的是反向代理的IP地址。反向代理服务器在转发请求的http头信息中,可以增加X-Forwarded-For信息, 用来记录客户端IP地址和客户端请求的服务器地址。 定义设置位置 vim /etc/nginx/nginx.conf 日志部分配置 log_format main ' remoteaddrIPhttpXForwardedForIPvim/etc/nginx/nginx.conflogformatmainremote_addr - r e m o t e u s e r [ remote_user [ remoteuser[time_local] “KaTeX parse error: Double superscript at position 34: … '̲status b o d y b y t e s s e n t " body_bytes_sent " bodybytessent"http_referer” ’
‘“ h t t p u s e r a g e n t " " http_user_agent" " httpuseragent""http_x_forwarded_for”’;

日志格式允许包含的变量
	$remote_addr, 
		远程地址: 记录客户端IP地址
	$remote_user
		远程用户:记录客户端用户名称
	[$time_local]
		本地时间:服务器自身时间
	$request
		 请求:记录请求的URL和HTTP协议
			"GET /1.html HTTP/1.1"
			"GET /index.html HTTP/1.1"
	$status 
		状态:记录请求状态
			200
			404
			503
			100
			301
	$body_bytes_sent 
		发送给客户端的字节数,不包括响应头的大小
	$http_referer 
		记录从哪个页面链接访问过来的  (超链接)
	$http_user_agent
		 记录客户端浏览器相关信息
			火狐
			IE
	$http_x_forwarded_for
		代理IP
	old
		$request_length 
			请求的长度(包括请求行,请求头和请求正文)。
		$request_time
			 请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。
		$time_iso8601
			 ISO8601标准格式下的本地时间。
		$bytes_sent
			 发送给客户端的总字节数    (可在主配置文件中,增加此项观c)
		$msec 
			日志写入时间。单位为秒,精度是毫秒。

常用状态码

200      请求成功
202       服务器已接受请求,但尚未处理
301     永久移动。请求资源以被永久移动位置
302     请求的资源现在临时从不同的URL响应请求
305     使用代理。被请求的资源必须通过指定的代理才能被访问
307     临时跳转。被请求的资源在临时从不同的URL响应请求
400     错误请求。
402     需要付款。该状态码是为了将来可能需求而预留的,用于一些数字货币或者微支付
403     禁止访问。服务器已理解请求,但是拒绝执行它
404     找不到对象,请求失败,资源不存在
406     不可接受的,请求的资源的内容特性无法满足请求头中的条件,因而无法生成响应实体
408     请求超时;
409     冲突。由于和被请求的资源的当前状态之间存在冲突,请求无法完成;
410     遗失的。被请求的资源在服务器上已经不再可用,而且没有任何已知的转发地址;
413     响应实体太大。服务器拒绝处理当前请求,请求超过服务器所能处理和允许的最大值。
417     期望失败。在请求头 Expect 中指定的预期内容无法被服务器满足;
418     我是一个茶壶。超文本咖啡罐控制协议,但是并没有被实际的HTTP服务器实现
420     方法失效。
422     不可处理的实体。请求格式正确,但是由于含有语义错误,无法响应;
500     服务器内部错误。服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理;
502     请求后端失败,例如请求Java但是Java没启动就会报502
503     由于临时的服务器维护或者过载,服务器当前无法处理请求

404提示

favicon.ico 文件是浏览器收藏网址时显示的图标,当第一次访问页面时,浏览器会自动发起请求获取页面的favicon.ico文件。当/favicon.ico文件不存在时,服务器会记录404日志。
解决方法:
当一个站点没有设置favicon.ico时,access.log会记录了大量favicon.ico 404信息。

这样有两个缺点:
1.使access.log文件变大,记录很多没有用的数据。
2.因为大部分是favicon.ico 404信息,当要查看信息时,会影响搜寻效率。

解决方法如下:
在nginx的配置中加入

location = /favicon.ico {
  log_not_found off;
  access_log off;
}


以上配置说明:
location = /favicon.ico 表示当访问/favicon.ico时,
log_not_found off 关闭日志
access_log off 不记录在access.log

完整配置如下:

server {
  listen        80;
  server_name   fdipzone.com;
  root          /Users/fdipzone/home;

  access_log /var/log/nginx/access.log main;
  error_log /var/log/nginx/error.log debug;

  location = /favicon.ico {
    log_not_found off;
    access_log off;
  }

  location / {
    index  index.html index.htm index.php;
    include      /usr/local/etc/nginx/conf.d/php-fpm;
  }
}

  1. 日志缓存
    简介:大量访问到来时,对于每一条日志记录,都将是先打开文件,再写入日志,然后关闭.占用了系统的IO,与业务无关。可以使用open_log_file_cache来设
    Syntax:
    open_log_file_cache max=1000 inactive=20s min_uses=3 valid=1m ;
    max 1000 指的是日志文件的FD,最大的缓存数量为1000。超了怎么办,看下面
    min_users 3 20秒内小于3次访问的FD,就给你清掉,结合inactive 20s 的时间。
    valid 1m 检查周期为1分钟。
    总结:缓存最多1000个,到了极限,每分钟开始清除掉 20秒内小于3次的文件FD.
    Default:
    open_log_file_cache off
    Context:
    http, server, locatition
    http{} 将整个服务器所有网站,所有页面的日志进行缓存
    server{} 将某一个网站的所有页面日志,进行缓存
    location{}某一个页面的日志,进行缓存
    4.访问日志和错误日志
    access_log
    某条日志记录
    192.168.152.189 - - [17/Dec/2020:14:45:59 +0800] “GET /nginx-logo.png HTTP/1.1” 200 368 “http://192.168.152.10/” “Mozilla/5.0 (Windows NT 6.1; WOW64; rv:57.0) Gecko/20100101 Firefox/57.0” “-”
    某条日志记录含义
    192.远程主机IP
    - - 用户
    【2020】时间
    get获得,下载,还有post提交。
    /nginx-logo.png 下载图片
    http版本
    状态码 什么结果。对,还是错
    368 大小
    引用自哪个连接,主页http://192.168.152.10/
    Mozilla 5.0浏览器的版本
    Windows NT 客户端系统类型
    -远程客户端主机地址 (请看注释)
error_log
	个性化404
		1 修改主配置文件
			vim  /etc/nginx/nginx.conf
			http {
        error_page 404 /404.html;
}
			子配置中
				vim /etc/nginx/conf.d/xuleilinux.conf
				server{
            location = /404.html {
                root            /xuleilinux;
        }

}
			systemctl restart nginx
		2 创建错误反馈页面
			vim /xuleilinux/404.html
		3 访问
			访问不存在的页面
		4 查看404日志
			观察404页面的现象。

二.日志轮转/切割
1.Nginx安装,会默认启动日志轮转。
2. rpm -ql nginx| grep log
在这里插入图片描述
3.日志文件

vim /etc/logrotate.d/nginx 
	/var/log/nginx/*log {
		待切割的日志
	    create 0644 nginx nginx
		创建新的日志文件,属主
	    daily
		天
	    rotate 10
		10份
	    missingok
		丢失不提示
	    notifempty
		空文件的话,不转储
	    compress
		压缩
	    sharedscripts
		轮转后脚本
	    postrotate
	        /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
		USR1亦通常被用来告知应用程序重载配置文件;例如,向Apache HTTP服务器发送一个USR1信号将导致以下步骤的发生:停止接受新的连接,等待当前连接停止,重新载入配置文件,重新打开日志文件,重启服务器,从而实现相对平滑的不关机的更改。
	    endscript
	}
手动轮转
指令 /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
切割原理回顾(扩展)
	1.cron每小时呼唤一次anacron
		vim /etc/cron.hourly/0anacron
	2.anacrontab以天,周,月循环往复
		vim /etc/anacrontab
	3.天循环
		vim /etc/cron.daily/logrotate
	4.立刻循环
		指令 /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
	5.anacron当天的时间戳
		vim /var/spool/anacron/cron.daily
			2020831
	6.anacron循环后的时间戳
		vim /var/lib/logrotate/logrotate.status
			"/var/log/nginx/host.404.log" 2019-11-19-0:8:56
			根据该时间确定是否轮转。

三.日志分析
1.常用字段
$remote_addr $1
远程客户端地址
$time_local $4
本机时间
$request $7
请求URL
$status $9
状态码
$body_bytes_sent $10
请求体积
2.案例样本 校内网
统计2017年9月5日 PV量
在这里插入图片描述8点-9点间

  1. grep ‘05/Sep/2017:08’ sz.mobiletrain.org.log |wc -l
  2. 在这里插入图片描述
统计2017年9月5日 一天内访问最多的10个IP(ip top10)
grep '05/Sep/2017' cd.mobiletrain.org.log | awk '{ ips[$1]++ } END{for(i in ips){print i,ips[i]} } '| sort -k2 -rn | head -n10

统计2017年9月5日 访问大于100次的IP
 grep '05/Sep/2017' cd.mobiletrain.org.log | awk '{ ips[$1]++ } END{for(i in ips){ if(ips[i]>100)  {print i,ips[i]}} } '| sort -k2 -rn | head -n10
  统计2017年9月5日 访问最多的10个页面($request top 10)
  grep '05/Sep/2017' cd.mobiletrain.org.log |awk '{urls[$7]++} END{for(i in urls){print urls[i],i}}' |sort -k1 -rn |head -n10
统计2017年9月5日 每个URL访问内容总大小($body_bytes_sent,和次数
grep '05/Sep/2017' sz.mobiletrain.org.log |
awk '{ urls[$7]++; size[$7]+=$10}
END{for(i in urls){print urls[i],size[i],i}}'|
sort -k1 -rn | head -n10
统计2017年9月5日 每个IP访问状态码数量($status)
grep '05/Sep/2017' cd.mobiletrain.org.log | 
awk '{ ip_code[$1" "$9]++}
END{ for(i in ip_code){print i,ip_code[i]} }' | 
sort -k1 -rn | head -n10
 统计2017年9月5日 每个IP访问状态码为404及出现次数($status)
 grep '05/Sep/2017' sz.mobiletrain.org.log | 
awk '{if($9="404"){ip_code[$1" "$9]++}}
END{for(i in ip_code){print i,ip_code[i]}}'
统计2017年9月5日 8:30-9:00,每个IP,出现404状态码的数量
awk '$4>="[05/Sep/2017:08:30:00" && 
$4<="[05/Sep/2017:09:00:00" 
{if($9="404"){ip_code[$1" "$9]++}}
END{for(i in ip_code){print i,ip_code[i]}}' 
sz.mobiletrain.org.log 
统计2017年9月5日 各种状态码数量
grep '05/Sep/2017' sz.mobiletrain.org.log  | 
awk '{code[$9]++} END{for(i in code){print i,code[i]}}'
百分比
grep '05/Sep/2017' sz.mobiletrain.org.log | awk '{code[$9]++;total++} END{for(i in code){printf i" ";printf code[i]"\t";printf "%.2f",code[i]/total*100;print "%"}}'


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值