nginx 日志介绍
nginx总共有两种日志 一种是access_log 另一种是 error_log 前者是访问日志,后者是错误日志。
1 错误日志
error-log 日志 开启的方式通过 error_log 开启,是不能指定格式的
# 指定错误日志的路径和日志级别,此指令可以在[全局块、http块、server块以及location块中]配置。
# 其中debug级别的日志需要编译时使用--with-debug开启debug开关
#日志级别依次为:debug | info | notice | warn | error | crit | alert | emerg
# error_log [path] [debug | info | notice | warn | error | crit | alert | emerg]
# error_log logs/error.log notice;
# error_log logs/error.log info;
error_log /var/log/nginx/error.log info;
2 访问日志
access.log 可以通过 log_format来指定格式
# access_log配置,此指令可以在[http块、server块或者location块]中进行设置(可配置范围)
# 在全局块中,我们介绍过errer_log指令,其用于配置Nginx进程运行时的日志存放和级别
# 此处所指的日志与常规的不同,它是指记录Nginx服务器提供服务过程应答前端请求的日志
# access_log path [format [buffer=size]]
# 如果你要关闭access_log,你可以使用下面的命令
# access_log off;
# log_format指令,用于定义日志格式,此指令只能在http块中进行配置
#日志格式设定
#$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;
#$remote_user:用来记录客户端用户名称;
#$time_local: 用来记录访问时间与时区;
#$request: 用来记录请求的url与http协议;
#$status: 用来记录请求状态;成功是200,
#$body_bytes_sent :记录发送给客户端文件主体内容大小;
#$http_referer:用来记录从那个页面链接访问过来的;
#$http_user_agent:记录客户浏览器的相关信息;
#$server_name:虚拟主机名称
#$upstream_addr:upstream的地址,即真正提供服务的主机地址。
#$request_time:整个请求的总时间。
#$upstream_response_time:请求过程中,upstream的响应时间。
#通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。
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;
access_log /usr/local/nginx/logs/host.access.log main;
access_log /usr/local/nginx/logs/host.access.404.log log404;
#第三个参数是日志文件所使用的缓存
access_log on | off #控制访问日志的开关
access_log /usr/local/nginx/logs/host.access.log main buffer=64k;
对于配置在不同模块日志记录的时机:
http : 只要有请求通过 http 协议访问该 Nginx,就会有日志信息写入到这里的日志文件。
server:只要有请求访问当前 Server,就会有日志信息写入到这里的日志文件。
location:只要有请求访问当前 location,就会有日志信息写入到这里的日志文件。
open_log_file_cache指令
该指令用于打开日志文件读缓存,将日志信息读取到缓存中,以加快对日志的访问。该功能默认为 off,即 open_log_file_cache off;
open_log_file_cache max=1000 inactive=10s min_users=2 valid=60s
日志自动切割
1) 创建切割日志 shell 脚本文件
在 Linux 下创建一个实现日志切割的 shell 脚本文件,脚本文件的具体内容可以从网上查找,资源很多。例如,将该 shell 文件创建在 Nginx 安装目录下的 logs 目录中,并命名为cutting-log.sh。
vim cutting-log.sh
编写shell脚本
#!/bin/bash
##前一天时间
d=$(date -d "-1 day" "+%Y%m%d")
###自己创建的nginx日志存放目录
logs_path="/usr/local/nginx/log/"
##如果没有这个文件,则创建
[ -d $logs_path ] || mkdir -p $logs_path
##将nginx访问日志移动到自建的日志存放目录
mv /usr/local/nginx/log/access.log ${logs_path}/access.log-$d
chmod u+x cutting-log.sh
# 每天23点59分执行日志切割
crontab -e
59 23 * * * /usr/local/nginx/log/cutting-log.sh #定时切割日志文件
goAccess可视化监控
官方网站
1 安装
#安装依赖
yum install libmaxminddb-devel.x86_64
yum install libmaxminddb
yum install ncurses-devel
#编译中间文件
./configure --prefix=/env/liyong/install --enable-utf8 --enable-geoip=mmdb
curl -O https://tar.goaccess.io/goaccess-1.8.tar.gz
make && make install
缺少依赖可以去看这个issue
安装好以后有三个目录:
2 生成报告
goaccess access.log -o ../html/report.html --time-format='%H:%M:%S' --date-format='%d/%b/%Y' --log-format=COMBINED --real-time-html #生成报告 --real-time-html 指定了生成实时的报告
#将报告的路径映射出去
location /report.html {
alias /env/liyong/install/openresty/nginx/html/report.html;
}
访问:http://111.229.199.8:8099/report.html
在访问report.html的时候会连接socket7890端口,然后推送最新的access.log的变化,这里使用云服务器的伙伴们要注意啦,需要开放这个端口,否则是不会实时更新数据的。
3 自定义日志格式
上面我们指定的 --log-format=COMBINED 是nginx默认的日志格式,如果我们修改过nginx的日志格式那么我们要自定义日志。这部分不花时间等用到了再去研究吧。
可以参考这篇文章
参考资料
极客时间 nginx