docker-compose搭建Prometheus+Grafana监控系统 · SpringCloud微服务实战 · 看云

导航


本节主要通过docker-compose的方式搭建Prometheus+Grafana监控系统,包括Docker容器监控、MySQL监控、Redis监控,应用监控后面再补充
主要的组件及作用如下:

  1. Prometheus:获取、存储监控数据,供第三方查询;
  2. Grafana:提供Web页面,从Prometheus获取监控数据可视化展示;
  3. alertmanager:定义预警规则,发送预警信息;
  4. node_exporter:收集微服务端点监控数据;
  5. mysql_exporter:收集MySQL数据库监控数据;
  6. redis_exporter:收集Redis监控数据;
  7. cadvisor:收集Docker容器监控数据。

1. 先安装 docker,docker-compose

这里不做介绍了,前面章节已经说明

2. 添加配置文件

先建一个文件夹,可根据需要自己设置,笔者设置在根目录

mkdir fwcloud

3. 添加prometheus.yml配置文件

这里主要对Prometheus、Grafana、alertmanager、node_exporter、mysql_exporter、redis_exporter、cadvisor信息的采集,默认全局每15秒采集一次,超时时间默认是10秒。

global:
  scrape_interval:     15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['127.0.0.1:9090']
  - job_name: 'node_exporter'
    static_configs:
      - targets: ['127.0.0.1:9091']
        labels:
          instance: 'node_exporter'
  - job_name: 'redis_exporter'
    static_configs:
      - targets: ['127.0.0.1:9092']
        labels:
          instance: 'redis_exporter'
  - job_name: 'mysql_exporter'
    static_configs:
      - targets: ['127.0.0.1:9093']
        labels:
          instance: 'mysql_exporter'
  - job_name: 'cadvisor'
    static_configs:
      - targets: ['127.0.0.1:9094']
        labels:
          instance: 'cadvisor'
rule_files:  #配置规则的数组
  - '/fwcloud/rules/memory_over.yml'
  - '/fwcloud/rules/server_down.yml'
alerting:
  alertmanagers:
    - static_configs:
        - targets: ["127.0.0.1:9095"]

4. 添加邮件告警配置文件

告警邮件配置,这里笔者使用的是163服务器,注意配置的邮箱密码不是邮箱的登录密码,而是需要配置客户端授权码。

global:
  smtp_smarthost: 'smtp.163.com:25'  #163服务器
  smtp_from: 'yisutest@163.com'   #发邮件的邮箱
  smtp_auth_username: '用户名'
  smtp_auth_password: '密码'  
  smtp_require_tls: false  #不进行tls验证

route:
  group_by: ['alertname']  #告警分组名称
  group_wait: 10s    #等待时间,这段时间内的警告会合并后发送
  group_interval: 5m  #分组尝试再次发送告警的时间间隔 5分钟
  repeat_interval: 5m  #重复预警时间  5分钟
  receiver: 'default-receiver'  #接收者

receivers:
  - name: 'default-receiver'
    email_configs:
      - to: 'xxxxxx@qq.com'  #收邮件的邮箱
        send_resolved: true

5. 添加报警规则

添加一个server_down.yml为 prometheus targets 监控

vim server_down.yml

配置当某个节点宕机(up==0表示宕机,1表示正常运行)超过20秒后,则触发监控

groups:
  - name: server_down
    rules:
      - alert: InstanceDown
        expr: up == 0
        for: 20s
        labels:
          user: xuyisu
        annotations:
          summary: "Instance {{ $labels.instance }} down"
          description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 20 s."

配置内存溢出监控
添加一个memory_over.yml为 prometheus targets 监控
当某个节点的内存使用率大于80%,并且持续时间大于20秒后,触发监控预警

groups:
  - name: memory_over
    rules:
      - alert: NodeMemoryUsage
        expr: (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes )) / node_memory_MemTotal_bytes * 100 > 80
        for: 20s
        labels:
          user: xuyisu
        annotations:
          summary: "{{$labels.instance}}: High Memory usage detected"
          description: "{{$labels.instance}}: Memory usage is above 80% (current value is:{{ $value }})"

