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" }'; 
posted @ 2021-06-19 23:32  向往自由的独行者  阅读(162)  评论(0编辑  收藏  举报