欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

使用 Docker 部署 Grafana + Prometheus 监控 MySQL 数据库

程序员文章站 2022-09-04 15:45:47
一、背景 在平时开发过程当中需要针对 MySQL 数据库进行监控,这里我们可以使用 Grafana 和 Prometheus 来实现监控功能。Grafana 是一款功能强大的仪表盘面板,支持多种数据源,可以自定义图表进行监控。而 Prometheus 就是 Grafana 支持的数据源之一,Prom ......

一、背景

在平时开发过程当中需要针对 mysql 数据库进行监控,这里我们可以使用 grafana 和 prometheus 来实现监控功能。grafana 是一款功能强大的仪表盘面板,支持多种数据源,可以自定义图表进行监控。而 prometheus 就是 grafana 支持的数据源之一,prometheus 负责采集需要监控的数据,然后通过 grafana 展示出来。

prometheus 拥有多种 exporter 进行监控数据的导出,这里我们使用的是 mysql exporter 来进行数据库状态的监控。

很久没写博客了,最近实在太忙,工作之余在研究 abp vnext。

二、动手实践

首先参考博文《linux 下的 docker 安装与使用》安装好 docker,之后再参考博文 《centos 7.x 安装 docker-compose》安装好 docker-compose 之后,就可以开始我们的工作了。

2.1 编写 docker-compose.yaml 文件

首先我们确定会启动起来三个服务,分别是 mysql-exporter (监控 mysql 指标)、prometheus (收集 exporter 的数据)、grafana (从 prometheus 读取指标数据,并展示出来)。

所以 yaml 文件的内容大体如下,这里也增加了响应的注释方便大家学习。

version: '2'
services:
  exporter:
    container_name: mysql-exporter-dev
    image: prom/mysqld-exporter
    environment:
      # 这里指定的是要监控的 mysql 数据库,这里我们以启动的 test-mysql 容器为示范。
      # 实际应用当中,应该配置为具体的数据库实例。
      - data_source_name=root:root@(test-mysql:3306)/

  prometheus:
    container_name: prometheus
    image: prom/prometheus
    ports:
      - "20001:9090"
    # 映射普罗米修斯的配置文件,用于配置 exporter,这里的文件应该在后面创建好,具体
    # 路径以实际为准。
    volumes:
      - /root/docker/volumes/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml

  grafana:
    container_name: grafana
    image: grafana/grafana
    environment:
      # 配置 grafana 的默认根 url。
      - gf_server_root_url=http://192.168.100.107:20002
      # 配置 grafana 的默认 admin 密码。
      - gf_security_admin_password=admin
    ports:
      - "20002:3000"
    # 映射 grafana 的数据文件,方便后面进行更改。
    volumes:
      - /root/docker/volumes/grafana:/var/lib/grafana

  # 本服务只是用于演示,实际使用请注释掉本服务。
  mysql:
    container_name: test-mysql
    image: mysql
    environment:
      - mysql_root_password=root

# 这里如果需要连接外部 mysql 就需要处在同一个网络。
networks:
  default:
    external:
      name: mysql-monitor

2.2 配置 prometheus.yml 文件

在 prometheus.yaml 文件当中存储了所有 exporter 的信息,所以我们需要创建一个自己的 prometheus.yml 文件,映射到容器当中。

global:
  scrape_interval:     15s
  evaluation_interval: 15s

alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

scrape_configs:
  # prometheus 监控配置
  - job_name: 'prometheus'
    static_configs:
      - targets: ['prometheus:9090']

  # mysql 监控配置
  - job_name: 'mysql'
    # 抓取间隔
    scrape_interval: 5s
    static_configs:
      # 这里配置的是具体的 mysql exporter 的地址,在之前的 docker compose 文件
      # 定义当中,mysql exporter 的容器名为 mysql-exporter-dev。
      - targets: ['mysql-exporter-dev:9104']

2.3 启动

首先我们要建立一个监控用的 docker 网络,与 docker compose 文件对应:

docker network create mysql-monitor

使用 Docker 部署 Grafana + Prometheus 监控 MySQL 数据库

假设 yaml 文件名称为 docker-compose.yaml ,执行以下命令来创建我们的容器。

docker-compose -f ./docker-compose.yaml -p mysql-monitor up -d

使用 Docker 部署 Grafana + Prometheus 监控 MySQL 数据库

但是呢,有时候可能会提示以下信息,说没有对应的权限,这个时候你使用 chmod 命令改变以下 grafana 文件夹的权限即可。

使用 Docker 部署 Grafana + Prometheus 监控 MySQL 数据库

chmod -r 777 /root/docker/volumes/grafana

之后,再次运行 docker-compose -f ./docker-compose.yaml -p mysql-monitor up -d 命令,启动服务。第一次启动可能会有点慢,grafana 需要迁移相关的数据,等待一会儿之后访问 机器ip:20002 就可以看到 grafana 了。

2.4 配置

首先我们需要在 grafana 配置 prometheus 数据源,登录 grafana 之后,选择数据源。

使用 Docker 部署 Grafana + Prometheus 监控 MySQL 数据库

选择 prometheus。

使用 Docker 部署 Grafana + Prometheus 监控 MySQL 数据库

之后在 url 填入 prometheus 的容器名字 + 端口,点击 save & test,这里一定要注意数据源的名字叫做 prometheus,不然等会儿导入我的面板是无法使用的。

使用 Docker 部署 Grafana + Prometheus 监控 MySQL 数据库

导入我们的 dashboard 文件。

使用 Docker 部署 Grafana + Prometheus 监控 MySQL 数据库

使用 Docker 部署 Grafana + Prometheus 监控 MySQL 数据库

2.5 文件下载地址

dashboard 文件点击我下载

三、效果图

使用 Docker 部署 Grafana + Prometheus 监控 MySQL 数据库