在很多时候俺们需要在页面上实时查看nginx的日志输出,查看访问量及详细访问数据,并且能在页面上显示,下面是在浏览器上实时动态的查看nginx的访问日志和访问量的方法。
首先启用nginx_status,了解nginx的状态以及监控nginx非常有帮助。
浏览器访问nginx_status
在nginx.conf文件server下的443端口下添加:
location /nginx_status { #开启nginx_status stub_status on; access_log off; #IP白名单,也就是指定IP才能访问,否则403,要想所有人可以查看,删除下面的内容就行了 allow 213.48.168.47; allow 2801:15f0:7001:4b29:54a0:0g4ff:fe76:0hbc; allow 127.0.0.1; deny all; }
重启nginx后打开主站域名后面添加/nginx_status
就可以显示访问数据了,当然只有你指定的IP才能查看,例如:https://1kb.day/nginx_status 效果看图:
访问数据详解:
active connections – 活跃的连接数量
server accepts handled requests — 总共处理了98个连接 , 成功创建98次握手, 总共处理了132个请求
reading — 读取客户端的连接数.
writing — 响应数据到客户端的数量
waiting — 开启 keep-alive 的情况下,这个值等于 active – (reading+writing), 意思就是 nginx 已经处理完正在等候下一次请求指令的驻留连接.
浏览器访问log日志
首先,查看access.log文件路径,命令:
find -name access.log
输出,文件路径在/var/log/nginx/access.log
./var/log/nginx/access.log ./root/access.log
然后在nginx.conf文件的http段,添加如下:
#日志输出格式 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 /var/log/nginx/access.log main buffer=32k flush=1m; #错误日志和日志级别,debug | info | notice | warn | error | crit | alert | emerg级别从低到高,默认是error error_log /var/log/nginx/error.log crit;
设置完后可以在服务器里cat查看,但是每次登陆查看太麻烦了,下面设置可以在浏览里查看。
在nginx.conf文件server下的443端口下添加:
location /nginx_log { #日志在浏览器以txt格式显示,删除下面这行则直接下载log文件 default_type text/plain; #开启和美化autoindex,这个在前面博文有教程,当然不添加下面一行,也能访问,就是丑点 add_after_body /autoindex.html; #开启autoindex autoindex on; autoindex_exact_size off; autoindex_localtime on; #log文件路径 alias /var/log/nginx/; #IP白名单,也就是指定IP才能访问,否则403,防止别人看到数据 allow 213.48.168.47; allow 2801:15f0:7001:4b29:54a0:0g4ff:fe76:0hbc; allow 127.0.0.1; deny all; }
美化autoindex:https://1kb.day/posts/nginx_autoindex.html
这个不美化也没关系,就是丑点。
重启nginx后打开主站域名后面添加/nginx_log
就可以显示访问日志了,当然只有你指定的IP才能查看,例如:https://1kb.day/nginx_log 效果看图:
清理日志命令
> /var/log/nginx/access.log
> /var/log/nginx/error.log
日志切割和自动删除
下面方法二选一
脚本自动切割和删除
由于长时间的运行,日志文件会日益增大,所以写了个脚本每天切割日志文件并自动删除十天前的日志文件。
新建脚本文件 vi /usr/sbin/cutlog.sh
输入下面内容:
#!/bin/bash #nginx日志文件所在的目录 LOGS_PATH=/var/log/nginx/ #获取昨天的 yyyy-MM-dd YESTERDAY=$(date -d "yesterday" +%Y-%m-%d) #移动旧日志 mv ${LOGS_PATH}access.log ${LOGS_PATH}access_${YESTERDAY}.log mv ${LOGS_PATH}error.log ${LOGS_PATH}error_${YESTERDAY}.log #向nginx主进程发送USR1信号。USR1信号是重新打开日志文件 kill -USR1 $(cat /var/run/nginx.pid) #找到10天前的日志文件进行删除 find ${LOGS_PATH} -mtime +10 -name "*.log" -exec rm -rf {} \; > /dev/null 2>&1
使用命令 crontab -e
添加下面内容,建立定时任务,每天零点执行上面脚本。
0 0 * * * /bin/bash /usr/sbin/cutlog.sh
使用logrotate管理日志文件
安装logrotate,一般Linux发行版上都默认安装有logrotate包,如果没有可使用apt安装
apt install logrotate cron
新建nginx文件
vi /etc/logrotate.d/nginx
输入以下内容
/var/log/nginx/*log { create 0644 nginx nginx #以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件 daily #日志文件将按日轮循。其它可用值为'daily','weekly'或者'yearly' rotate 10 #一次将存储10个归档日志。对于第11个归档,时间最久的归档将被删除 missingok #在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误 notifempty #如果日志文件为空,轮循不会进行 compress #在轮循任务完成后,已轮循的归档将使用gzip进行压缩 dateext #使用当期日期作为命名格式 sharedscripts #在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行 postrotate /bin/kill -USR1 `cat /var/run/nginx.pid 2>/dev/null` 2>/dev/null || true endscript }
完成后检查,执行logrotate
logrotate -d /etc/logrotate.d/nginx
logrotate -f /etc/logrotate.d/nginx
修改crontab定时时间服务
vi /etc/crontab
修改下面一行,定时时间为6:25,你可改为你想要的时间
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
然后重启crontab服务
/etc/init.d/cron restart
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2303805254@qq.com,本站将立刻删除。