JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

Nginx 备忘录 - 05. 日志配置

wys521 2024-09-09 12:08:22 精选教程 23 ℃ 0 评论

一、配置日志格式

Syntax:  log_format name 
         [escape=default|json|none] 
         string ...;
Default: log_format combined "...";
Context: http

常用的变量:

  • $remote_addr:客户端 IP 地址
  • $remote_user:客户端用户名称
  • $http_x_forwarded_for:请求头 x_forwarded_for
  • $http_referer:记录从哪个页面链接访问过来的
  • $http_user_agent:记录客户端浏览器相关信息
  • $request:记录请求的 URL 和 HTTP 协议
  • $request_length:请求的总长度,包括请求行、请求头和请求正文
  • $request_time:请求处理时间,单位为秒,精度毫秒
  • $time_iso8601:ISO8601 标准格式下的本地时间
  • $time_local:通用日志格式下的本地时间
  • $status:记录请求状态码
  • $body_bytes_sent:发送给客户端的字节数,不包括响应头的大小
  • $bytes_sent:发送给客户端的总字节数
log_format main 
'$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';

二、日志文件描述符缓存

定义一个缓存,用于存储名称包含变量的常用日志的文件描述符。

Syntax:  open_log_file_cache max=N 
         [inactive=time] [min_uses=N] 
         [valid=time];
         open_log_file_cache off;
Default: open_log_file_cache off;
Context: http, server, location
  • max:设置缓存中的文件描述符的最大数量,如果缓存被占满,采用 LRU 算法将文件描述符关闭。
  • inactive:设置缓存描述符关闭的时间(如果在此时间内没有访问);默认为 10 秒。
  • min_uses:在 inactive 参数定义的时间内设置文件使用的最小数量,以使描述符在缓存中保持打开状态; 默认情况下为 1。
  • valid:设置检查文件是否仍存在同名文件的时间;默认情况下为 60 秒。
  • off:禁用缓存。
open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;

三、访问日志配置

Syntax:	 access_log path [format 
         [buffer=size] [gzip[=level]] 
         [flush=time] [if=condition]];
         access_log off;
Default: access_log logs/access.log combined;
Context: http, server, location, 
         if in location, limit_except
  • path:访问日志的存放位置。
  • format:日志的格式。默认使用预定义的 combined。
  • buffer:日志写入时的缓存大小。默认是 64k。
  • flush:将缓存中的日志写入磁盘的周期。
  • gzip:开启日志压缩。压缩率可以指定,从 1 到 9 数值越大压缩比越高速度越慢。默认是 1。
  • if:条件判断。如果指定的条件计算为 0 或空字符串,那么该请求不会写入日志。
  • off:关闭访问日志。
# 设置访问日志位置、使用自定义日志格式 main
access_log /opt/nginx/logs/server-80.log main;

# 设置日志缓存与刷盘时间
access_log /opt/nginx/logs/server-80.log main buffer=64k flush=1s;

四、错误日志

Syntax:	 error_log file [level];
Default: error_log logs/error.log error;
Context: main, http, mail, stream, server, location
  • file:错误日志的位置。
  • level:日志的级别,debug, info, notice, warn, error, crit, alert, emerg。

五、日志分割

1. 通过 shell 脚本的方式

#!/bin/bash
# 日志路径
LOG_PATH="/opt/nginx/logs"

# 生成一个时间的字符串
RECORD_TIME=$(date -d "yesterday" +%Y-%m-%d-%H-%M-%S)

# nginx 的 PID
PID=/opt/nginx/logs/nginx.pid

# 移动文件
mv ${LOG_PATH}/access.log ${LOG_PATH}/access.${RECORD_TIME}.log
mv ${LOG_PATH}/error.log ${LOG_PATH}/error.${RECORD_TIME}.log

# 向 Nginx 主进程发送 USR1 信号,
# 用于重新打开日志文件
kill -USR1 `cat $PID`

设置定时任务:

# 设置脚步可执行权限
$ chmod +x cut_nginx_log.sh

# 使用 crontab 设置定时任务
$ crontab -e
0 0 * * * /opt/nginx/sbin/cut_nginx_log.sh

2. 使用 linux logrotate 工具

主流 Linux 发行版上都默认安装有 logrotate 包,如果没有通过 yum 安装即可。

logrotate 配置文件位置:

  • /etc/logrotate.conf 全局配置,通用配置放这里。
  • /etc/logrotate.d/ 独立配置,针对不同服务的配置放这里,如 nginx。

常见 nginx 日志归档规则:

$ vim /etc/logrotate.d/nginx

/opt/nginx/logs/*.log {
  create 0644 nobody root
  daily
  rotate 30
  dateext
  olddir /opt/nginx/logs
  missingok
  notifempty
  compress
  delaycompress
  sharedscripts
  postrotate
    /bin/kill -USR1 `cat /opt/nginx/logs/nginx.pid` 2>/dev/null || true
  endscript
}
  • create:创建新的日志文件时的权限和属主属组。
  • daily: 每天进行一次轮转。
  • rotate: 保留的轮转后的日志文件副本数量。
  • dateext:轮转后的日志文件后缀格式为 YYYYMMDD。
  • olddir:归档的日志存放目录。
  • missingok: 如果日志文件不存在,不报错,继续滚动下一个日志。
  • notifempty: 如果日志文件为空,则不轮转。
  • compress:通过 gzip 压缩转储后的日志。
  • delaycompress: 转储的日志文件到下一次转储时再压缩,与 compress 配合使用。
  • sharedscripts: 所有日志文件都转储完成后,统一执行一次脚本。
  • postrotate 和 endscript: 这两个选项之间的内容是在日志文件轮转后执行的命令。
# 检查配置的正确性
logrotate -d /etc/logrotate.d/nginx

# 强制轮转
logrotate -f /etc/logrotate.d/nginx

在大多数 Linux 发行版中,Logrotate 的 Cron 作业已经预先配置好了。通常,这个作业被设置为每天运行一次。你可以在 /etc/cron.daily/ 目录中找到名为 "logrotate" 的脚本。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表