创建nginx-docker配置文件
mkdir /data/nginx/conf.d/ -p
cd /data/nginx/conf.d/
data/nginx/conf.d# ls
nginx/conf.d配置文件
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
nginx-docker
mkdir /data/docker-compose -p
cd /data/docker-compose/
cat >docker-compose.yaml<<'EOF'
version: '3'
services:
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
EOF
启动nginx_docker
docker-compose up -d
nginx 开启stub_status
确认是否有该模块 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配置
```
cat >>server.conf<< 'EOF'
server {
listen 80;
server_name localhost;
......
location /stub_status {
stub_status on;
access_log off;
allow 0.0.0.0/0;
deny all;
}
......
}
EOF
具体配置
```
server {
listen 80;
server_name localhost;
location /stub_status {
stub_status on;
access_log off;
allow 0.0.0.0/0;
deny all;
}
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;
}
}
重新加载nginx 配置测试
root@prometheus220:/data/nginx/conf.d# docker exec -it nginx nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
root@prometheus220:/data/nginx/conf.d# docker exec -it nginx nginx -s reload
root@prometheus220:/data/nginx/conf.d# curl http://localhost/stub_status
Active connections: 1
server accepts handled requests
1 1 1
Reading: 0 Writing: 1 Waiting: 0
```
配置nginx-exporter
cd /data/nginx/
cat >docker-compose.yaml <<'EOF'
version: '3.3'
services:
nginx_exporter:
image: nginx/nginx-prometheus-exporter:0.8.0
container_name: nginx_exporter
hostname: nginx_exporter
command:
- '-nginx.scrape-uri=http://10.19.1.220/stub_status'
restart: always
ports:
- '9113:9113'
EOF
启动
docker-compose up -d
确认docker ps -a
http://10.19.1.220:9113/metrics
prometheus.yml 增加配置
nginx_exporter监控样本数据
cat >> prometheus/prometheus.yml << 'EOF'
- job_name: 'nginx_exporter'
scrape_interval: 30s
static_configs:
- targets: ['10.19.1.220:9113']
labels:
instance: nginx服务器
EOF
curl -X POST http://localhost:9090/-/reload
prometheus 界面显示nginx_exporter
增加告警阀值
cd /data/docker-prometheus
cat >>prometheus/alert.yml << 'EOF'
- name: nginx
rules:
#对任何实例操过30s无法联系的情况发出告警
- alert: NginxDown
expr: nginx_up == 0
for: 30s
labels:
serverity: critical
annotations:
summary: "nginx异常,实例:{{ $labels.instance }}"
description: "{{ $labels.job }} nginx 已关闭"
EOF
```
docker exec -it prometheus promtool check config /etc/prometheus/prometheus.yml
curl -X POST http://localhost:9090/-/reload
添加nginx_dashboard
https://grafana.com/grafana/dashboards/12708