安装准备

基于prometheus监控nginx可选两个exporter,一个是通过nginx_exporter主要是获取nginx-status中的内建的指标,nginx自身提供status信息,较为简单,promethues中对应的metrics也较少。另外一个是可以通过nginx-vts-exporter监控更多的指标,但nginx-vts-exporter依赖在编译nginx的时候添加nginx-module-vts模块来实现。vts提供了访问虚拟主机状态的信息,包含server,upstream以及cache的当前状态,显然指标会更丰富一些。本实践主要是介绍基于prometheus使用nginx-vts-exporter对nginx进行监控。

  • 相关安装文件

https://github.com/vozlt/nginx-module-vts/archive/v0.1.18.tar.gz
https://github.com/hnlq715/nginx-vts-exporter/releases/download/v0.10.3/nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
  • nginx添加nginx-module-vts支持

# cd /opt/nginx-1.19.6
# wget https://github.com/vozlt/nginx-module-vts/archive/v0.1.18.tar.gz  
# tar -zxf v0.1.18.tar.gz
## 重新编译
# ./configure --add-module=nginx-module-vts-0.1.18/
# make
# cp objs/nginx /usr/local/nginx/sbin/nginx
  • 修改nginx.conf

http {
    vhost_traffic_status_zone;
    vhost_traffic_status_filter_by_host on;
    server {
        listen 10011;
        server_name localhost;
    #   vhost_traffic_status off;
        location /nginx_status {
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
    }
}
基于prometheus监控nginx实战_centos

安装nginx-vts-exporter

  • 在nginx服务器安装nginx-vts-exporter

# cd /opt/
# wget https://github.com/hnlq715/nginx-vts-exporter/releases/download/v0.10.3/nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
# tar -zxf nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
# cp nginx-vts-exporter-0.10.3.linux-amd64/nginx-vts-exporter /usr/local/bin
  • 创建service

## 创建service
# vi /usr/lib/systemd/system/nginx-vts-exporter.service
[Unit]
Description=nginx-vts-exporter
Documentation=https://prometheus.io/
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/nginx-vts-exporter \
  -nginx.scrape_timeout 10 \
  -nginx.scrape_uri http://127.0.0.1:10011/nginx_status/format/json
Restart=on-failure
[Install]
WantedBy=multi-user.target
  • 设置自动启动

# systemctl daemon-reload
## 设置自启动
# systemctl enable nginx-vts-exporter
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx-vts-exporter.service to /usr/lib/systemd/system/nginx-vts-exporter.service.

配置nginx-vts-exporter监控

  • 修改prometheus配置文件prometheus.yml,在scrape_configs下增加如下配置

- job_name: 'nginx-hosts'
    file_sd_configs:
      - files: ['/opt/prometheus/sd_config/nginx-hosts.yml']
        refresh_interval: 5s
  • 新增/opt/prometheus/sd_config/docker-hosts.yml文件,内容如下

cat /opt/prometheus/sd_config/nginx-hosts.yml
- targets:
  - 172.22.3.164:9913
  • 重启prometheus

# systemctl restart prometheus
 

浏览器地址栏输入 http://172.22.3.148:9090/targets

基于prometheus监控nginx实战_grafana_02

可以看到targets已经增加了对服务nginx-hosts的监控

  • 在grafana中配置面板显示对主机nginx-hosts监控内容

基于prometheus监控nginx实战_prometheus_03

点“+”按钮,弹出导入面板窗口

基于prometheus监控nginx实战_yml_04

如图输入2949,点Load,grafana会直接从官方网站导入编号为2949的面板如下

基于prometheus监控nginx实战_grafana_05

选择数据源Prometheus,继续“Import”,显示nginx监控界面显示如下

基于prometheus监控nginx实战_yml_06