【Docker学习】13、基于 Docker 使用 Prometheus 监控 Linux、Docker、MySQL等

Source

1、Prometheus 监控组件

从上面的构建可以发现,现在已经可以监控当前Linux主机了,实际上能监控的内容很多,可以在官网查看,监控内容或社区查找

搭建各种组件的监控,首先需要找到提供数据的数据源,当然,Prometheus已经给我们写好了配置,我们只需要在找到对应的配置进行安装即可,Prometheus GitHub,例如

(1)Prometheus 监控 Linux

拉去 node-exporter 镜像

docker pull prom/node-exporter

启动node-exporter

docker run -d -p 9100:9100 --name=node-exporter \
-v "/proc:/host/proc:ro" \
-v "/sys:/host/sys:ro" \
-v "/:/rootfs:ro" \
--net="host" prom/node-exporter

访问测试

http://服务器IP:9100/metrics

修改 Prometheus 配置文件 prometheus.yml

scrape_configs:
  # Linux 监控配置
  - job_name: linux
    static_configs:
      - targets: ['101.200.127.67:9100']
        labels:
          instance: 101.200.127.67

然后Docker重启 Prometheus

docker restart prometheus容器id

在 Prometheus 监控面板添加模板,推荐模板:9276,添加时别忘了设置Prometheus数据源

在这里插入图片描述

(2)Prometheus 监控 Docker

监控docker使用的是cadvisor收集数据,推荐模板:

docker pull google/cadvisor

启动cadvisor

docker run -p 8080:8080 -d \
-v /:/rootfs:ro \
-v /var/run:/var/run:rw \
-v /sys:/sys:ro \
-v /var/lib/docker/:/var/lib/docker:ro \
-v /dev/disk/:/dev/disk:ro \
--name=cadvisor google/cadvisor

浏览器访问测试,一样的会返回统计信息

http://IP:8080/containers/

修改 Prometheus 配置文件 prometheus.yml

scrape_configs:
  # Docker 监控配置
  - job_name: 'docker'
    static_configs:                                                                                                                     
      - targets: ['101.200.127.67:8080']
        labels:
          instance: 101.200.127.67

然后Docker重启 Prometheus

docker restart prometheus容器id

在 Prometheus 监控面板添加模板,推荐模板:193,添加时别忘了设置Prometheus数据源

在这里插入图片描述

(3)Prometheus 监控 MySQL

mysqld exporter的功能是收集mysql服务器的数据,并向外提供api接口,用于prometheus主要获取数据

docker network create my-mysql-network

docker pull prom/mysqld-exporter

在被监控端mysql服务器上创建账号用于mysql exporter收集使用

GRANT REPLICATION CLIENT, PROCESS ON  *.*  to 'exporter'@'%' identified by '123456';

GRANT SELECT ON performance_schema.* TO 'exporter'@'%';

flush privileges;

安装 mysqld exporter,exporter是上面创建的用户,123456是密码,101.200.127.67是服务器地址

docker run -d -p 9104:9104 \
-e DATA_SOURCE_NAME="exporter:123456@(101.200.127.67:3306)/" \
--name mysqld-exporter prom/mysqld-exporter

浏览器访问测试,一样的会返回统计信息

http://IP:9104/metrics

要查看容器是否报错, 主要是验证exporter与mysql服务端之间正常连接和获取数据

# 看有没有报错
docker logs -f mysqld-exporter

修改 Prometheus 配置文件 prometheus.yml

scrape_configs:
  # MySQL 监控配置
  - job_name: mysql
    # 抓取间隔
    scrape_interval: 5s
    static_configs:
      - targets: ['101.200.127.67:9104']
        labels:
          instance: 101.200.127.67

然后Docker重启 Prometheus

docker restart prometheus容器id

在 Prometheus 监控面板添加模板,推荐模板:7362,添加时别忘了设置Prometheus数据源

在这里插入图片描述

