Nginx Proxy Manager (NPM) 主要产生以下几类日志:
/data/logs/proxy_host-*.log
/data/logs/error.log
/data/logs/manager.log
/data/logs/letsencrypt.log
# 查看实时访问日志
tail -f /data/logs/proxy_host-*.log
# 查看错误日志
tail -f /data/logs/error.log
# 统计HTTP状态码
grep -o '" [0-9][0-9][0-9] ' /data/logs/proxy_host-*.log | sort | uniq -c | sort -rn
# 统计访问量最高的IP
awk '{print $1}' /data/logs/proxy_host-*.log | sort | uniq -c | sort -rn | head -20
# 统计访问量最高的URL
awk -F\" '{print $2}' /data/logs/proxy_host-*.log | awk '{print $2}' | sort | uniq -c | sort -rn | head -20
# 查找错误请求
grep -E ' 50[0-9] ' /data/logs/proxy_host-*.log
配置步骤: 1. 安装ELK Stack 2. 配置Logstash处理NPM日志:
input {
file {
path => "/data/logs/proxy_host-*.log"
type => "nginx-access"
}
file {
path => "/data/logs/error.log"
type => "nginx-error"
}
}
filter {
if [type] == "nginx-access" {
grok {
match => { "message" => "%{IPORHOST:remote_ip} - %{DATA:user_name} \[%{HTTPDATE:access_time}\] \"%{WORD:http_method} %{DATA:url} HTTP/%{NUMBER:http_version}\" %{NUMBER:response_code} %{NUMBER:body_sent_bytes} \"%{DATA:referrer}\" \"%{DATA:user_agent}\"" }
}
date {
match => [ "access_time", "dd/MMM/YYYY:HH:mm:ss Z" ]
}
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "nginx-logs-%{+YYYY.MM.dd}"
}
}
配置步骤: 1. 安装Prometheus和Grafana 2. 使用nginx_exporter或prometheus-nginx-exporter收集指标 3. 导入Nginx Grafana仪表板(如ID 12708)
# 安装GoAccess
apt-get install goaccess
# 生成HTML报告
goaccess /data/logs/proxy_host-*.log -o /path/to/report.html --log-format=COMBINED
检查: - 后端服务是否运行 - NPM到后端服务的网络连接 - 后端服务是否响应超时
检查:
- /data/logs/letsencrypt.log
中的错误信息
- 域名解析是否正确
- 防火墙是否阻止ACME挑战请求
解决方案:
- 启用NPM的缓存功能
- 调整client_max_body_size
等参数
- 考虑升级服务器资源
在Docker环境中,可以通过修改docker-compose.yml
添加日志轮转:
services:
app:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
通过以上方案,您可以全面监控和分析Nginx Proxy Manager的运行状态,及时发现并解决问题。