pmm 是一个很不错的mysql、mongo、postgresql 数据库监控平台,基于prometheus、grafana、exporter 算是一个比较完整
的数据库分析平台

参考架构图

环境准备

对于pg 以及mysql 的运行基于docker 官方镜像,添加了pmm client 包,同时为了添加指标,添加了gogs(git 服务),pgloader
mysql 数据迁移到pg,没有配置node exporter

  • docker-compose文件
 
version: "3"
services: 
  pgloader-mysql:
    image: dimitri/pgloader
    command: pgloader mysql://root:dalongrong@mysql/gogs postgresql://postgres:dalong@postgres:5432/appdemo
  gogs:
    image: gogs/gogs
    ports:
      - "10022:22"
      - "3000:3000"
  pmmserver:
    image: percona/pmm-server:1.17
    ports: 
    - "80:80"
  mysqlexporter:
    image: prom/mysqld-exporter
    ports: 
    - "9104:9104"
    environment: 
    - "DATA_SOURCE_NAME=root:dalongrong@(mysql:3306)/"
  mysql:
    build: 
     context: ./mysql
     dockerfile: Dockerfile
    ports:
      - 3306:3306
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    environment:
      MYSQL_ROOT_PASSWORD: dalongrong
      MYSQL_DATABASE: gogs
      MYSQL_USER: gogs
      MYSQL_PASSWORD: dalongrong
      TZ: Asia/Shanghai
  postgres:
    build: 
     context: ./pg
     dockerfile: Dockerfile
    ports:
    - "5432:5432"
    environment:
    - "POSTGRES_PASSWORD:dalong"
  pgexporter:
    image: wrouesnel/postgres_exporter:latest
    ports:
    - 9187:9187
    environment:
    - DATA_SOURCE_NAME=postgresql://postgres:dalong@postgres:5432/postgres_exporter?sslmode=disable
  • pg dockerfile
