title: 2.3.监控tengine(新增)
order: 9
icon: lightbulb
一、环境
主机名 | IP地址 | 系统 | 说明 |
localhost | 192.168.11.61 | Ubuntu 20.04 | docker安装的prometheus |
test | 192.168.11.62 | Ubuntu 20.04 | tengine 2.4.0 |
1、环境准备
docker安装
略
docker-compose安装
略
2、安装tengine
a、docker安装tengine带nginx-module-vts模块(二选一)
mkdir /data/ -p
cd /data/
通过git clone下载已经创建好的docker-compose.yaml文件
git clone https://gitee.com/linge365/docker-compose.git
运行
- 带了nginx-module-vts模块
cd docker-compose/tengine
docker-compose up -d
检查
docker ps
STATUS列为up 为正常
b、编译安装的tengine安装nginx-module-vts模块(二选一)
如果tengine是自行编译安装的,安装nginx-module-vts模块,如下:
#下载nginx-module-vts插件
cd /usr/local/src/
git clone git://github.com/vozlt/nginx-module-vts.git
重新编译nginx,指定nginx-module-vts目录
注:
- 编译前记得备份原来的tengine目录。
cd /usr/local/src/tengine-2.4.0 #进入到tengine源码目录
./configure ... --add-module=/usr/local/src/nginx-module-vts
make
make install
二、监控tengine
tengine开启status(docker安装的tengine)
注:
- 监控tengine我将使用第三方nginx-module-vts模块。
检查是否安装有nginx-module-vts模块,nginx-module-vts模块已在上面的环境搭建安装好。
docker exec -it tengine nginx -V 2>&1 | grep -o nginx-module-vts
nginx-module-vts
tengine开启status全部配置
http {
vhost_traffic_status_zone;
...
server {
...
location /status {
vhost_traffic_status_display;
vhost_traffic_status_display_format html;
}
}
}
修改nginx的配置
vim conf/nginx.conf
在http标签中加入vhost_traffic_status_zone配置。如下:
http {
vhost_traffic_status_zone;
...
}
修改server.conf配置
vim conf/conf.d/default.conf
在server标签中加入status如下配置:
server {
...
location /status {
vhost_traffic_status_display;
vhost_traffic_status_display_format html;
}
}
检查配置
docker exec -it tengine nginx -t
返回如下表示正常
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
重启
docker restart tengine
检查-有json数据返回表示正常
curl http://192.168.11.62/status/format/json
web检查-显示如下页面表示正常
1、二进制安装nginx-vts-exporter(二选一)
nginx-vts-exporter下载地址: https://github.com/hnlq715/nginx-vts-exporter/releases
下载二进制包解压并放入/opt目录
wget https://github.com/hnlq715/nginx-vts-exporter/releases/download/v0.10.8/nginx-vtx-exporter_0.10.8_linux_amd64.tar.gz
mkdir /opt/prometheus/nginx_vtx_exporter -p
tar xvf nginx-vtx-exporter_0.10.8_linux_amd64.tar.gz -C /opt/prometheus/nginx_vtx_exporter
ls -l /opt/prometheus/nginx_vtx_exporter
创建用户
useradd -M -s /usr/sbin/nologin prometheus
更改exporter文件夹权限
chown prometheus:prometheus -R /opt/prometheus
创建 systemd 服务
nginx_exporter.service
cat > /etc/systemd/system/nginx_vtx_exporter.service <<"EOF"
[Unit]
Description=nginx_vtx_exporter
After=network.target
[Service]
Type=simple
User=prometheus
Group=prometheus
Restart=always
ExecStart=/opt/prometheus/nginx_vtx_exporter/nginx-vtx-exporter -nginx.scrape_uri=http://192.168.11.62/status/format/json
[Install]
WantedBy=multi-user.target
EOF
启动 nginx_exporter
systemctl daemon-reload
systemctl start nginx_vtx_exporter.service
加入到开机自启动
systemctl enable nginx_vtx_exporter.service
检查
systemctl status nginx_vtx_exporter.service
启动不了检查日志
journalctl -u nginx_vtx_exporter.service -f
3、docker安装nginx-vts-exporter(二选一)
docker-compose方式
mkdir /data/nginx_vts_exporter
cd /data/nginx_vts_exporter
通过cat创建文件
cat >docker-compose.yaml <<EOF
version: '3.3'
services:
nginx_vts_exporter:
image: sophos/nginx-vts-exporter:latest
container_name: nginx_vts_exporter
environment:
NGINX_STATUS: http://192.168.11.62/status/format/json
restart: always
ports:
- "9913:9913"
EOF
启动
docker-compose up -d
检查
docker ps
或:
docker logs -f nginx_vts_exporter
3、参数解释
Environment variable | 默认 | description |
NGINX_STATUS |
4、metrics地址
注:安装好Exporter后会暴露一个http://ip:端口/metrics
的HTTP服务
名称 | 地址 | 备注 |
nginx-vts-exporter |
5、Prometheus配置
配置prometheus去采集(拉取)nginx_exporter的监控样本数据
cd /data/docker-prometheus
#在scrape_configs(搜刮配置):下面增加如下配置:
cat >> prometheus/prometheus.yml << "EOF"
- job_name: 'nginx_vts_exporter'
static_configs:
- targets: ['192.168.11.62:9913']
labels:
instance: test服务器
EOF
重新加载配置
curl -X POST http://localhost:9090/-/reload
检查
http://192.168.11.61:9090/targets?search=
6、常用的监控指标
nginx_server_connections{status="accepted"} 接收请求数
nginx_server_connections{status="active"} 活动连接数
nginx_server_connections{status="handled"} 成功处理请求数
nginx_server_connections{status="reading"} 正在进行读操作的请求数
nginx_server_connections{status="requests"} 总请求数
nginx_server_connections{status="waiting"} 正在等待的请求数
nginx_server_connections{status="writing"} 正在进行写操作的请求数
nginx_upstream_requests{backend="xx:8080",code="4xx"} 后端节点请求状态
nginx_server_requests{code="4xx",host="*"} 状态码为4xx,所有主机
nginx_server_requests{code="4xx",host="localhost"} 状态码为4xx,localhost主机
nginx_server_requests{code="5xx",host="*"} 状态码为5xx,所有主机
nginx_server_requests{code="5xx",host="localhost"} 状态码为5xx,localhost主机
7、添加触发器
触发器
cd /data/docker-prometheus
使用cat在alert.yml文件末尾追加。
cat >>prometheus/alert.yml <<"EOF"
- name: tengine
rules:
- alert: 客户端请求tengine非200
expr: sum by (code) (rate(nginx_server_requests{code=~"4xx|5xx"}[2m])) > 0
for: 2m
labels:
severity: critical
annotations:
summary: "客户端http请求异常"
description: "HTTP状态码非 200-399"
- alert: tengine请求后端节点非200
expr: sum by (code) (rate(nginx_upstream_requests{code=~"4xx|5xx"}[2m])) > 0
for: 2m
labels:
severity: critical
annotations:
summary: "后端节点http请求异常"
description: "后端节点请求状态码非 200-399"
EOF
注
- 2个触发器大部分重复(如:tengine请求后端节点返回500,那tengine也会给客户端返回500)
检查:
vim prometheus/alert.yml
检查配置
docker exec -it prometheus promtool check config /etc/prometheus/prometheus.yml
返回ok,表示配置没有问题
重新加载配置
curl -X POST http://localhost:9090/-/reload
检查
http://192.168.11.61:9090/alerts?search=
或:
http://192.168.11.61:9090/rules
8、dashboard
grafana展示prometheus从nginx_exporter收集到的的数据
评论区