PMM数据库性能监控工具调研
介绍
Percona Monitoring and Management (PMM)是一款开源的用于管理和监控MySQL和MongoDB性能的开源平台,通过PMM客户端收集到的DB监控数据用第三方软件Grafana画图展示出来。
PMM提供了对MyISAM、InnoDB、TokuDB和PXC/Glarera的监控,另外也提供了Query Analytics的功能,可以检视执行了哪些SQL指令,并对执行效能较差的语法进行优化。另外在新版本还支持了MySQL复制拓扑图结构构造。Demo官网:http://pmmdemo.percona.com
PMM针对操作系统的部份也提供了硬盘、网络、CPU和RAM的监控,特别的是它提供了Context switches、Processes和interrupts的监控,Context Switches可以看到CPU上下切换文的状况,Processes可以方便了解系统有多少程序在等待I/O。
架构解析
Server组件
Query Analytics(QAN)是用来搜集指令并作性能分析的,其组件分别说明如下:
QAN API:作为percona-qan-agent后端储存和读取Query资料用。
QAN APP:提供图形化分析介面。
Metrics Monitor(MM)组件提供了MySQL和MongoDB历史监控信息,其组件分别说明如下:
Prometheus:一个开源的服务监控系统和时间序列数据库,它连接到PMM Client上的exporter聚集DB的监控数据。
Consul:提供API让PMM Client可以远端替Prometheus新增、移除hosts,同时它也储存了监控的metadata。
Grafana:这是一个第三方Dashboard和图形构建器,用于可视化Prometheus中聚合的数据,以Web呈现。
Percona Dashboards:是由Percona开发的一组用于Grafana的仪表板。
上述的2个Web页面都能从PMM Landing Page(就是PMM首页)直接连结。
Client组件
- ppm-admin:命令行的PMM Client管理工具,用来新增、移除监控的资料Instance。
- percona-qan-agent:用于搜集QAN查询效能性能资料,同时连结和传送资料给PMM Server中的QAN API。
- node_exporter:Prometheus exporter用于搜集一般系统信息(https://github.com/prometheus/node_exporter)。
- mysqld_exporter:Prometheus exporter用于搜集MySQL Server的信息(https://github.com/percona/mysqld_exporter)。
- mongodb_exporter:Prometheus exporter用于搜集MongoDB server的信息(https://github.com/percona/mongodb_exporter)。
安装
安装准备
PMM Server需要docker环境,所以必须先安装docker,以下以CentOS 7为例,安装Docker CE
|
待以上操作完成后需要如下配置:
|
说明:由于docker默认使用的日志等级为info、默认的镜像及其相关信息生成在/var/lib/docker下,所以用以上两条命令将日志等级改为warn、将镜像及其相关信息生成的路径指定到/docker下
|
说明:由于docker参数–config-file的默认值为/etc/docker/docker-daemon.json,所以我们直接创建并修改registry-mirrors为国内加速站点,并且将最大并发下载数由5提高20
|
错误处理
Docker 启动报错: Error starting daemon: Error initializing network controller: list bridge addresses failed: no available network
看到这样一句话:
failed to start daemon: Error initializing network controller: list bridge addresses failed: PredefinedLocalScopeDefaultNetworks List: [172.17.0.0/16 172.18.0.0/16 172.19.0.0/16 172.20.0.0/16 172.21.0.0/16 172.22.0.0/16 172.23.0.0/16 172.24.0 May 19 17:21:44 game143 systemd[1]: docker.service: main process exited, code=exited, status=1/FAILURE
查看本地网络:
|
没有 docker0 的桥接网络, 手动加一个即可
|
此时多了一个docker0:
|
重启docker即可
安装PMM Server
PMM安装有三种方式:docker、虚拟机和AWS marketplace,推荐使用docker方式安装。pmm server容器镜像发布在https://hub.docker.com/r/percona/pmm-server/tags/,docker版本必须高于1.12.6。
注意事项:对于每个受监视的数据库节点将数据保留时间设置为一周,PMM大约需要1GB的存储空间。每添加 一个受监视的数据库节点需要的最小内存为2 GB,但是当您添加更多节点时它不是线性增加的。 例如,应使用16 GB轻松处理来自20个节点的数据。
PMM Server部署范围三步:获取镜像,创建持久化的pmm data镜像以及创建启动pmm server镜像。
拉取PMM Server的Docker镜像
从docker hub拉取最新的镜像版本
docker pull percona/pmm-server:latest
注意:由于某些原因导致速度缓慢,可以修改docker源到国内镜像加速
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s [http://396e823a.m.daocloud.io](http://396e823a.m.daocloud.io/)
创建持久化的pmm-data镜像
docker create -v /opt/prometheus/data -v /opt/consul-data -v /var/lib/mysql -v /var/lib/grafana --name pmm-data percona/pmm-server:latest /bin/true
参数说明:
docker create:该命令指示Docker守护程序从映像创建容器。
-v:该选项初始化数据卷的容器。
--name:该选项为你可以用于引用Docker网络中的容器的容器分配一个自定义名称。
percona/pmm-server:latest :是导出容器的镜像名称和版本标签。
/bin/true :是容器运行的命令。
注:该镜像不启动,只为了保证pmm server的数据持久化以用于版本升级等场景。注意不要移动或者重新创建该镜像,除非确保数据不再需要。
注:确保镜像-v的数据卷存在,并最好是单独绑定挂载。创建并启动PMM-Server容器
|
此容器不运行,它只是存在,以确保您在升级到较新的pmm-server时保留所有PMM数据。不要删除或重新创建此容器,除非您打算清除所有PMM数据并重新开始。
下面解释一下docker参数的具体意义:
|
其他参数说明:
通过docker run的-e参数可以增加pmm-server启动的额外功能
|
露个脸:
安装PMM Client
PMM Client支持yum安装或者源码安装,方便起见推荐CentOS系统使用yum添加repository安装:
下载安装对应源的rpm包(巨慢,建议翻墙或者上官网直接下RPM包)
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
notes: 如果您以前启用过实验性或测试性Percona存储库,请不要忘记禁用它们并启用原始存储库的发布组件,如下所示:
sudo percona-release disable all
sudo percona-release enable original release安装
pmm2-client
包yum install pmm2-client
一旦PMM Client安装完成后,使用
pmm-admin config
命令设置你的PMM Sercer IP来把你的client节点注册到对应的PMM Server上
|
安装PMM Client后的配置
安装好MySQL后修改监听地址:
将bind改为:
bind-address = 0.0.0.0开启慢查询
slow_query_log=1
long_query_time=1
slow_query_log_file=/var/lib/mysql/mysql-slow.log对root用户做授权,允许远程访问
mysql> grant all PRIVILEGES on *.* to root@'%' identified by 'root';
mysql> flush privileges;使用pmm-admin config –server命令添加客户端
参数说明:
Usage:
pmm-admin config [flags]
Examples:
pmm-admin config --server 192.168.56.100
pmm-admin config --server 192.168.56.100:8000
pmm-admin config --server 192.168.56.100 --server-password abc123
Flags:
--bind-address string bind address, also local/private address that is mapped from client address via NAT/port forwarding (defaults to the client address)
--client-address string client address, also remote/public address for this system (if omitted it will be automatically detected by asking server)
--client-name string client name (defaults to the system hostname)
--force force to set client name on initial setup after uninstall with unreachable server
-h, --help help for config
--server string PMM server address, optionally following with the :port (default port 80 or 443 if using SSL)
--server-insecure-ssl enable insecure SSL (self-signed certificate) to communicate with PMM Server
--server-password string define HTTP password configured on PMM Server
--server-ssl enable SSL to communicate with PMM Server
--server-user string define HTTP user configured on PMM Server (default "pmm")
Global Flags:
-c, --config-file string PMM config file (default "/usr/local/percona/pmm-client/pmm.yml")
--skip-root skip UID check (experimental)
--timeout duration timeout (default 5s)
--verbose verbose output看到以下输出说明正确连接
使用
配置PMM Client
在未添加任何监控的状态下,pmm-admin list
应有如下输出:
添加监控实例到PMM
可以在PMM Client端使用命令
pmm-admin add mysql --query-source=slowlog --username=root --password=PASSWORD sl-mysql 127.0.0.1:3306
此时pmm-admin list
输出:
查看dashboard, 可以看到对应client已经添加到PMM Server
添加远程MongoDB实例到PMM
客户端配置
|
mongo服务器配置
|
对访问容器IP做限制
查看Docker对应chain的规则
|
默认情况下Docker对应容器是对公网开的,为了安全考虑可以对访问IP做限制,限制不能直接在iptables的INPUT链里面加,需要在对应Docker的chain中做限制
输入iptables -R DOCKER N
(N为规则num)可以修改对应规则
|
,同理iptables -I DOCKER xxx
添加规则。
附件
从文件导入导出镜像
保存镜像为文件
|
|
导入文件为镜像
|
给镜像打标签
使用docker tag
命令:
|