10k,当前值:{{ $value }}"description: "进程{{ $labels.groupname }}有{{ $value }}个僵尸进程"description: "进程{{ $labels.groupname}}在{{ $value }}秒前重启过"_prometheus监">
当前位置:   article > 正文

Prometheus监控添加监控mongodb+docker+MySQL8.0+服务器系统进程监控+域名过期时间监控_prometheus监控mongodb

prometheus监控mongodb

环境:

192.168.1.144  Ubuntu系统已经部署好Prometheus监控部署教程请看本人前面的教程 

192.168.1.140  centos7系统已安装docker+docker-compose

1、Prometheus监控mongodb

1、在被监控端以docker-compose方式安装mongodb

mkdir /data/mangodb/ #创建mangodb的目录

cd /data/mangodb/ #进入目录下

2,写docker-compose.yaml文件

vim docker-compose.yaml

version: '3'
services:
  mango:
    image: mongo
    container_name: mongo
    command: [--auth]
    restart: always
    volumes:
      - /data/mongo/db:/data/db
    ports:
      - 27017:27017
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: 123456

启动:

docker-compose up -d

查看:

docker ps

3、登陆mongodb 创建监控用户

docker exec -it mongo mongosh admin        #登陆mongodb

db.auth("root","123456")                              #用户登陆

> db.createUser({                                             #创建监控用户

> user: "exporter",

pwd: "password",

roles: [

{ role: "readAnyDatabase", db: "admin" },

{ role: "clusterMonitor", db: "admin" }

]

})

> db.auth("exporter","password")                            #返回1表示成功

> exit                                                                     #退出mongodb

4、docker-compose方式安装mongodb_exporter

mkdir /data/mongo/mongodb_exporter             #创建mongodb_exporter的安装目录

cd /data/mongo/mongodb_exporter                 #进入到安装目录下

vim docker-compose.yaml

version: '3.3'
services:
  mongodb_exporter:
    image: bitnami/mongodb-exporter
    container_name: mongodb_exporter
    restart: always
    environment:
      MONGODB_URI: "mongodb://exporter:password@192.168.1.140:27017/admin?ssl=false"
    command:
      - '--collect-all'
      - '--compatible-mode'
    ports:
      - "9216:9216"

启动:

docker-compose up -d

5、浏览器进行访问查看

在浏览器中输入mongodb-expoerter端的IP加9216端口进行访问

6、在Prometheus端添加配置

在Prometheus端打开prometheus.yml文件添加以下内容

vim prometheus/prometheus.yml

  - job_name: 'mongodb_exporter'
    static_configs:
      - targets: ['192.168.1.140:9216']
        labels:
          instance: docker服务器

保存退出后重新加载配置

curl -X POST http://localhost:9090/-/reload

7、在浏览器访问是否监控到mongodb

输入Prometheus端的IP加9090端口选择Status 然后选择 Targets 查看

8、mongodb触发器配置 (在Prometheus端配置)

因为之前我在Prometheus.yaml文件中加了一个触发器文件

所以在rules文件中添加一个mongodb的触发器文件即可

在Prometheus端创建一个mongodb的yml文件添加输入以下触发器内容

vim prometheus/rules/mongodb.yml

groups:
- name: PerconaMongodbExporter
  rules:
    - alert: MongodbDown
      expr: 'mongodb_up == 0'
      for: 0m
      labels:
        severity: critical
      annotations:
        summary: "MongoDB Down 容器:{{ $labels.instance }}"
        description: "MongoDB 容器 is down,当前值:{{ $value }}"

    - alert: MongodbNumberCursorsOpen
      expr: 'mongodb_ss_metrics_cursor_open{csr_type="total"} > 10 * 1000'
      for: 2m
      labels:
        severity: warning
      annotations:
        summary: "MongoDB 数字游标打开告警 容器:{{ $labels.instance }}"
        description: "MongoDB为客户端打开的游标过多 > 10k,当前值:{{ $value }}"

    - alert: MongodbCursorsTimeouts
      expr: 'increase(mongodb_ss_metrics_cursor_timedout[1m]) > 100'
      for: 2m
      labels:
        severity: warning
      annotations:
        summary: "MongoDB 游标超时 容器:{{ $labels.instance }}"
        description: "MongoDB 太多游标超时,当前值:{{ $value }}"

    - alert: MongodbTooManyConnections
      expr: 'avg by(instance) (rate(mongodb_ss_connections{conn_type="current"}[1m])) / avg by(instance) (sum (mongodb_ss_connections) by (instance)) * 100 > 80'
      for: 2m
      labels:
        severity: warning
      annotations:
        summary: "MongoDB 太多链接 容器:{{ $labels.instance }}"
        description: "MongoDB 连接数 > 80% ,当前值:{{ $value }}"

    - alert: MongodbVirtualMemoryUsage
      expr: '(sum(mongodb_ss_mem_virtual) BY (instance) / sum(mongodb_ss_mem_resident) BY (instance)) > 3'
      for: 2m
      labels:
        severity: warning
      annotations:
        summary: "MongoDB虚拟内存使用警告 容器:{{ $labels.instance }}"
        description: "MongoDB虚拟内存使用过高,当前值:{{ $value }}"

