在生产环境下,您已经部署了 Prometheus 和 Grafana,并希望通过它们来监控另一台 Ubuntu 20.04 上的 Nginx 服务。以下是配置步骤:
1. 安装和配置 nginx-exporter
(Nginx 的 Prometheus 导出器)
nginx-exporter
是 Prometheus 用来从 Nginx 收集指标的组件。
安装步骤:
-
在目标 Ubuntu 20.04 服务器上安装
nginx-exporter
:- 您可以使用官方的 Go 程序编译,或者直接下载预编译的二进制文件:
wget https://github.com/nginxinc/nginx-prometheus-exporter/releases/download/v0.10.0/nginx-prometheus-exporter_0.10.0_linux_amd64.tar.gz tar -xzvf nginx-prometheus-exporter_0.10.0_linux_amd64.tar.gz sudo mv nginx-prometheus-exporter /usr/local/bin/
- 您可以使用官方的 Go 程序编译,或者直接下载预编译的二进制文件:
-
配置
nginx-exporter
:- 假设您的 Nginx 的状态页在
http://localhost:8080/status
(这个 URL 需要在 Nginx 配置中开启并允许 Prometheus 访问),启动nginx-exporter
:nginx-prometheus-exporter -nginx.scrape-uri=http://localhost:8080/status
- 假设您的 Nginx 的状态页在
-
配置为服务(可选):
- 为了保证
nginx-exporter
能在系统重启后自动启动,您可以将其配置为系统服务:sudo tee /etc/systemd/system/nginx-prometheus-exporter.service > /dev/null <<EOL [Unit] Description=Nginx Prometheus Exporter After=network.target[Service] User=nobody ExecStart=/usr/local/bin/nginx-prometheus-exporter -nginx.scrape-uri=http://localhost:8080/status Restart=always[Install] WantedBy=multi-user.target EOLsudo systemctl daemon-reload sudo systemctl start nginx-prometheus-exporter sudo systemctl enable nginx-prometheus-exporter
- 为了保证
2. 配置 Prometheus 来抓取 Nginx 的指标
在 Prometheus 的配置文件中(通常为 prometheus.yml
),添加 Nginx 的目标:
scrape_configs:- job_name: 'nginx'static_configs:- targets: ['<Nginx_Server_IP>:9113']
- 这里
<Nginx_Server_IP>
是您 Ubuntu 服务器的 IP 地址。 9113
是nginx-exporter
默认暴露的端口。
3. 在 Grafana 中创建 Nginx 的仪表盘
- 进入 Grafana,添加 Prometheus 数据源。
- 导入 Nginx 的现有仪表盘模板或创建自定义仪表盘:
- 您可以在 Grafana 官方模板库中找到 Nginx 的仪表盘模板(例如,Dashboard ID:11199 )。
- 设置数据源为您在 Prometheus 中配置的 Nginx 监控源,保存并应用。
4. 验证配置
- 确保在 Grafana 中能看到 Nginx 的相关监控数据。如果没有数据,检查以下内容:
- Nginx 状态页是否可以被
nginx-exporter
访问。 - Prometheus 是否可以正确抓取
nginx-exporter
的数据。 - Grafana 中的数据源配置是否正确。
- Nginx 状态页是否可以被
5. 其他优化和安全设置
- 您可以在生产环境中考虑使用认证或限制 IP 来保护 Nginx 状态页。
- 优化 Prometheus 抓取间隔,避免对服务器造成过大压力。
通过以上步骤,您应该能够成功在生产环境下使用 Prometheus 和 Grafana 监控 Nginx。
好的,下面我会具体举例说明如何配置 Nginx 的状态页并允许 Prometheus 访问,以便启动 nginx-exporter
。
1. 配置 Nginx 的状态页
首先,您需要在 Nginx 中启用状态页。可以通过在 Nginx 配置文件中添加 stub_status
模块来实现。
例子:配置 Nginx 的状态页
-
打开 Nginx 的主配置文件,通常位于
/etc/nginx/nginx.conf
或者/etc/nginx/sites-available/default
。 -
在配置文件中添加一个新的 location 块,用于暴露 Nginx 的状态信息。假设您要在
localhost:8080/status
暴露状态页,配置如下:server {listen 8080;location /status {stub_status;allow 127.0.0.1; # 仅允许本地访问deny all; # 拒绝其他所有访问} }
stub_status
指令启用 Nginx 的基本状态信息。allow 127.0.0.1; deny all;
配置限制只有本地可以访问状态页,您可以根据需要修改允许访问的 IP。
-
保存配置文件后,重新加载 Nginx 服务以应用配置:
sudo systemctl reload nginx
-
测试配置是否生效,访问
http://localhost:8080/status
:curl http://localhost:8080/status
预期输出应类似于:
Active connections: 1 server accepts handled requests10 10 10 Reading: 0 Writing: 1 Waiting: 0
2. 启动 nginx-exporter
配置好 Nginx 的状态页后,接下来就是启动 nginx-exporter
。
例子:启动 nginx-exporter
假设您的 nginx-exporter
已经安装在 /usr/local/bin/
路径下,可以通过以下命令启动:
nginx-prometheus-exporter -nginx.scrape-uri=http://localhost:8080/status
这个命令告诉 nginx-exporter
从 http://localhost:8080/status
获取 Nginx 的状态信息并转换为 Prometheus 可识别的格式。
配置 nginx-exporter
为系统服务(可选)
为了确保 nginx-exporter
在系统重启后自动运行,可以将其配置为系统服务:
-
创建一个新的 systemd 服务文件:
sudo nano /etc/systemd/system/nginx-prometheus-exporter.service
-
将以下内容复制到服务文件中:
[Unit] Description=Nginx Prometheus Exporter After=network.target[Service] User=nobody ExecStart=/usr/local/bin/nginx-prometheus-exporter -nginx.scrape-uri=http://localhost:8080/status Restart=always[Install] WantedBy=multi-user.target
-
保存并退出编辑器。
-
重新加载 systemd 并启动
nginx-exporter
服务:sudo systemctl daemon-reload sudo systemctl start nginx-prometheus-exporter sudo systemctl enable nginx-prometheus-exporter
3. 验证 nginx-exporter
工作情况
您可以通过访问 http://<Nginx_Server_IP>:9113/metrics
来检查 nginx-exporter
是否正常工作。访问时应看到 Prometheus 格式的指标数据。
通过以上步骤,您的 nginx-exporter
应该已经正确配置并在工作了,Prometheus 也可以开始抓取 Nginx 的监控数据了。