debian

如何提高Debian Nginx日志可读性

小樊
35
2025-12-22 09:02:24
栏目: 智能运维

提升可读性的总体思路

一 优化日志格式与字段

http {
  log_format main_ext '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for" '
                    'rt=$request_time u_rt=$upstream_response_time u_addr=$upstream_addr';

  access_log /var/log/nginx/access.log main_ext buffer=32k flush=5m;
  error_log  /var/log/nginx/error.log warn;
}
log_format json escape=json
  '{ "@timestamp":"$time_iso8601","client":"$remote_addr","method":"$request_method",'
  '"uri":"$uri","status":$status,"size":$body_bytes_sent,'
  '"referer":"$http_referer","ua":"$http_user_agent",'
  '"rt":$request_time,"u_rt":$upstream_response_time,"u_addr":"$upstream_addr" }';
sudo nginx -t && sudo systemctl reload nginx

说明:

二 减少噪音与按条件记录

location ~* \.(jpg|jpeg|png|gif|css|js|ico|svg)$ {
  access_log off;
}
# 按状态码过滤
map $status $loggable {
  ~^[23]  0;
  default 1;
}

# 按耗时过滤(单位:秒)
map $request_time $slow {
  default 0;
  ~^[0-9.]*$ $1;
}
map $slow $really_slow {
  default 0;
  >1     1;
}

access_log /var/log/nginx/access.log main_ext if=$loggable;
access_log /var/log/nginx/slow.log main_ext if=$really_slow;

说明:access_logif条件与map结合,可灵活控制记录粒度,显著提升关键日志可读性。

三 提升检索与可视化效率

四 日志轮转与权限安全

/var/log/nginx/*.log {
  daily
  rotate 30
  compress
  delaycompress
  missingok
  notifempty
  create 0640 www-data adm
  sharedscripts
  postrotate
    if [ -f /var/run/nginx.pid ]; then
      kill -USR1 $(cat /var/run/nginx.pid)
    fi
  endscript
}

0
看了该问题的人还看了