pmm docker-compose 运行试用
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 运行试用的更多相关文章
- dotnet跨平台 - 使用Nginx+Docker Compose运行.NETCore项目
参考文档: https://docs.docker.com/install/linux/docker-ce/centos/ http://www.dockerinfo.net/document htt ...
- .NET遇上Docker - 使用Docker Compose组织Ngnix和.NETCore运行
本文工具准备: Docker for Windows Visual Studio 2015 与 Visual Studio Tools for Docker 或 Visual Studio 2017 ...
- Docker:Docker Compose 详解
Docker Compose 概述与安装? 前面我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build.docker run 等命令操作容器.然而微服务架 ...
- 使用 pycharm调试docker环境运行的Odoo
2019日 星期一 安装docker windows系统,参考 docker官方文档 Mac系统,参考 docker官方文档 构建自定义ODOO镜像 标准ODOO镜像可能不包含特别的python模块, ...
- [phvia/dkc] Docker Compose 快速构建(LNMP+Node)运行环境
快速构建(LNMP+Node)运行环境. dkc 在此作为 docker-compose 的缩写,你可以理解为 alias dkc=docker-compose 准备 安装 docker 选择1) 从 ...
- ASP.NET Core 如何在运行Docker容器时指定容器外部端口(docker compose)
前面我写了一系列关于持续集成的文章,最终构建出来的镜像运行之后,应该会发现每次构建运行之后端口都变了,这对于我们来说是十分不方便的,所以我们可以通过修改docker compose的配置文件来完成我们 ...
- torodb docker 运行试用
torodb 可以方便的让你迁移到pg,同时使用标准原生的sql 查询 使用官方的docker-compose 进行测试 环境准备 docker-compose 文件 wget https://raw ...
- 利用 Docker Compose 搭建 SpringBoot 运行环境(超详细步骤和分析)
0.前言 相信点进来看这篇文章的同学们已经对 Docker Dompose 有一定的了解了,下面,我们拿最简单的例子来介绍如何使用 Docker Compose 来管理项目. 本文例子: 一个应用服务 ...
- [Docker6] Docker compose多容器运行与管理
六.Docker compose docker compose就是通过yml文件来定义和运行多个容器docker应用程序的工具,三步过程就能跑起一个compose: 定义应用程序的环境(yml中) 定 ...
- Docker compose学习笔记
一.compose compose 作用 你的应用可能需要很多个服务,比如web服务,数据库服务,缓存服务等等.我们可以把这些服务放到单独的容器里面,如果手工去配置这些服务会有些麻烦,docker c ...
随机推荐
- 揭秘丨7分钟看懂华为云鲲鹏Redis背后的自研技术【华为云技术分享】
2019年5月,华为云发布全球首个基于自研ARM架构的分布式缓存鲲鹏Redis,搭载华为LibOS+华为编译器+安全容器引擎三项黑科技,在保证Redis强劲高性能外,还降低客户30%的使用成本,真正实 ...
- (原创)C#操作MYSQL数据库
应用程序对数据库的操作都是只有4个:增,删,改,查. 只有”查”的操作需要使用适配器来存储查询得到的数据.其它3个操作不需要用到适配器. 不同的数据库有共同操作方法:都要建立连接对象,连接对象要有连接 ...
- docker,containerd,runc,docker-shim之间的关系
原文:https://blog.csdn.net/u013812710/article/details/79001463 关于containerd关于containerd的一些详解介绍,请参考cont ...
- MTSC 2019 深圳站精彩议题第一波更新! | 七五折门票火热售票中
MTSC(中国移动互联网测试开发大会)到今年已经成功举办了五届,这四年里,TesterHome社区一直秉持着务实.能落地.有深度.高质量.重分享的原则,从讲师邀请到内容筛选都严格把控,只为将最能提 ...
- 【转载】 C#中手动创建一个DataTable对象并写入数据
在C#操作集合数据的过程中,有时候需要手动创建一个DataTable对象,并手动设置DataTable对象的Columns列名等信息,最后再往手动创建的DataTable对象中写入相应的数据信息,此时 ...
- [echart] webpack中安装和使用
安装echart npm install echarts --save 全量引入 可以直接在项目代码中 require('echarts') 得到 ECharts. 官方示例 var echarts ...
- excel 宏循环行数据 ,Excel统计所有sheet数据行数 VBA
Sub fun1() '统计每一个sheet有多少行数据 Set s1 = Sheets("Sheet1") 'totalok = 0 To Sheets.Count s1.Cel ...
- vue数组更新界面无变化
1. vue数组更新界面无变化 1.1. 说明 对数组进行更新或者添加,一定要注意方式,我的情况是数组套数组,双重循环,在造数据的时候,不断从尾部添加数据,所以写成了如下形式,每次下拉都会去加载一批相 ...
- VsCode中编写python环境配置
1. VsCode中编写python环境配置 1.1. 前言 有过开发经验都知道idea一系列的软件虽然功能比较多,但比较容易卡,电脑不好还真容易上火,这里我想要入门python,还是选了款vscod ...
- CSRF攻击与防御(转)
CSRF概念:CSRF跨站点请求伪造(Cross—Site Request Forgery),跟XSS攻击一样,存在巨大的危害性,你可以这样来理解: 攻击者盗用了你的身份,以你的名义发送 ...