title: 2.4.监控nginx
order: 10
icon: lightbulb
一、环境
主机名 | IP地址 | 系统 | 说明 |
localhost | 192.168.11.61 | Ubuntu 20.04 | docker安装的prometheus |
test | 192.168.11.62 | Ubuntu 20.04 | mongo版本4.2.5,rabbitmq版本3.7.15,redis版本5, nginx版本1.21.6,Docker 版本 23.0.1 |
1、环境搭建
docker安装
略
docker-compose安装
略
为了快速测试,我使用docker-compose安装nginx,rabbitmq,mongo,也可以自行安装。
a、创建nginx目录
#切换到root用户
sudo -i
mkdir /data/nginx/conf.d -p
cd /data/nginx/conf.d
在/data/nginx/conf.d目录里面新增加nginx的配置文件
cat >>server.conf<< "EOF"
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
EOF
检查
cat server.conf
b、docker-compose安装rabbitmq、nginx、mongo、redis
mkdir /data/docker-compose -p
cd /data/docker-compose
通过cat 创建docker-compose.yaml文件
cat > docker-compose.yaml <<"EOF"
version: '3'
services:
redis:
image: redis:5
container_name: redis
command: redis-server --requirepass 123456 --maxmemory 512mb
restart: always
volumes:
- /data/redis/data:/data
ports:
- 6379:6379
nginx:
image: nginx:1.21.6
container_name: nginx
restart: always
volumes:
- /data/nginx/conf.d:/etc/nginx/conf.d
- /data/nginx/html:/usr/share/nginx/html
- /data/nginx/log:/var/log/nginx
ports:
- 80:80
rabbitmq:
image: rabbitmq:3.7.15-management
container_name: rabbitmq
restart: always
volumes:
- /data/rabbitmq/data:/var/lib/rabbitmq
- /data/rabbitmq/log:/var/log/rabbitmq
ports:
- 5672:5672
- 15672:15672
mongo:
image: mongo:4.2.5
container_name: mongo
restart: always
volumes:
- /data/mongo/db:/data/db
ports:
- 27017:27017
command: [--auth]
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: 123456
EOF
运行
docker-compose up -d
检查
docker ps
STATUS列全部为up 为正常
二、监控nginx
nginx开启stub_status
- 注 监控nginx需要with-http_stub_status_module
检查是否安装有with-http_stub_status_module模块
docker exec -it nginx nginx -V 2>&1 | grep -o with-http_stub_status_module
with-http_stub_status_module
nginx开启stub_status配置
cd /data/nginx/conf.d
vim server.conf
```
server {
....
location /stub_status {
stub_status on;
access_log off;
#allow nginx_export的ip;
allow 0.0.0.0/0;
deny all;
}
....
}
重新加载配置文件
docker exec -it nginx nginx -s reload
检查
curl http://192.168.11.62/stub_status
正常如下图:
参数解释:
- Active connections – 活动连接数
accepts – 接收请求数
handled – 成功处理请求数
requests – 总请求数
reding – 正在进行读操作的请求数
writing – 正在进行写操作的请求数
waiting – 正在等待的请求数
1、二进制安装(二选一)
nginx_exporter下载地址: https://github.com/nginxinc/nginx-prometheus-exporter/releases
下载二进制包解压并放入/opt目录
wget https://github.com/nginxinc/nginx-prometheus-exporter/releases/download/v0.11.0/nginx-prometheus-exporter_0.11.0_linux_amd64.tar.gz
mkdir /opt/prometheus/nginx_exporter -p
tar xvf nginx-prometheus-exporter_0.11.0_linux_amd64.tar.gz -C /opt/prometheus/nginx_exporter
ls -l /opt/prometheus/nginx_exporter
创建用户
useradd -M -s /usr/sbin/nologin prometheus
更改exporter文件夹权限
chown prometheus:prometheus -R /opt/prometheus
创建 systemd 服务
nginx_exporter.service
cat > /etc/systemd/system/nginx_exporter.service <<"EOF"
[Unit]
Description=nginx-prometheus-exporter
After=network.target
[Service]
Type=simple
User=prometheus
Group=prometheus
Restart=always
ExecStart=/opt/prometheus/nginx_exporter/nginx-prometheus-exporter -nginx.scrape-uri=http://192.168.11.62/stub_status
[Install]
WantedBy=multi-user.target
EOF
启动 nginx_exporter
systemctl daemon-reload
systemctl start nginx_exporter.service
加入到开机自启动
systemctl enable nginx_exporter.service
检查
systemctl status nginx_exporter.service
启动不了检查日志
journalctl -u xxx_exporter.service -f
3、docker安装(二选一)
docker直接运行
docker-compose方式
cd /data/nginx/
通过cat创建文件
cat >docker-compose.yaml <<EOF
version: '3.3'
services:
nginx_exporter:
image: nginx/nginx-prometheus-exporter:0.11
container_name: nginx_exporter
hostname: nginx_exporter
command:
- '-nginx.scrape-uri=http://192.168.11.62/stub_status'
restart: always
ports:
- "9113:9113"
EOF
启动
docker-compose up -d
检查
docker ps
或:
docker logs -f nginx_exporter
3、参数解释
Environment variable | 命令行参数 | description |
-nginx.scrape-uri | nginx stub_status 复制 |
4、metrics地址
注:安装好Exporter后会暴露一个http://ip:端口/metrics
的HTTP服务
名称 | 地址 | 备注 |
nginx_exporter |
5、Prometheus配置
配置prometheus去采集(拉取)nginx_exporter的监控样本数据
cd /data/docker-prometheus
#在scrape_configs(搜刮配置):下面增加如下配置:
cat >> prometheus/prometheus.yml << "EOF"
- job_name: 'nginx_exporter'
static_configs:
- targets: ['192.168.11.62:9113']
labels:
instance: test服务器
EOF
重新加载配置
curl -X POST http://localhost:9090/-/reload
检查
6、常用的监控指标
nginx_connections_accepted 接收请求数
nginx_connections_active 活动连接数
nginx_connections_handled 成功处理请求数
nginx_connections_reding 正在进行读操作的请求数
nginx_connections_waiting 正在等待的请求数
nginx_connections_writing 正在进行写操作的请求数
nginx_connections_requests 总请求数
7、添加触发器
触发器
cd /data/docker-prometheus
```
cat >>prometheus/alert.yml <<"EOF"
- name: nginx
rules:
# 对任何实例超过30秒无法联系的情况发出警报
- alert: NginxDown
expr: nginx_up == 0
for: 30s
labels:
severity: critical
annotations:
summary: "nginx异常,实例:{{ $labels.instance }}"
description: "{{ $labels.job }} nginx已关闭"
EOF
检查:
vim prometheus/alert.yml
检查配置
docker exec -it prometheus promtool check config /etc/prometheus/prometheus.yml
重新加载配置
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收集到的的数据
评论区