插件窝 干货文章 Nginx配置Prometheus监控的实现

Nginx配置Prometheus监控的实现

Nginx Prometheus Exporter 监控 446    来源:    2025-04-01

Nginx配置Prometheus监控的实现方案

Prometheus是一款强大的开源监控系统,结合Nginx可以有效地监控Web服务器的性能指标。以下是实现Nginx监控的详细配置方案:

一、Nginx监控指标暴露

1. 使用Nginx stub_status模块

Nginx自带的stub_status模块可以暴露基本的状态信息:

server {
    listen 8080;
    server_name localhost;

    location /nginx_status {
        stub_status on;
        access_log off;
        allow 127.0.0.1;
        deny all;
    }
}

访问http://localhost:8080/nginx_status会返回类似:

Active connections: 2 
server accepts handled requests
 10 10 20 
Reading: 0 Writing: 1 Waiting: 1 

2. 使用Nginx Prometheus Exporter

更推荐使用专门的Nginx Prometheus Exporter来暴露更丰富的指标:

  1. 下载并安装nginx-prometheus-exporter:
wget https://github.com/nginxinc/nginx-prometheus-exporter/releases/download/v0.11.0/nginx-prometheus-exporter_0.11.0_linux_amd64.tar.gz
tar -xzf nginx-prometheus-exporter_*.tar.gz
./nginx-prometheus-exporter -nginx.scrape-uri=http://localhost:8080/nginx_status
  1. 默认会在9113端口暴露指标,可通过http://localhost:9113/metrics访问

二、Prometheus配置

在Prometheus的配置文件中添加Nginx监控任务:

scrape_configs:
  - job_name: 'nginx'
    static_configs:
      - targets: ['nginx-exporter:9113']
        labels:
          instance: 'production-nginx'

三、高级监控配置

1. 监控Nginx Plus

如果是Nginx Plus,可以使用更丰富的API:

server {
    location /api {
        api write=on;
    }

    location = /dashboard.html {
        root /usr/share/nginx/html;
    }
}

然后配置exporter使用API端点:

./nginx-prometheus-exporter -nginx.plus -nginx.scrape-uri=http://localhost:8080/api

2. 监控自定义指标

可以通过Nginx的日志和Prometheus的Pushgateway或Grafana Loki来收集自定义指标:

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

server {
    access_log /var/log/nginx/prometheus.log prometheus;
}

四、Grafana仪表板配置

  1. 导入Nginx监控仪表板(如ID 12708)
  2. 配置数据源为Prometheus
  3. 关键指标建议监控:
    • 请求率
    • 错误率(4xx, 5xx)
    • 响应时间
    • 活跃连接数
    • 请求处理速率

五、安全注意事项

  1. 限制对监控端点的访问:
location /metrics {
    allow 192.168.1.0/24;
    allow 127.0.0.1;
    deny all;
}
  1. 考虑使用TLS加密和基本认证保护端点

六、Kubernetes中的部署

如果是Kubernetes环境,可以使用以下配置:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-exporter
spec:
  template:
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
      - name: exporter
        image: nginx/nginx-prometheus-exporter:latest
        args:
          - -nginx.scrape-uri=http://localhost:8080/nginx_status
        ports:
        - containerPort: 9113

通过以上配置,您可以建立一个完整的Nginx监控系统,实时掌握Web服务器的运行状态和性能指标。