9、检查与更新(在Prometheus端操作)

检查配置:

docker exec -it prometheus promtool check config /etc/prometheus/prometheus.yml

重新加载配置:

curl -X POST http://localhost:9090/-/reload

在浏览器输入Prometheus端的IP加9090端口选择Alerts查看

10、添加到grafana

Dashboards | Grafana Labs官网

找到dashboard复制id

在grafana端开始配置

完成


2、Prometheus监控docker

环境:

192.168.1.144  Ubuntu系统已经部署好Prometheus监控部署教程请看本人前面的教程 

192.168.1.140  centos7系统已安装docker+docker-compose

1、docker-compose的方式安装CAdvisor

创建cadvisor的目录

mkdir /data/cadvisor

cd /data/cadvisor

vim docker-compose.yaml

version: '3.3'
  vadvisor:
        image: google/cadvisor
        container_name: cadvisor
        restart: always
        volumes:
          - /:/rootfs:ro
          - /var/run:/var/run:rw
          - /sys:/sys:ro
          - /var/lib/docker/:/var/lib/docker:ro
        ports:
          - 8080:8080

启动:

docker-compose up -d

2、在浏览器访问查看

访问CAdvisor端的IP加8080端口

3、在Prometheus端对prometheus.yaml配置文件进行修改

vim prometheus/prometheus.yml   

因为我之前配置过Prometheus机器监控docker所以添加以下内容

      - targets: ['cadvisor:8080']
        labels:
          instance: Prometheus服务器

修改好配置后重新加载配置

curl -X POST http://localhost:9090/-/reload

4、在Prometheus端添加docker的触发器配置

我们Prometheus.yaml文件的触发器中有添加了一个触发器rules文件所以在指定rules文件内创建docker的触发器文件就行

我的Prometheus目录在/data/docker-prometheus/prometheus

进入到触发器目录添加以下内容

cd /data/docker-prometheus/prometheus/rules/

vim docker.yml

groups:
- name: DockerContainers
  rules:
  - alert: Containerkilled
    expr: time() - container_last_seen > 60
    for: 0m
    labels:
      severity: warning
    annotations:
      summary: "Docker容器被杀死,容器:{{ $labels.instance }}"
      description: "{{ $value }} 个容器消失了"

  - alert: ContainerAbsent
    expr: absent(container_last_seen)
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "Docker无容器,容器:{{ $labels.instance }}"
      description: "5分钟检查容器不存在,当前值为{{ $value }}"

  - alert: ContainerCpuUsage
    expr: (sum(rate(container_cpu_usage_seconds_total{name!=""}[3m])) BY (instance, name) * 100) > 300
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: "Docker容器cpu使用率告警,容器:{{ $labels.instance }}"
      description: "容器cpu使用率超过300%,当前值为:{{ $value }}"

  - alert: ContainerMemoryUsage
    expr: (sum(container_memory_working_set_bytes{name!=""}) BY (instance, name) / sum(container_spec_memory_limit_bytes > 0) BY (instance, name) * 100) > 80
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: "Docker容器内存使用率告警,容器:{{ $labels.instance }}"
      description: "容器内存使用率超过80%,当前值为:{{ $value }}"

  - alert: ContainerVolumeIoUsage
    expr: (sum(container_fs_io_current{name!=""}) BY (instance, name) * 100) > 80
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: "容器存储io使用率告警,容器:{{ $labels.instance }}"
      description: "容器存储io使用率超过 80%,当前值为:{{ $value }}"

  - alert: ContainerHighThrottleRate
    expr: rate(container_cpu_cfs_throttled_seconds_total[3m]) > 1
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: "容器限制告警,容器:{{ $labels.instance }}"
      description: "容器被限制,当前值为:{{ $value }}"

5、检查与更新(在Prometheus端操作)

检查配置:

docker exec -it prometheus promtool check config /etc/prometheus/prometheus.yml

重新加载配置:

curl -X POST http://localhost:9090/-/reload

6、在浏览器查看是否有docker的触发器

访问Prometheus端的IP加9090端口选择Alerts查看

