侧边栏壁纸
博主头像
一揽芳华 博主等级

行动起来,活在当下

  • 累计撰写 265 篇文章
  • 累计创建 24 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

2.4.监控nginx

芳华是个男孩!
2024-10-14 / 0 评论 / 0 点赞 / 14 阅读 / 0 字
广告 广告

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

http://192.168.11.62:9113/metrics

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收集到的的数据

https://grafana.com/grafana/dashboards/12708

0
广告 广告

评论区