根据业务需要还可以配置更多的监控内容
同时预警不止邮箱通知,还可以使用企业微信、WebHook等。

6. 编写docker-compose

version: '3'

services:
  mysql:
    image: mysql:5.7.24
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    ports:
      - 3306:3306
    volumes:
      - /fwcloud/mysql/data:/var/lib/mysql #挂载 MySQL数据
  redis:
    image: redis:4.0.14
    container_name: redis
    command: redis-server /usr/local/etc/redis/redis.conf --appendonly yes
    volumes:
      - /fwcloud/redis/data:/data #挂载 Redis数据
      - /fwcloud/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf #挂载 Redis配置
    ports:
      - 6379:6379
  prometheus:
    image: prom/prometheus
    container_name: prometheus
    volumes:
      - /fwcloud/prometheus/:/etc/prometheus/
    ports:
      - 9090:9090
    restart: on-failure
  node_exporter:
    image: prom/node-exporter
    container_name: node_exporter
    ports:
      - 9091:9100
  redis_exporter:
    image: oliver006/redis_exporter
    container_name: redis_exporter
    command:
      - '--redis.addr=redis://127.0.0.1:6379'
    ports:
      - 9092:9121
    restart: on-failure
  mysql_exporter:
    image: prom/mysqld-exporter
    container_name: mysql_exporter
    environment:
      - DATA_SOURCE_NAME=root:123456@(127.0.0.1:3306)/
    ports:
      - 9093:9104
  cadvisor:
    image: google/cadvisor
    container_name: cadvisor
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
    ports:
      - 9094:8080
  alertmanager:
    image: prom/alertmanager
    container_name: alertmanager
    volumes:
      - /fwcloud/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml
    ports:
      - 9095:9093
  grafana:
    image: grafana/grafana
    container_name: grafana
    ports:
      - 3000:3000

最终的配置目录
c47dc2a72c7c1850c2d45fd87df26b2f_MD5.png

进入 prometheus 目录 执行docker-compose up -d启动这些容器
21920da439762e26fb04e03057d9d65c_MD5.png

然后通过docker ps -a,可以看到启动状态
1f30d491e92b8b6effb1967463c2c77b_MD5.png

prometheus targets界面如下
cd120d3f2022f4686e7163fd51162bcf_MD5.png

7. 防火墙配置

7.1 关闭selinux

直接输入下面命令回车临时关闭

setenforce 0

或者输入以下命令永久关闭,将disabled打开

vim /etc/sysconfig/selinux

e86237e8eb3a3e9b8024e7a36ce96580_MD5.png

7.2 防火墙端口放开

对以下端口放开

vi  /etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 9090 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9091 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9092 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9093 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9094 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9095 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3000 -j ACCEPT

如果用的一些云服务器,需要将安全组的端口的方案。

到此安装成功

8. Grafana使用

浏览器输入http://127.0.0.1:3000/ 用户名密码为admin/admin,首次登录需要修改密码
3951556705257ee92fb734592aadeb66_MD5.png

8.1 配置数据源

登录进来后,默认会进入到这个页面
6b2305d1a959dffa14398c1b8d2d774e_MD5.png

数据源选择Prometheus
7fafd6ba6b6524e528b2da3bb89b464d_MD5.png

填写自己服务器的Prometheus应用的Ip + Port,保存即可
182f30aab1f99c0aa5acb5c0b66594bc_MD5.png

8.2 导入监控的Dashboard

导入的文件内容监控面板已提交到群文件中

8.2.1 Docker 面板

8dccdb8469cafb349bb18a371b7043f2_MD5.png

可以直接配置监控Json,也可以导入别人已经配置好的文件
8b8da2ad8dc718317024ba101ff63e3a_MD5.png

一次导入下面3个配置文件
e880856bbcb68f140a6071b8ee782968_MD5.png

Redis 监控Dashboard
69d381e8d0198ad7b756fda574a97391_MD5.png

Docker 容器监控Dashboard
fd0bcd0d52e1196f40cae275f3f6a918_MD5.png

MySQL 监控Dashboard
8dbe6202f2ef87e3c16098b5979474ce_MD5.png

以上Prometheus+Grafana监控系统 搭建完毕