温馨提示×

nginx日志如何分析留存

小樊
36
2026-10-23 04:16:32
栏目: 编程语言

下面按「nginx 日志怎么留、留什么、怎么分析、怎么存、怎么清理」几方面系统讲一下 nginx 日志分析与留存。


一、nginx 日志类型

nginx 常见日志有两类:

  1. access log(访问日志)
access_log /var/log/nginx/access.log main;

记录每次请求:IP、时间、URL、状态码、UA、耗时等。

  1. error log(错误日志)
error_log /var/log/nginx/error.log warn;

记录 nginx 自身错误、 upstream 错误、配置问题。


二、留存前:先定义“要留什么”

1. 日志格式建议(关键信息不能少)

log_format main '$remote_addr - $remote_user [$time_local] '
                '"$request" $status $body_bytes_sent '
                '"$http_referer" "$http_user_agent" '
                '$request_time $upstream_response_time';

重点字段:

  • $remote_addr:客户端 IP
  • $request_time:总耗时
  • $upstream_response_time:后端耗时
  • $status:状态码

三、日志分析(实时 / 离线)

1. 命令行快速分析

# Top IP
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head

# 状态码统计
awk '{print $9}' access.log | sort | uniq -c

# 慢请求
awk '$NF>1.0 {print}' access.log

2. 可视化分析(推荐)

常用方案:

  • ELK / EFK
    • Filebeat 采集
    • Elasticsearch 存储
    • Kibana 看板
  • Loki + Grafana
    • 轻量,适合日志为主
  • ClickHouse + 自研
    • 超大规模访问日志

四、日志留存策略(很重要)

1. 本地留存(短期)

使用 logrotate:

/var/log/nginx/*.log {
    daily
    rotate 30
    compress
    missingok
    notifempty
    sharedscripts
    postrotate
        kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

✅ 保留 30 天,压缩,自动切割


2. 长期留存(合规 / 审计)

  • 重要业务:留存 6 个月~1 年
  • 方法:
    • 定期同步到对象存储(S3 / OSS)
    • 或写入数据仓库(ClickHouse / Hive)

五、隐私与合规建议

  • 不要长期存明文敏感信息
    • 登录接口、手机号、token
  • 可:
    • 脱敏 IP(如只留前两段)
    • 关闭某些接口 access log
location /api/login {
    access_log off;
}

六、常见坑

❌ 日志不切割 → 磁盘爆
❌ error_log 级别太低(debug)
❌ 长期本地不清理
❌ 只存不分析(日志价值 = 分析)


七、总结一句话

nginx 日志留存 = 合理格式 + 切割压缩 + 集中存储 + 定期分析 + 合规脱敏

如果你愿意,我可以:

  • 帮你写一套 nginx + Loki/Grafana 方案
  • 或给你一个 日志分析 dashboard 示例
  • 或针对你业务规模给留存周期建议

0 踩