http://192.168.1.144:9090/

7、选择dashboard

官网:https://grafana.com/grafana/dashboards

8、添加到grafana配置

完成


3、Prometheus监控MySQL.8.0

注:已安装docker 和 docker-compose

1、通过docker-compose启动MySQL

mkdir /data/mysql #创建存放MySQL的目录

cd /data/mysql

#创建docker-compose.yaml文件

vim docker-compose.yaml

version: '3.1'
services:
  db:
    image: mysql
    restart: always
    container_name: mysql
    environment:
      TZ: Asia/Shanghai
      LANG: en_US.UTF-8
      MYSQL_ROOT_PASSWORD: sy123456
    command: [
      '--default-authentication-plugin=mysql_native_password',
      '--character-set-server=utf8mb4',
      '--collation-server=utf8mb4_general_ci',
      '--lower_case_table_names=1',
      '--performance_schema=1'
    ]
    volumes:
      - /data/mysql/data/:/var/lib/mysql
    ports:
      - 3306:3306

4、启动docker-compose

docker-compose up -d

5、查看MySQL的版本

docker-compose exec db mysql --version

6、创建MySQL的监控用户

因为我们是用docker-compose安装的MySQL所以用以下命令创建用户

登陆MySQL

docker exec -it mysql mysql -uroot -psy123456

创建监控用户:

CREATE USER 'exporter'@'%' IDENTIFIED BY 'password' WITH MAX_USER_CONNECTIONS 3;

解释:

数据库中创建一个名为 'exporter' 的用户,并指定了该用户的连接限制为最多 3 个连接。该用户将使用 'password' 作为登录密码

给与监控用户权限:

GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'%';

解释:

命令是为用户 'exporter' 授予在所有数据库中执行 PROCESS、REPLICATION CLIENT 和 SELECT 权限的权限,允许该用户从任意主机连接到 MySQL 服务器

退出MySQL:

quit

7、用创建的用户登陆验证

docker exec -it mysql mysql -uexporter -ppassword

8、docker方式安装mysql_exporter

创建mysql_exporter的安装目录

mkdir /data/mysqld_exporter -p

cd /data/mysqld_exporter -p

创建docker-compose.yaml文件

vim docker-compose.yaml

version: '3.3'
services:
  mysqld-exporter:
    image: prom/mysqld-exporter
    container_name: mysqld-exporter
    restart: always
    command:
      - '--collect.info_schema.processlist'
      - '--collect.info_schema.innodb_metrics'
      - '--collect.info_schema.tablestats'
      - '--collect.info_schema.tables'
      - '--collect.info_schema.userstats'
      - '--collect.engine_innodb_status'
    environment:
      - DATA_SOURCE_NAME=exporter:password@(192.168.1.140:3306)/
    ports:
      - 9104:9104

9、启动

docker-compose up -d 

10、如果启动不起来报错

日志如图

在当前目录下创建一个my.cnf文件

vim my.cnf 

[client]
user=exporter
password=password
host=192.168.1.140
port=3306

修改docker-compose.yaml 文件 

vim docker-compose.yaml             

version: '3.3'
services:
  mysqld-exporter:
    image: prom/mysqld-exporter
    container_name: mysqld-exporter
    restart: always
    command:
      - '--collect.info_schema.processlist'
      - '--collect.info_schema.innodb_metrics'
      - '--collect.info_schema.tablestats'
      - '--collect.info_schema.tables'
      - '--collect.info_schema.userstats'
      - '--collect.engine_innodb_status'
    volumes:
      - ./my.cnf:/.my.cnf          #注意映射进容器的根号下不然会报错
    ports:
      - 9104:9104

重新启动

docker-compose restart

11、访问查看

在浏览器输入本机IP加9104端口访问查看

12、在Prometheus端添加配置

在Prometheus端打开prometheus.yml文件在尾部添加以下内容

vim prometheus/prometheus.yml

  - job_name: 'mysql_exporter'
    static_configs:
      - targets: ['192.168.1.140:9104']
        labels:
          instance: docker服务器
 

更新配置

curl -X POST http://localhost:9090/-/reload

13、在浏览器查看是否有docker的触发器

 访问Prometheus端的IP加9090端口选择Status在选择Targets查看

http://192.168.1.144:9090/

14、触发器配置

我之前在Prometheus.yaml文件的触发器中有添加了一个触发器rules文件所以在指定rules文件内创建docker的触发器文件就行

我的Prometheus目录在/data/docker-prometheus/prometheus

进入到rules目录下创建mysqld的触发器文件

vim mysqld.yml

