网站首页 > 技术教程 正文
log_format 日志格式
1、语法:
log_format name(格式名字) 格式样式(即想要得到什么样的日志内容)
示例:
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_s ent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'
2、具体参数格式
3、x_forwarded_for:
通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_addr拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。
注:在server中设置x_forwarded_for
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
access_log
用了log_format 指令设置了日志格式之后,需要用access_log指令指定日志文件的存放路径;
1、语法:
access_log path(存放路径) format (自定义日志名称)
示例:
access_log logs/access.log main;
2、设置刷盘策略:
access_log /data/logs/nginx-access.log buffer=32k flush=5s;
buffer 满 32k 才刷盘;假如 buffer 不满 5s 钟强制刷盘。
注:一般log_format在全局设置,可以设置多个。access_log 可以在全局设置,但往往是定义在虚拟主机(server)中的location中。
例如:
http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '"$status" $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" ' '"$gzip_ratio" $request_time $bytes_sent $request_length'; log_format srcache_log '$remote_addr - $remote_user [$time_local] "$request" ' '"$status" $body_bytes_sent $request_time $bytes_sent $request_length ' '[$upstream_response_time] [$srcache_fetch_status] [$srcache_store_status] [$srcache_expire]'; open_log_file_cache max=1000 inactive=60s; server { server_name ~^(www\.)?(.+)$; access_log logs/$2-access.log main; error_log logs/$2-error.log; location /srcache { access_log logs/access-srcache.log srcache_log; } } }
3、其他:
1)error_log:
配置错误日志,例如上例。
2)open_log_file_cache:
对于每一条日志记录,都将是先打开文件,再写入日志,然后关闭。可以使用open_log_file_cache来设置日志文件缓存(默认是off)。
语法:
open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
参数注释如下:
- max:设置缓存中的最大文件描述符数量,如果缓存被占满,采用LRU算法将描述符关闭。
- inactive:设置存活时间,默认是10s
- min_uses:设置在inactive时间段内,日志文件最少使用多少次后,该日志文件描述符记入缓存中,默认是1次
- valid:设置检查频率,默认60s
open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;
3)日志分析:
通过对日志格式的定义,就可以使用常见的 Linux 命令行工具进行分析了:
查找访问频率最高的 URL 和次数:
cat access.log | awk -F ‘^A’ ‘{print $10}’ | sort | uniq -c
查找当前日志文件 500 错误的访问:
cat access.log | awk -F ‘^A’ ‘{if($5 == 500) print $0}’
查找当前日志文件 500 错误的数量:
cat access.log | awk -F ‘^A’ ‘{if($5 == 500) print $0}’ | wc -l
查找某一分钟内 500 错误访问的数量:
cat access.log | awk -F ‘^A’ ‘{if($5 == 500) print $0}’ | grep ’09:00’ | wc-l
查找耗时超过 1s 的慢请求:
tail -f access.log | awk -F ‘^A’ ‘{if($6>1) print $0}’
假如只想查看某些位:
tail -f access.log | awk -F ‘^A’ ‘{if($6>1) print $3″|”$4}’
查找 502 错误最多的 URL:
cat access.log | awk -F ‘^A’ ‘{if($5==502) print $11}’ | sort | uniq -c
查找 200 空白页
cat access.log | awk -F ‘^A’ ‘{if($5==200 && $8 < 100) print $3″|”$4″|”$11″|”$6}’
切割日志
Nginx 的日志都是写在一个文件当中的,不会自动地进行切割,如果访问量很大的话,将导致日志文件容量非常大,不便于管理和造成Nginx 日志写入效率低下等问题。所以,往往需要要对access_log、error_log日志进行切割。
切割日志一般利用USR1信号让nginx产生新的日志。实例:
#!/bin/bashlogdir="/data/logs/nginx" pid=`cat $logdir/nginx.pid` DATE=`date -d "1 hours ago" +%Y%m%d%H` DATE_OLD=`date -d "7 days ago" +%Y%m%d` for i in `ls $logdir/*access.log`; do mv $i $i.$DATE done for i in `ls $logdir/*error.log`; do mv $i $i.$DATE done kill -s USR1 $pid rm -v $logdir"/access.log."$DATE_OLD*rm -v $logdir"/error.log."$DATE_OLD*
1、分析:
- 将上面的脚本放到crontab中,每小时执行一次(0 ),这样每小时会把当前日志重命名成一个新文件;然后发送USR1这个信号让Nginx 重新生成一个新的日志。(相当于备份日志)
- 将前7天的日志删除;
2、说明:
在没有执行kill -USR1 $pid之前,即便已经对文件执行了mv命令而改变了文件名称,nginx还是会向新命名的文件”*access.log.2016032623”照常写入日志数据的。原因在于:linux系统中,内核是根据文件描述符来找文件的。
3、logrotates:
使用系统自带的logrotates,也可以实现nginx的日志分割,查看其bash源码,发现也是发送USR1这个信号。
猜你喜欢
- 2024-10-10 通过什么方式来读取和监控nginx的日志呢
- 2024-10-10 linux运维之nginx日志之 log_format详解
- 2024-10-10 Nginx 日志自动切割(Centos6.8)(nginx日志切割配置)
- 2024-10-10 nginx - linux上日志分割(nginx日志级别顺序)
- 2024-10-10 练习Nginx定时备份日志及正则配置
- 2024-10-10 nginx启动时报错的日志 端口查看(nginx启动日志在哪儿)
- 2024-09-16 Nginx奇技淫巧之:按日期自动生成日志文件
- 2024-09-16 nginx的日志切割(nginx的日志切割脚本)
- 2024-09-16 ELK日志系统之使用Rsyslog快速方便的收集Nginx日志
- 2024-09-16 nginx 部署的项目查看错误日志并处理
你 发表评论:
欢迎- 最近发表
-
- Linux新手必看:几种方法帮你查看CPU核心数量
- linux基础命令之lscpu命令(linux中ls命令的用法)
- Linux lscpu 命令使用详解(linux常用ls命令)
- 如何查询 Linux 中 CPU 的数量?这几个命令要知道!
- 在linux上怎么查看cpu信息(linux如何查看cpu信息)
- 查看 CPU 的命令和磁盘 IO 的命令
- 如何在CentOS7上改变网卡名(centos怎么改网卡名字)
- 网工必备Linux网络管理命令(网工必备linux网络管理命令是什么)
- Linux 网络命令知多少(linux 网络 命令)
- Linux通过命令行连接wifi的方式(linux命令行连接无线网)
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)