PerconaMonitoringandManagement(PMM)是一款开源的用于管理和监控MySQL和MongoDB性能的开源平台,通过PMM客户端收集到的DB监控数据用第三方软件Grafana画图展示出来。在这个产品之前,Percona提供了Zabbix和Cacti的图形模板,也许是考虑到了用户部署起来繁琐等问题,Percona发布了PMMDocker镜像,用户只需要下载镜像运行就全部搞定,开箱即用相当easy!
PMM架构如下图所示:
模块说明:
QueryAnalytics(QAN):用来展示MySQL慢查询日志。
Grafana:将Prometheus里面的数据画图展示出来。
架构原理:
客户端(agent)向consul的kv中注册自己监控的服务信息
存储端(prometheus)从consul提供的服务发现服务地址去分别获取agent注册的信息,然后去一个个抽取exporter产生的监控数据
Grafana通过读取存储端存储的数据进行展示
图中的地址不是直接对外暴露的,有一层nginx转发
QAN的查询语句分析功能是通过另外的QAN服务单独进行分析并推入prometheus的
有一个MySQL实例用于存储整套系统的元数据信息。
还有一个大多数人不会投入使用的Orchestrator
三、部署
我们这边使用docker安装pmmserver方便快捷
使用Docker运行PMM服务器
PMM服务器的Docker映像位于perconapmm-server公共存储库中。如果打算从Docker镜像运行PMMServer,则主机必须能够运行Docker1.12.6或更高版本,并具有网络访问权限。
1、docker安装
yuminstall-ydocker
systemctlstartdocker
2、PMMServer安装
(1)下载PMMServerDocker镜像
设置阿里云镜像库加速docker下载
mkdir-petc/docker
cat>/etc/docker/daemon.json< { } EOF systemctldaemon-reload systemctlrestartdocker 第1步。拉取PMM服务器映像 dockerpullperconapmm-server:latest 第2步。创建一个PMM数据容器 dockercreate\ -vopt/prometheus/data\ -vopt/consul-data\ -vvar/lib/mysql\ -vvar/lib/grafana\ --namepmm-data\ percona/pmm-server:latestbin/true dockerrun-d-p8080:80--volumes-frompmm-data--namepmm-server-eMETRICS_RETENTION=336h--restartalwayspercona/pmm-server:latest 至此pmm构建完毕 查看Doker运行状态 5、PMMClient安装 PMMClient是安装在你要监视的MySQL或MongoDB主机上的一组代理组件。组件收集关于一般系统和数据库性能的各种数据,并将该数据发送到相应的PMM服务器组件。 主要有以下5个部分 安装步骤 网上常见的标注安装步骤主要如下 (1)安装pmm-client 方法1:此方法常常由于安装pmm-client时下载失败,也可以采用tar安装包解压安装。 step1制作yum源 step2安装 yum-yinstallpmm-client 方法2:tar包方式安装 tep1下载执行文件 step2解压可执行文件 tar-zxvfpmm-client-1.1.1.tar.gz step3进入解压后的文件 cdpmm-client-1.1.1 step4执行install文件,进行安装 ./install (2)连接PMMServer 安装PMMClient之后,它不会自动连接到PMMServer。要将客户端连接到PMM服务器,请使用该命令指定IP地址。 pmm-adminconfig--server10.1.0.44:8080 注意,如果PMMServer更改了默认端口80,请在服务器的IP地址之后指定。 如果成功执行,也说明了PMMClient已成功安装。 返回结果如下,验证OK。 3)增加MySQL监控 增加pmm-client监控账号 GRANTSELECT,PROCESS,SUPER,REPLICATIONCLIENT,RELOADON*.*TO'pmm'@'localhost'IDENTIFIEDBY'xxxxxxx'WITHMAX_USER_CONNECTIONS10; GRANTSELECT,UPDATE,DELETE,DROPONperformance_schema.*TO'pmm'@'localhost';