groups:
- name: MySQL
  rules:
  - alert: MysqlDown
    expr: mysql_up == 0
    for: 30s
    labels:
      severity: critical
    annotations:
      summary: "MySQL Down,实例:{{ $labels.instance }}"
      description: "MySQL_exporter连不上MySQL了 当前状态为:{{ $value }}"

  - alert: MysqlTooManyConnections
    expr: max_over_time(mysql_global_status_threads_connected[1m]) / mysql_global_variables_max_connections * 100 > 80
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: "MySQL连接数过多告警,实例:{{ $labels.instance }}"
      description: "MySQL连接数>80% , 当前值:{{ $value }}"

  - alert: MysqlHighThreadsRunning
    expr: max_over_time(mysql_global_status_threads_running[1m]) > 20
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: "MySQL运行的线程过多,实例:{{ $labels.instance }}"
      description: "MySQL运行的线程>20 , 当前运行的线程:{{ $value }}"

  - alert: MysqlSlowQueries
    expr: increase(mysql_global_status_slow_queries[2m]) > 0
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: "MySQL慢日志告警,实例:{{ $labels.instance }}"
      description: "MySQL在过去的两分钟有新的 , {{ $value }}条慢查询"

  - alert: MysqlInnodbLogWaits
    expr: rate(mysql_global_status_innodb_log_waits[15m]) > 10
    for: 0m
    labels:
      severity: warning
    annotations:
      summary: "MySQL innodb日志等待,实例:{{ $labels.instance }}"
      description: "MySQL innodb日志写入停滞, 当前值:{{ $value }}"

  - alert: MysqlRestarted
    expr: mysql_global_status_uptime < 60
    for: 0m
    labels:
      severity: info
    annotations:
      summary: "MySQL 重启,实例:{{ $labels.instance }}"
      description: "不到一分钟MySQL 重启过"

15、检查配置

docker exec -it prometheus promtool check config /etc/prometheus/prometheus.yml

更新配置

curl -X POST http://localhost:9090/-/reload

16、在浏览器查看

访问Prometheus端的IP加9090端口选择Alerts查看

17、在dashboard找合适的dashboard建议使用7362

https://grafana.com/grafana/dashboards

18、登陆到grafana添加节点和dashboard

 

进入grafana页面 在左上角选择 Starred 然后在右上角选择New 然后选择 import 会出现下面的页面

完成

4、添加服务器系统进程监控

我的服务器已经安装docker和docker-compose

1、docker安装process_exporter

创建process的存储目录:

mkdir /data/process_exporter -p

cd /data/process_exporter

创建配置文件:

vim process.yml

process_names:
  - name: "{{.Comm}}"        
    cmdline:
    - '.+'

也可以监控指定进程和上面的二选一即可

vim process.yml

process_names:

- name: "{{.Matches}}" #匹配模板

cmdline:

- 'nginx' #唯一标识

- name: "{{.Matches}}"

cmdline:

- 'mongod'

- name: "{{.Matches}}"

cmdline:

- 'mysqld'

- name: "{{.Matches}}"

cmdline:

- 'redis-server'

2、启动process-exporter

docker run -d --rm -p 9256:9256 --privileged -v /proc:/host/proc -v `pwd`:/config --name process-exporter ncabatoff/process-exporter --procfs /host/proc -config.path /config/process.yml

解释:

  • -d:以后台方式运行容器。
  • --rm:在容器停止后自动删除容器。
  • -p 9256:9256:将主机的9256端口映射到容器的9256端口。
  • --privileged:以特权模式运行容器,允许容器访问主机的所有设备。
  • -v /proc:/host/proc:将主机的/proc目录挂载到容器的/host/proc目录,用于获取主机的进程信息。
  • -v pwd:/config:将当前工作目录挂载到容器的/config目录,用于提供配置文件process.yml。
  • --name process-exporter:给容器指定一个名称为process-exporter。
  • ncabatoff/process-exporter:使用ncabatoff/process-exporter镜像来创建容器。
  • --procfs /host/proc -config.path /config/process.yml:传递给容器的命令行参数,指定procfs路径为/host/proc,配置文件路径为/config/process.yml。

3、在浏览器访问查看

输入本机IP加9256端口查看是否能检测到数据

3、在Prometheus端添加配置

在Prometheus端打开prometheus.yml文件在尾部添加以下内容