2、Docker-Compose 一键部署监控系统

(1)准备工作

前面说了那么多搭建步骤,都是通过Docker一条条命令构建的,现在我们使用Docker-Compose来一键部署监控系统,前提条件是我们已经使用 Docker 搭建 Prometheus、Grafana 环境,完成了,然后有Prometheus的配置文件 prometheus.yml

明确安装内容以及构建内容

监控组件 数据来源 访问地址
Linux prom/node-exporter http://101.200.127.67:9100/metrics
Docker google/cadvisor http://101.200.127.67:9100/containers/
MySQL prom/mysqld-exporter http://101.200.127.67:9104/metrics

(2)编写 Docker-Compose 配置文件

文件名为 docker-compose-prometheus.yml,由于之前我已经安装过了,这里的所有生成的容器‘’名称都是 dc- 开头

version: "3.8" # 版本对比查找官网:https://docs.docker.com/compose/compose-file/
services:
  # Linux 监控配置
  dc-node-exporter:
    container_name: dc-node-exporter
    image: prom/node-exporter
    volumes:
      - /proc:/host/proc:ro
	  - /sys:/host/sys:ro
	  - /:/rootfs:ro
    ports:
      - "9100:9100"
  # Docker 监控配置
  dc-cadvisor:
    container_name: dc-cadvisor 
    image: google/cadvisor
    volumes:
      - /:/rootfs:ro
	  - /var/run:/var/run:rw
	  - /sys:/sys:ro
	  - /var/lib/docker/:/var/lib/docker:ro
	  - /dev/disk/:/dev/disk:ro
    ports:
      - "8080:8080"
  # MySQL 监控配置
  dc-mysqld-exporter:
    container_name: dc-mysqld-exporter
    image: prom/mysqld-exporter
    environment:
      DATA_SOURCE_NAME: "exporter:123456@(101.200.127.67:3306)/"
    ports:
      - "9104:9104"

因为我上面已经使用docker搭建过一次了,所以这里我关闭了所有的容器
docker stop $(docker ps -aq)
保留MySQL即可,因为我们还要监控MySQL

Docker-Compose 操作命令

作用 命令
启动容器 docker-compose -f docker-compose-prometheus.yml up -d
查看容器 docker-compose -f docker-compose-prometheus.yml ps
关闭容器 docker-compose -f docker-compose-prometheus.yml stop
删除容器 docker-compose -f docker-compose-prometheus.yml rm

(3)统一修改 Prometheus 配置

修改 Prometheus 配置文件 prometheus.yml

global:
  scrape_interval:     60s
  evaluation_interval: 60s
 
scrape_configs:
  # Docker 监控配置
  - job_name: 'docker'
    static_configs:                                                                                                                     
      - targets: ['101.200.127.67:8080']
        labels:
          instance: 101.200.127.67
  # Prometheus 监控配置
  - job_name: prometheus
    static_configs:
      - targets: ['101.200.127.67:9090']
        labels:
          instance: 101.200.127.67
  # Linux 监控配置
  - job_name: linux
    static_configs:
      - targets: ['101.200.127.67:9100']
        labels:
          instance: 101.200.127.67
  # MySQL 监控配置
  - job_name: mysql
    # 抓取间隔
    scrape_interval: 5s
    static_configs:
      - targets: ['101.200.127.67:9104']
        labels:
          instance: 101.200.127.67

然后重启 prometheus,根据第一步写的准备工作的IP地址,逐一访问数据信息是否可以正确获取到

监控组件 数据来源 访问地址
Linux prom/node-exporter http://101.200.127.67:9100/metrics
Docker google/cadvisor http://101.200.127.67:9100/containers/
MySQL prom/mysqld-exporter http://101.200.127.67:9104/metrics

剩下的界面配置和文章开头的每个配置一样,这里就不复制粘贴了,Docker-Compose一键部署的配置编写完成!