WEB服务与NGINX(13)-NGINX的日志功能
1.nginx的日志功能
定义nginx的访问日志显示的格式,即具体记录的客户端信息和格式。日志功能由ngx_http_log_module模块提供。
-
log_format name string ...;
环境:http
指定配置日志格式,
name:为日志格式定义一个名称,用于调用;
string:用于定义日志具体格式,可以使用nginx核心模块及其它模块内嵌的变量;
-
access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
环境:http、server、location、if in location、limit_except
访问日志文件路径,格式及相关的缓冲的配置,服务器跑多个虚拟机时,建议日志分开存放;
可以为某一个server或目录指定一个专门的访问日志文件,也可以关闭某些页面的访问日志,例如关闭状态页访问日志;
access_log off:表示关闭日志
path:日志文件路径
format: log_format中定义的日志格式名称
buffer=size :日志缓冲区大小,启用后日志文件中当时可能看不到,过一会写入后才可以显示
flush=time:buffer多久写入一次
gizip:压缩,要使gzip压缩工作,必须使用zlib库构建nginx
-
open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
环境:http, server, location
定义一个缓存,该缓存存储经常使用的日志的文件描述符,有助于加速读取日志。
参数
max:缓存的最大文件描述符数量,超出后关闭最小最近使用(LRU)描述符
min_uses:在inactive指定的时长内访问大于等于此值方可被当作活动项,默认为1
inactive:非活动时长,默认10s
valid:验证缓存中各缓存项是否为活动项的时间间隔,默认60s
off:禁用缓存
使用示例如下:
#1.定义常见的日志格式
[root@nginx01 web1]# vim /etc/nginx/nginx.conf
error_log /var/log/nginx/error.log notice;
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
log_format combined1 '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" ';
access_log /var/log/nginx/access.log main;
include /etc/nginx/conf.d/*.conf;
}
#2.在不同的location下调用日志
[root@nginx01 web1]# vim /etc/nginx/conf.d/virtualhost.conf
server {
listen 80;
server_name www.nginx01.com;
charset utf-8,gbk;
location / {
root /data/nginx/html/web1;
index index.html;
}
location /image {
root /data/nginx/html/web1/;
allow 172.0.0.1;
allow 192.168.20.0/24;
deny all;
access_log /var/log/nginx/access_image.log combined1;
}
location ~* /(admin|login) {
root /data/nginx/html/web1;
auth_basic "please login!";
auth_basic_user_file /etc/nginx/.nginxuser;
access_log off;
}
}
#3.重启nginx服务
[root@nginx01 web1]# systemctl reload nginx.service
#4.客户端访问后查看日志内容
[root@xuzhichao ~]# curl http://www.nginx01.com
www.nginx01.com
[root@xuzhichao ~]# curl http://www.nginx01.com/image/
image doc
[root@xuzhichao ~]# curl --user user1:123456 http://www.nginx01.com/admin/
admin area
[root@nginx01 ~]# tail -f /var/log/nginx/access.log
192.168.20.17 - - [17/Jun/2021:18:11:45 +0800] "GET /image/ HTTP/1.1" 200 31 "-" "curl/7.29.0" "-"
[root@nginx01 ~]# tail -f /var/log/nginx/access_image.log
192.168.20.17 - - [17/Jun/2021:18:12:33 +0800] "GET /image/ HTTP/1.1" 200 10 "-" "curl/7.29.0"
nginx的默认访问日志记录的内容相对比较单一,默认的格式也不方便后期做日志统计分析,生产环境中通常将nginx日志转换成json格式,然后配合ELK做日志收集,统计,分析。例如:
log_format access_json '{ "@timestamp": "$time_iso8601", '
'"remote_addr": "$remote_addr", '
'"referer": "$http_referer", '
'"request": "$request", '
'"status": $status, '
'"bytes":$body_bytes_sent, '
'"agent": "$http_user_agent", '
'"x_forwarded": "$http_x_forwarded_for", '
'"upstr_addr": "$upstream_addr",'
'"upstr_host": "$upstream_http_host",'
'"upstreamtime": "$upstream_response_time" }';