http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
}
将log_format到access_log的注释打开即可,log_format可定义nginx的日志规格。
log_format默认规格参数表
名称 注解
$remote_addr 客户端/用户的IP地址
$time_local 访问时间
$request 请求方式 + 请求地址
$status 请求状态码 与HTTP状态码一致
$body_bytes_sent 请求的地址大小 以bytes格式计算
$http_referer 请求来源,从什么地方访问的
$http_user_agent 用户信息(浏览器信息)
$http_x_forwarded_for 转发IP地址
找到如下内容
error_log
logs/error.log;
#error_log
logs/error.log notice;
#error_log
logs/error.log info;
将注解删除即可,你可以将不同的错误类型分开存储如
error_log
logs/error.log notice;
notice既为错误类型,不写则是全部。
首先要查看nginx错误日志,我们可以用
cat /usr/local/nginx/logs/error.log
一查你就会发现有一大堆数据,看的眼睛都疼,那这时候呢,可以加一个管道命令,然后添加一个查询条件
cat /usr/local/nginx/logs/error.log | grep "$(date +"%Y/%m/%d")"
其中 | 就是一个管道命令,那这个命令里面我们要加的条件是什么呢?那就是查找当天的日志
于是:grep "$(date +"%Y/%m/%d")"
grep 就是查找的意思,然后date指的是当天时间,后面加上一个 +"%Y/%m/%d" 意思就是显示今天的时间有年/月/日的格式,$()这个作用就是,先将括号里面的内容完成,然后在生成一个新的命令行,比如今天日期是 2019/03/04 那执行完那一句的结果就是grep "2019/03/04"
这句执行以后,数据就显示是今天的日志了
今天的错误日志就出现了,但是如果每天都要查看一次,那每次都要打一遍那就很累了,因此就有了shell脚本这个东西。
新建一个文件,就叫做 nginx_error.sh
然后第一行输入 #!/bin/bash (执行bash)
第二行就是注释了
第三行就是获取当天ng的错误日志,并且重定向到root目录里面的nginx.txt
保存文件,然后设置权限,chmod +x nginx.sh (给该脚本设置一个执行权限)
然后 ./nginx.sh 接着就会多出一个nginx.txt。你直接cat nginx.txt。就可以查看当天的错误日志拉nginx访问量统计
1.根据访问IP统计UV
awk '{print $1}'
access.log|sort | uniq -c |wc -l
2.统计访问URL统计PV
awk '{print $7}'
access.log|wc -l
3.查询访问最频繁的URL
awk '{print $7}'
access.log|sort | uniq -c |sort -n -k 1 -r|more
4.查询访问最频繁的IP
awk '{print $1}'
access.log|sort | uniq -c |sort -n -k 1 -r|more
5.根据时间段统计查看日志
cat access.log| sed -n '/14/Mar/2015:21/,/14/Mar/2015:22/p'|more
查找访问频率最高的 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}’
查看实时日志数据流
tail -f access.log | cat -e
或者
tail -f access.log | tr ‘^A’ ‘|’
sed -n '/04/Dec/2015:07:30:53/,/04/Dec/2015:08:30:55/'p access.log | more 查看一段时间的日志
sed -n '/08/Dec/2015:15:48:01/,/08/Dec/2015:15:55:59/p'
access.log > new.log
当前WEB服务器中联接次数最多的ip地址
#netstat -ntu |awk '{print $5}' |sort | uniq -c| sort -nr
查看日志中访问次数最多的前10个IP
#cat access_log |cut -d ' ' -f 1 |sort |uniq -c | sort -nr | awk '{print $0 }' | head -n 10 |less
查看日志中出现100次以上的IP
#cat access_log |cut -d ' ' -f 1 |sort |uniq -c | awk '{if ($1 > 100) print $0}'|sort -nr |less
查看最近访问量最高的文件
#cat access_log |tail -10000|awk '{print $7}'|sort|uniq -c|sort -nr|less
查看日志中访问超过100次的页面
#cat access_log | cut -d ' ' -f 7 | sort |uniq -c | awk '{if ($1 > 100) print $0}' | less
统计某url,一天的访问次数
#cat access_log|grep '12/Aug/2009'|grep '/images/index/e1.gif'|wc|awk '{print $1}'
前五天的访问次数最多的网页
#cat access_log|awk '{print $7}'|uniq -c |sort -n -r|head -20
从日志里查看该ip在干嘛
#cat access_log | grep 218.66.36.119| awk '{print $1"t"$7}' | sort | uniq -c | sort -nr | less
列出传输时间超过 30 秒的文件
#cat access_log|awk '($NF > 30){print $7}' |sort -n|uniq -c|sort -nr|head -20
列出最最耗时的页面(超过60秒的)
#cat access_log |awk '($NF > 60 && $7~/.PHP/){print $7}' |sort -n|uniq -c|sort -nr|head -100
awk '{ print $1}':取数据的低1域(第1列)
sort:对IP部分进行排序。
uniq -c:打印每一重复行出现的次数。(并去掉重复行)
sort -nr -k1:按照重复行出现的次序倒序排列,-k1以第一列为标准排序。
head -n 10:取排在前5位的IP 。
linux 如何显示一个文件的某几行(中间几行)
【一】从第3000行开始,显示1000行。即显示3000~3999行
cat filename | tail -n +3000 | head -n 1000
【二】显示1000行到3000行
cat filename| head -n 3000 | tail -n +1000
*注意两种方法的顺序
分解:
tail -n 1000:显示最后1000行
tail -n +1000:从1000行开始显示,显示1000行以后的
head -n 1000:显示前面1000行