FROM postgres:latest
RUN set -ex; \
    apt-get update; \
 apt-get install -y gnupg apt-transport-https; \
 echo 'deb https://repo.percona.com/apt stretch main' > /etc/apt/sources.list.d/percona.list; \
 apt-get update && apt-get install -y --allow-unauthenticated pmm-client; \
 apt-get remove --purge -y gnupg apt-transport-https; \
 apt-get autoremove -y --purge; \
 rm -rf /var/lib/apt/lists/* \
 true
COPY init.sql /docker-entrypoint-initdb.d/
COPY initpmm.sh /root/
 
 

说明:
主要是initpmm.sh 文件,进行exporter metrics 注册

 
#!/bin/sh
while ! pmm-admin config --client-name pg1 --server pmmserver
do
    sleep 1
done
pmm-admin add external:metrics postgresql-demo pgexporter:9187
 
  • mysql dockerfile
FROM mysql:5.7.16
RUN set -ex; \
    apt-get update; \
 apt-get install -y gnupg apt-transport-https; \
 echo 'deb https://repo.percona.com/apt stretch main' > /etc/apt/sources.list.d/percona.list; \
 apt-get update && apt-get install -y --allow-unauthenticated pmm-client; \
 apt-get remove --purge --force-yes -y apt-transport-https; \
 apt-get autoremove -y --force-yes --purge; \
 rm -rf /var/lib/apt/lists/* \
 true
COPY initpmm.sh /root/
 

说明:
主要是initpmm.sh 文件,进行exporter metrics 注册

 
#!/bin/sh
while ! pmm-admin config --client-name mysql1 --server pmmserver
do
    sleep 1
done
pmm-admin add external:metrics mysql-demo mysqlexporter:9104
 
 

启动&&配置

  • 启动
docker-compose up -d
  • 注册mysql 以及pg metrics
 docker-compose exec mysql sh /root/initpmm.sh
OK, PMM server is alive.
PMM Server | pmmserver 
Client Name | mysql1
Client Address | 172.24.0.8 
External metrics added.
docker-compose exec postgres sh /root/initpmm.sh
OK, PMM server is alive.
PMM Server | pmmserver 
Client Name | pg1
Client Address | 172.24.0.6 
External metrics added.
  • prometheus target 效果

  • grafana 效果

  • 配置gogs导入部分数据

  • pg 导入数据
docker-compose up pgloader-mysql

效果

pgloader-mysql_1 | WARNING:
pgloader-mysql_1 | Couldn't re-execute SBCL with proper personality flags (/proc isn't mounted? setuid?)
pgloader-mysql_1 | Trying to continue anyway.
pgloader-mysql_1 | 2019-08-05T14:26:59.075000Z LOG pgloader version "3.6.2~devel"
pgloader-mysql_1 | 2019-08-05T14:26:59.212000Z LOG Migrating from #<MYSQL-CONNECTION mysql://root@mysql:3306/gogs {1006496943}>
pgloader-mysql_1 | 2019-08-05T14:26:59.213000Z LOG Migrating into #<PGSQL-CONNECTION pgsql://postgres@postgres:5432/appdemo {10066DF6D3}>
pgloader-mysql_1 | 2019-08-05T14:27:01.364000Z LOG report summary reset
pgloader-mysql_1 | table name errors rows bytes total time
pgloader-mysql_1 | ----------------------------- --------- --------- --------- --------------
pgloader-mysql_1 | fetch meta data 0 119 0.256s
pgloader-mysql_1 | Create Schemas 0 0 0.013s
pgloader-mysql_1 | Create SQL Types 0 0 0.027s
pgloader-mysql_1 | Create tables 0 72 0.411s
pgloader-mysql_1 | Set Table OIDs 0 36 0.004s
pgloader-mysql_1 | ----------------------------- --------- --------- --------- --------------
pgloader-mysql_1 | gogs.access 0 0 0.032s
pgloader-mysql_1 | gogs.access_token 0 0 0.021s
pgloader-mysql_1 | gogs.action 0 0 0.078s
pgloader-mysql_1 | gogs.attachment 0 0 0.113s
pgloader-mysql_1 | gogs.collaboration 0 0 0.030s
pgloader-mysql_1 | gogs.deploy_key 0 0 0.068s
pgloader-mysql_1 | gogs.comment 0 0 0.122s
pgloader-mysql_1 | gogs.follow 0 0 0.075s
pgloader-mysql_1 | gogs.issue 0 0 0.102s
pgloader-mysql_1 | gogs.email_address 0 0 0.142s
pgloader-mysql_1 | gogs.hook_task 0 0 0.157s
pgloader-mysql_1 | gogs.issue_user 0 0 0.114s
pgloader-mysql_1 | gogs.issue_label 0 0 0.135s
pgloader-mysql_1 | gogs.login_source 0 0 0.130s
pgloader-mysql_1 | gogs.label 0 0 0.154s
pgloader-mysql_1 | gogs.mirror 0 0 0.154s
pgloader-mysql_1 | gogs.milestone 0 0 0.139s
pgloader-mysql_1 | gogs.org_user 0 0 0.122s
pgloader-mysql_1 | gogs.notice 0 0 0.154s
pgloader-mysql_1 | gogs.protect_branch 0 0 0.128s
pgloader-mysql_1 | gogs.protect_branch_whitelist 0 0 0.134s
pgloader-mysql_1 | gogs.public_key 0 0 0.141s
pgloader-mysql_1 | gogs.pull_request 0 0 0.147s
pgloader-mysql_1 | gogs.release 0 0 0.170s
pgloader-mysql_1 | gogs.repository 0 0 0.143s
pgloader-mysql_1 | gogs.star 0 0 0.146s
pgloader-mysql_1 | gogs.team 0 0 0.149s
pgloader-mysql_1 | gogs.team_user 0 0 0.149s
pgloader-mysql_1 | gogs.team_repo 0 0 0.166s
pgloader-mysql_1 | gogs.two_factor_recovery_code 0 0 0.151s
pgloader-mysql_1 | gogs.two_factor 0 0 0.155s
pgloader-mysql_1 | gogs."user" 0 1 0.3 kB 0.167s
pgloader-mysql_1 | gogs.upload 0 0 0.178s
pgloader-mysql_1 | gogs.watch 0 0 0.162s
pgloader-mysql_1 | gogs.version 0 1 0.0 kB 0.179s
pgloader-mysql_1 | gogs.webhook 0 0 0.167s
pgloader-mysql_1 | ----------------------------- --------- --------- --------- --------------
pgloader-mysql_1 | COPY Threads Completion 0 4 0.316s
pgloader-mysql_1 | Create Indexes 0 83 0.644s
pgloader-mysql_1 | Index Build Completion 0 83 0.222s
pgloader-mysql_1 | Reset Sequences 0 36 0.026s
pgloader-mysql_1 | Primary Keys 0 36 0.049s
pgloader-mysql_1 | Create Foreign Keys 0 0 0.000s
pgloader-mysql_1 | Create Triggers 0 0 0.001s
pgloader-mysql_1 | Set Search Path 0 1 0.002s
pgloader-mysql_1 | Install Comments 0 0 0.000s
pgloader-mysql_1 | ----------------------------- --------- --------- --------- --------------
pgloader-mysql_1 | Total import time ? 2 0.3 kB 1.260s
pmm-docker_pgloader-mysql_1 exited with code 0
  • mysql 指标信息查看

  • pg 指标查看

  • 另外一种添加数据库以及metrics 的方法
    实际上pmm也提供了通过界面添加的方法,如下图

添加mysql

  • 查询分析界面

说明

pmm 提供的指标模版还是很全的,包含了我们实际数据库分析中的很多方便的指标,可以帮助我们方便的分析系统的瓶颈,同时官方文档
也比较全的提供了操作手册(有pdf版本的)

参考资料

https://www.percona.com/doc/percona-monitoring-and-management/index.html
https://github.com/rongfengliang/pmm-learning

pmm docker-compose 运行试用的更多相关文章

  1. dotnet跨平台 - 使用Nginx+Docker Compose运行.NETCore项目

    参考文档: https://docs.docker.com/install/linux/docker-ce/centos/ http://www.dockerinfo.net/document htt ...

  2. .NET遇上Docker - 使用Docker Compose组织Ngnix和.NETCore运行

    本文工具准备: Docker for Windows Visual Studio 2015 与 Visual Studio Tools for Docker 或 Visual Studio 2017 ...

  3. Docker:Docker Compose 详解

    Docker Compose 概述与安装? 前面我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build.docker run 等命令操作容器.然而微服务架 ...

  4. 使用 pycharm调试docker环境运行的Odoo

    2019日 星期一 安装docker windows系统,参考 docker官方文档 Mac系统,参考 docker官方文档 构建自定义ODOO镜像 标准ODOO镜像可能不包含特别的python模块, ...

  5. [phvia/dkc] Docker Compose 快速构建(LNMP+Node)运行环境

    快速构建(LNMP+Node)运行环境. dkc 在此作为 docker-compose 的缩写,你可以理解为 alias dkc=docker-compose 准备 安装 docker 选择1) 从 ...

  6. ASP.NET Core 如何在运行Docker容器时指定容器外部端口(docker compose)

    前面我写了一系列关于持续集成的文章,最终构建出来的镜像运行之后,应该会发现每次构建运行之后端口都变了,这对于我们来说是十分不方便的,所以我们可以通过修改docker compose的配置文件来完成我们 ...

  7. torodb docker 运行试用

    torodb 可以方便的让你迁移到pg,同时使用标准原生的sql 查询 使用官方的docker-compose 进行测试 环境准备 docker-compose 文件 wget https://raw ...

  8. 利用 Docker Compose 搭建 SpringBoot 运行环境(超详细步骤和分析)

    0.前言 相信点进来看这篇文章的同学们已经对 Docker Dompose 有一定的了解了,下面,我们拿最简单的例子来介绍如何使用 Docker Compose 来管理项目. 本文例子: 一个应用服务 ...

  9. [Docker6] Docker compose多容器运行与管理

    六.Docker compose docker compose就是通过yml文件来定义和运行多个容器docker应用程序的工具,三步过程就能跑起一个compose: 定义应用程序的环境(yml中) 定 ...

  10. Docker compose学习笔记

    一.compose compose 作用 你的应用可能需要很多个服务,比如web服务,数据库服务,缓存服务等等.我们可以把这些服务放到单独的容器里面,如果手工去配置这些服务会有些麻烦,docker c ...

随机推荐

  1. Django 安装使用

    Django 安装使用 Django 介绍: Django是一个开放源代码的Web应用框架,由Python写成.采用了MVT的框架模式,即模型M,视图V和模版T.它最初是被开发来用于管理劳伦斯出版集团 ...

  2. SQL系列(六)—— 过滤(where)

    在日常的应用中的,大多数业务场景都只是需要特定的数据,所以能够过滤筛选数据显得尤为至关重要.从需求角度分析,需要特定的数据,即需要一定条件的数据,即从全量数据中根据特定条件过滤出需要的数据. 如果需要 ...

  3. 转Tasklist(windows)

    Windows 进程 Tasklist查看 与 Taskkill结束   转自https://blog.csdn.net/wangmx1993328/article/details/80923829 ...

  4. 服务器同时安装python2支持的py-faster-rcnn以及python3支持的keras

    最近把服务器折腾一下,搞定这两个.

  5. ER图VISIO 引入Mysql 反向工程

    1. 先到MySQL官方站点下载 MySQL Connector/ODBC 5.1并安装.下载地址为http://dev.mysql.com/downloads/connector/odbc/5.1. ...

  6. typescript nodejs 依赖注入实现

    依赖注入通常也是我们所说的ioc模式,今天分享的是用typescript语言实现的ioc模式,这边用到的主要组件是 reflect-metadata 这个组件可以获取或者设置元数据信息,它的作用是拿到 ...

  7. WinForm的TextBox限制只能输入数字并且屏蔽默认右键菜单

    基于Window消息实现 class TextBoxExt:TextBox { private const int WM_RBUTTONDOWN = 0x0204; private const int ...

  8. C#视频拍照、视频录制项目示例

    1.AForge 2.WPFMediaKit 3.ffmpeg

  9. Neo私钥到地址

    基础名词 Neo是个区块链工程,地址,公钥,私钥,地址脚本,base58,sha256,ripemd160,ECCsa,secp256k1,secp25r1这些词都是区块链技术相关的,或是新东西或者有 ...

  10. python爬虫---单线程+多任务的异步协程,selenium爬虫模块的使用

    python爬虫---单线程+多任务的异步协程,selenium爬虫模块的使用 一丶单线程+多任务的异步协程 特殊函数 # 如果一个函数的定义被async修饰后,则该函数就是一个特殊的函数 async ...