vim prometheus/prometheus.yml

  - job_name: 'process_exporter'
    scrape_interval: 30s
    scrape_timeout: 15s
    static_configs:
      - targets: ['192.168.1.140:9256'

4、更新检查

curl -X POST http://localhost:9090/-/reload          更新配置

访问Prometheus端的IP加9090端口选择Status在选择Targets查看

http://192.168.1.144:9090/

5、触发器配置

我之前在Prometheus.yaml文件的触发器中有添加了一个触发器rules文件所以在指定rules文件内创建docker的触发器文件就行

我的Prometheus目录在/data/docker-prometheus/prometheus

进入到rules目录下创建process的触发器文件

vim process.yml

groups:
- name: process
  rules:
  - alert: 进程数多告警
    expr: sum(namedprocess_namegroup_states) by (instance) >1000
    for: 1m
    labels:
      severity: warning
    annotations:
      description: "服务器当前有{{ $value }}个进程"

  - alert: 僵尸进程数告警
    expr: sum by(instance, groupname) (namedprocess_namegroup_states{state="Zombie"}) > 0
    for: 1m
    labels:
      severity: warning
    annotations:
      description: "进程{{ $labels.groupname }}有{{ $value }}个僵尸进程"

  - alert: 进程重启告警
    expr: ceil(time() -max by (instance, groupname) (namedprocess_namegroup_oldest_start_time_seconds)) < 60
    for: 15s
    labels:
      severity: warning
    annotations:
      description: "进程{{ $labels.groupname}}在{{ $value }}秒前重启过"

  - alert: 进程退出告警
    expr: max by(instance, groupname) (delta(namedprocess_namegroup_oldest_start_time_seconds{groupname=~"^java.*|^nginx.*"}[1d])) < 0
    for: 1m
    labels:
      severity: warning
    annotations:
      description: "进程{{ $labels.groupname}}退出了"

6、检查更新(在Prometheus端操作)

检查配置

docker exec -it prometheus promtool check config /etc/prometheus/prometheus.yml

更新配置

curl -X POST http://localhost:9090/-/reload

7、在浏览器查看是否有新的触发器

访问Prometheus端的IP加9090端口选择Alerts查看

8、在dashboard找合适的dashboard建议使用249

https://grafana.com/grafana/dashboards

9、登陆到grafana添加节点和dashboard

进入grafana页面 在左上角选择 Starred 然后在右上角选择New 然后选择 import 会出现下面的页面

完成


5、添加域名过期时间监控

1、docker安装domain_exporter

docker run -d --restart=always --name domain_exporter -p 9222:9222 caarlos0/domain_exporter

2、在浏览器访问本机IP加9222端口访问查看

3、在Prometheus端进行配置

在Prometheus端打开配置文件添加以下内容

vim prometheus/prometheus.yml

  - job_name: domain
    #scrape_interval: 1h
    scrape_interval: 15s
    metrics_path: /probe
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - target_label: __address__
        replacement: 192.168.1.140:9222
    static_configs:
      - targets:
        - qq.com
        - baidu.cn

4、更新配置并检查

curl -X POST http://localhost:9090/-/reload         #更新配置

 访问Prometheus端的IP加9090端口选择Status在选择Targets查看

http://192.168.1.144:9090/

5、触发器配置(在Prometheus端配置)

我之前在Prometheus.yaml文件的触发器中有添加了一个触发器rules文件所以在指定rules文件内创建docker的触发器文件就行

我的Prometheus目录在/data/docker-prometheus/prometheus

进入到rules目录下创建process的触发器文件

vim domain.yml

groups:
- name: domain
  rules:
  - alert: 域名检测失败
    expr: domain_probe_success == 0
    for: 2h
    labels:
      severity: warning
    annotations:
      summary: '{{ $labels.instance }}'
      description: '{{ $labels.domain }}域名检测失败'

  - alert: 域名过期
    expr: domain_expiry_days < 30
    for: 2h
    labels:
      severity: warning
    annotations:
      summary: '{{ $labels.instance }}'
      description: '{{ $labels.domain }}将在30天后过期'

  - alert: 域名过期
    expr: domain_expiry_days < 5
    for: 2h
    labels:
      severity: page
    annotations:
      summary: '{{ $labels.instance }}'
      description: '{{ $labels.domain }}将在5天后过期'

6、检查更新(在Prometheus端操作)

检查配置

docker exec -it prometheus promtool check config /etc/prometheus/prometheus.yml

更新配置

curl -X POST http://localhost:9090/-/reload

7、在浏览器查看是否有新的触发器

访问Prometheus端的IP加9090端口选择Alerts查看

8、在dashboard找合适的dashboard建议使用14605

https://grafana.com/grafana/dashboards

9、登陆到grafana添加节点和dashboard

进入grafana页面 在左上角选择 Starred 然后在右上角选择New 然后选择 import 会出现下面的页面

完成

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/556502
推荐阅读
相关标签
  

闽ICP备14008679号