PMM是一个免费的、开源的监控MySQL、PostgreSQL、MongoDB、ProxySQL以及它们运行的服务的工具。
PMM可以提高数据库的性能、简化它们的管理、增强了数据库的安全性。
PMM可以检测数据库和宿主机并获取数千种可操作的性能标准。
PMM提供了一种web的界面,该界面可以虚拟显示了各种数据。
PMM附加的功能包括检查数据库的各种安全预警问题。
PMM的web界面的主页如下图所示:

PMM运行在云端、本地或者混合平台,开源数据库的资深专家技术和活跃的开发者用户的社区是PMM的主要技术支持。
一个最小的PMM由一个服务端和一个被监控的系统上的客户端。
三种方式PMM服务端安装如下:
下载并校验脚本,赋予执行权限并运行脚本,如下所示:
Linux:
curl -fsSL -O https://raw.githubusercontent.com/percona/pmm/PMM-2.0/get-pmm.sh -O https://raw.githubusercontent.com/percona/pmm/PMM-2.0/.sha256-oneline &&
sha256sum .sha256-oneline -c &&
chmod +x ./get-pmm.sh &&
./get-pmm.sh
MacOS:
curl -fsSL -O https://raw.githubusercontent.com/percona/pmm/PMM-2.0/get-pmm.sh -O https://raw.githubusercontent.com/percona/pmm/PMM-2.0/.sha256-oneline &&
shasum .sha256-oneline -c &&
chmod +x ./get-pmm.sh &&
./get-pmm.sh
该脚本执行后:
安装docker1.12.6(或更高版本)
拉取镜像
docker pull percona/pmm-server:2
创建一个持久的数据容器
docker create --volume /src
--name pmm-data
percona/pmm-server:2 /bin/true
运行镜像
docker run --detach --restart always
--publish 443:443
--volumes-from pmm-data
--name pmm-server
percona/pmm-server:2
在浏览器访问https://localhost:443查看PMM的用户接口(如果你是远程的宿主机,将l宿主机的IP或者服务名替换localhost)


在需要被监控的服务节点上安装并运行PMM客户端
拉取PMM客户端的docker镜像
doker pull
percona/pmm-client:2
创建数据容器
docker create
--volume /src
--name pmm-client-data
percona/pmm-client:1 /bin/true
设置PMM_SERVER为PMM 服务端的IP地址,并运行容器
PMM_SERVER=X.X.X.X:443
docker run
--rm
--name pmm-client
-e PMM_AGENT_SERVER_ADDRESS=${PMM_SERVER}
-e PMM_AGENT_SERVER_USERNAME=admin
-e PMM_AGENT_SERVER_PASSWORD=admin
-e PMM_AGENT_SERVER_INSECURE_TLS=1
-e PMM_AGENT_SETUP=1
-e PMM_AGENT_CONFIG_FILE=pmm-agent.yml
--volumes-from pmm-client-data
percona/pmm-client:2
如果之前使用过 percona-release,需要disable并且re-enable仓库:
percona-release disable all
percona-release enable original release
Debian-based
配置仓库
wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
dpkg -i percona-release_latest.generic_all.deb
安装PMM客户端包
有root权限:
apt update
apt install -y pmm2-client
检查
pmm-admin --version
注册节点
通过PMM服务端注册客户端节点
pmm-admin config --server-insecure-tls --server-url=https//admin:admin@X.X.X.X.443
备注:PMM服务端必须通过安全的信道注册客户端,如果用http作为服务URL,PMM将会通过https的443端口尝试连接。如果没有建立TLS连接会产生错误,你必须用https合适的安全端口进行连接。
Red Hat-based
配置仓库
yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm
安装PMM客户端包
yum install -y pmm2-client
检验
pmm-admin --version
注册节点 (同上)
对于没有root权限的用户,二进制包是PMM客户端安装的唯一方式
下载PMM客户端包
wget https://downloads.percona.com/downloads/pmm2/2.20.0/binary/tarball/pmm2-client-2.20.0.tar.gz
下载PMM客户端包的校验文件
wget https://downloads.percona.com/downloads/pmm2/2.20.0/binary/tarball/pmm2-client-2.20.0.tar.gz.sha256sum
校验下载包
sha256sum -c pmm2-client-2.20.0.tar.gz.sha256sum
解压压缩包并进入到目录下
tar xfz pmm2-client-2.20.0.tar.gz && cd pmm2-client-2.20.0
根据用户的权限选择下列的命令
没有root权限:
export PMM_DIR=YOURPATH
备注:真正的path会替换YOURPAHT,并且有权限进入YOURPATH;Node,MySQL,PostgreSQL的导出是无效的。
有root权限:
export PMM_DIR=/usr/local/percona/pmm2
运行安装包
有root权限(如果你跳过了步骤5中没有root权限的步骤):
./install_tarball
改变path
PATH=$PATH:$PMM_DIR/bin
设置客户端(根据权限选择命令)
有root权限:
pmm-agent setup --config-file=/usr/local/percona/pmm2/config/pmm-agent.yaml --server-address=192.168.1.123 --server-insecure-tls --server-username=admin --server-password=admin
没有root权限:
pmm-agent setup --config-file=${PMM_DIR}/config/pmm-agent.yaml --server-address=192.168.1.123 --server-insecure-tls --server-username=admin --server-password=admin --paths-tempdir=$PMM_DIR/tmp --paths-exporters_base=$PMM_DIR/exporters --paths-node_exporter=$PMM_DIR/exporters/node_exporter --paths-mongodb_exporter=$PMM_DIR/exporters/mongodb_exporter --paths-postgres_exporter=$PMM_DIR/exporters/postgres_exporter --paths-proxysql_exporter=$PMM_DIR/exporters/proxysql_exporter --paths-azure_exporter=$PMM_DIR/exporters/azure_exporter --paths-pt-summary=$PMM_DIR/tools/pt-summary --paths-pt-pg-summary=$PMM_DIR/tools/pt-pg-summary --paths-pt-mongodb-summary=$PMM_DIR/tools/pt-mongodb-summary --paths-pt-mysql-summary=$PMM_DIR/tools/pt-mysql-summary
运行客户端
pmm-agent --config-file=${PMM_DIR}/config/pmm-agent.yaml
打开一个新的终端并检查
pmm-admin status
在每个PMM客户端上,需要配置被监控的节点或服务并添加到PMM服务端的存储区。
检查:
用一个非超级用户连接到PMM客户端去监控数据库实例是一个好的尝试;下面这个例子创建了数据库用户pmm,密码:pass,并分配了必要的权限:
CREATE USER 'pmm'@'localhost' IDENTIFIED BY 'pass' WITH MAX_USER_CONNECTIONS 10;
GRANT SELECT, PRECESS ,SUPER,REPLICATION CLIENT,RELOAD ON *.* TO 'pmm'@'localhost';
有两种选择:慢查询日志和性能指标。
当两种资源可以同时选择的时候,我们建议只选择一种,两者在导出的数据中有些重叠,每一个会导致一点性能的损耗。这个选择也取决于你的MySQL实例的版本和变量以及你要查看的详细程度。
下面是这两种资源的有点和缺点:

数据资源的建议如下:
性能指标
应用的版本需求

为了使用性能指标,需要设置以下变量:

例子
配置文件
performance_schema=ON
performance-schema-instrument= 'statement/%=ON'
performance-schema-consumer-statement-digest=ON
innodb_monitor_enable=all
会话
(performance_schema不能在会话中设置,必须通过服务的重启才可以)
UPDATE performance_schema.setup_consumers SET ENABLE='YES' WHERE NAME LIKE '%statements%';
SET GLOBAL innodb_monitor_enable=all;
响应时间查询
显示花费在各种活动的时间占用比例。
应用的版本需求:

变量设置:

设置变量的方式(配置文件):
query_response_time_stats=ON
需要安装插件(会话)
检查/usr/lib/mysql/plugin/query_response_time.so是否存在
安装插件并激活
对于 Percona Server for MySQL 5.7:
INSTALL PLUGIN QUERY_RESPONSE_TIME_AUDIT SONAME 'query_response_time.so';
INSTALL PLUGIN QUERY_RESPONSE_TIME SONAME 'query_response_time.so';
INSTALL PLUGIN QUERY_RESPONSE_TIME_READ SONAME 'query_response_time.so';
INSTALL PLUGIN QUERY_RESPONSE_TIME_WRITE SONAME 'query_response_time.so';
SET GLOBAL query_response_time_stats = ON;
表状态
当表的数量超过了默认的上限(1000)时,一些表的度量会自动地禁用,这一特性避免了PMM客户端影响数据库服务地性能。
这个上限的值可以在添加服务的命令行中通过pmm-admin两个选项进行设置,该选项的描述如下所示:

用户统计
显示用户的活动、个人的表和索引操作的细节等内容。
应用版本需求:

例子:
配置文件
userstat=ON
会话
SET GLOBAL userstat =ON;
当你有配置好的数据库服务,你可以通过用户界面或者命令行添加一个MySQL服务。
当通过命令行进行添加服务时,你必须用 pmm-admin --query-source=SOURCE 选项来匹配你选择并未数据库服务配置的资源。
通过PMM的用户界面,你可以选择性能指标,或者取消性能指标选择慢查询日志。
用户界面操作

命令行
查询资源是性能指标,服务名称(MYSQL_NODE),默认的服务地址/端口(127:0:0:1:3306)
pmm-admin add mysql --query-source=perfschema --username=pmm --password=pass MYSQL_NODE
or
pmm-admin add mysql --query-source=perfschema --username=pmm --password=pass --service-name=MYSQL_NODE --host=127.0.0.1 --port=3306
PMM用户界面
命令行
在下面命令的输出中查找你的服务
pmm-admin inventory list services --sevice-type=mysql
下面的功能目前只支持PMM管理员账户:
PMM的用户界面是一个基于Grafana的浏览器应用
登录
启动一个浏览器,在地址栏输入PMM服务端或者宿主机的地址
页面会加载PMM登录的界面如下所示

输入用户名和密码,默认是admin:admin
点击登录
如果是第一次登录,会被请求重新设置密码(建议修改)
输入新密码,并提交
点击跳过,使用默认密码
加载PMM主界面

dashboard
这个dashboard是由多个网页组成一个界面。
dashboard界面以折叠形式进行分组,也可以通过重命名、创建来优化界面。
嵌入在dashboard内部的区域并成为面板,有些面板在可折叠的组中,一个面板可以显示值、图像,表和可视化设置。
目前处于技术预研的阶段,随时被修改。
当发生某个系统时间的错误时,整合错误会让你指导
开始之前
在你获取预警时,你必须激活整合预警并设置一个通信通道(指定预警信息如何通过邮件、slack信息传递)
激活整合预警
设置通信通道
当通信表出现,选择它
选择预警的方式,邮件或者slack
邮件,定义SMTP邮件的服务
服务地址:默认发送邮件的SMTP智能主机包括端口号
Hello:识别SMTP服务的默认主机名
From:发送着的邮件地址
slack,输入URL
点击应用
添加预警规则
选择预警规则表单

点击添加
输入相关内容

点击添加或者取消
添加预警规则模板

备份和恢复都是技术预研功能。
当前支持:MySQL database server or MongoDB replica set cluster, backing up to Amazon AWS S3 storage locations
查询分析显示了各种查询的执行过程,各个查询花费的时间分布,它能帮你分析查询超时问题,优化数据库的性能,找到并从源头上解决问题。

查询分析功能支持MySQL,MongoDB,PostgreSQL,MySQL的最低要求如下:

查询服务以可视化和数字的方式显示度量数据,性能相关的特征数据在结论中以图表的形式展示。
这个界面包含三个面板:过滤面板、全局面板、详细面板
数据来源非实时的,受网络的影响会延迟。
安全威胁工具会定时检查连接的数据库,如果任何一个数据库服务暴露出潜在的安全威胁会向你发出预警
所有的检测都在PMM的客户端内部,检测的结果发送到PMM服务端,将接受的结果进行汇总,在主页面显示数量,其相关相信信息在界面的PMM数据库检查处显示
检查项每24个小时会自动从Percona平台上下载,并进行检查(这个时间间隔是不能被设置的)
检查的结果总是保存在PMM服务端,其中不会涉及到自动测试的匿名数据
主页面上安全检测失败的面板显示安全检查失败的个数,颜色代表不同安全的不同程度,重大缺陷(红色),主要缺陷(褐色),小缺陷(蓝色),如图所示

安全威胁工具默认是禁用的,可以通过配置–设置–高级设置进行启用
启动安全威胁工具后,PMM服务端会从Percona平台下载安全检查项,并检查一次。这个操作是在后台运行的,以至于更新威胁工具设置立即就能完成,但是需要花费很长的时间下载检查项并进行一次检查,才能将检查结果可视化的显示在检查界面上
DBaaS功能目前处于技术预研阶段,随时都能改变
DBaaS页面可以让你在k8s和数据库集群上进行添加、移除等操作
默认情况DBaaS是禁用状态
可以通过配置–设置–高级选项启用
从左边菜单选择DBaas,如下图所示

将安装PXC和PSMDB作为k8s集群注册进行的一部分,它可以帮你将数据库集群上传到k8s集群

注销要给k8s集群
重要:
如果有DB集群关联了k8s集群,则不能注销它
查看一个k8s集群的配置
管理授权组件的版本
管理员可以为每一个集群选择组件授权的版本和默认的版本


你必须在创建一个DB集群之前至少创建一个k8s集群
为了监视一个DB集群,首先需要为PMM服务端设置一个公共地址(PMM服务端可以进入的地址或主机名称)
选择DB集群
点击创建DB集群
在步骤1中,基本选项:
输入一个集群名称
从k8s菜单中选择一个集群
从数据库类型菜单中选择一个数据库类型

在步骤2中,高级选项:
拓扑结构 选择集群或者单节点
选择节点的数量(最少是3)
如果你想让外部的k8s集群可以访问你的数据库集群,可以选择外部权限
默认情况下,只提供内部权限
对于本地k8s集群(例如minikube)不能赋予外部权限
为每个节点的资源进行预先配置
为内存、CPU、磁盘空间进行小、中、大的混合预先配置
自定义的预先配置的值是可以被修改的
当基本选项和高级选项的会话的图标都是绿色,则创建的DB集群被激活(如果没有激活,检查上述两个会话中字段中红色的值)
显示集群的信息行

删除一个DB集群
编辑一个DB集群
重启一个DB集群
挂起或者恢复一个DB集群
选择配置–设置–Metrics Resolution

度量以低、中、高三个间隔方案来收集数据

间隔的时间单位是秒
开启遥测,能够获取并发送匿名数据到Percona,它可以帮助我们决定我们重点开发的地方和PMM每个版本用到的东西,收集这些信息可以帮助我们决定是否我们要发布一个不再支持的版本的补丁,决定支持一个没必要的某个版本的时间,甚至决定鼓励使用和组织使用的频率
收集的数据有:
我们不能收集标识系统的任何信息,但是下面的两点需要留意:
一个新的PMM服务实例的第一次遥测报告会延迟24个小时,因此可以有充足的时间禁用那些不希望共享信息的服务
Grafana的匿名使用统计不受PMM管理,为了激活它,你必须在每次更新后,改变PMM服务容器的配置
跟PMM设置页面一样,可以在MM服务的docker run 语句中通过 -e DISABLE_TELEMETRY=1选项来禁用遥测
当该功能激活后,PMM会自动地进行更新检查,如果有必要,会在主界面地更新界面给出提示
该工具会在一个注册地实例和找到地报告进行一些列地安全相关的检查,默认情况是禁用的
PMM服务可以访问的地址或者宿主机名称,从浏览器获取,以使浏览器自动检测并填充此字段

预警管理器管理预警信息,消除重复、分组、路由到合适的接收者或者展示组件
在更新PMM客户端之前更新PMM服务端
客户端和服务端的组件的安装和更新都是独立的
PMM服务端可以在本地以docker镜像、虚机或者亚马逊云实例运行,每个都有自己的安装和更新步骤
最好的也最简单的方式是在主页面的更新面板上更新PMM服务
因为PMM1和PMM2之间存在巨大的架构差异,所以没有直接的更新路径。从PMM1到PMM2版本的切换的方式是一个渐变的过度
总之,它涉及到在一个新的主机上首次启动一个新的PMM2服务,并将客户端连接到它。当在某个时间点你要关闭已经存在的PMM1服务时,它会以新的数据的形式发送到PMM2服务,老的度量数据会停留配置的时间(默认是30天)
通过Grafana界面配置的任何预警必须重新创建,因为在PMM1和PMM2的对象界面的Id不能匹配。在这个实例中,我们建议暂时将PMM2中需要独立的预警管理实例的预警管理数据移除。我们原始的将它集成到PMM2服务中,期望可以支持已存在的预警管理规则
可以通过PMM的安装提高安全性:
查看启用的哪种安全方式:
pmm-admin status
提示
需要一个有效的SSL证书来实现客户端和服务端的通信加密
在docker ,OVF,AMI镜像中,自签名的证书保存在/src/nginx
为了用自己的证书,通过下面方式(任选一种):
挂载证书
docker run -d -p 443:443 --volumes-from pmm-data
--name pmm-server -v /etc/pmm- certs:/srv/nginx
--restart always percona/pmm-server:2
复制证书
docker cp certificate.crt pmm-server:/srv/nginx/certificate.crt
docker cp certificate.key pmm-server:/srv/nginx/certificate.key
docker cp ca-certs.pem pmm-server:/srv/nginx/ca-certs.pem
docker cp dhparam.pem pmm-server:/srv/nginx/dhparam.pem
当PMM客户端连接PMM服务端时,启用SSL
pmm-admin config --server-url=https://<user>:<password>@<server IP>
启动
在docker镜像中启动一个shell
docker exec -it pmm-server bash
编辑/etc/grafana/grafana.ini
启动cookie_secure,将其值设为true
重启Grafana
supervisorctl restart grafana
如果一个MySQL实例中有大量的schema和tables,通过pmm-admin add有以下两个选项提高PMM性能:
--disable-tablestats
or
--disable-tablestats-limit
重要提示:
用法
pmm-admin add mysql --disable-tablestats
用法
pmm-admin add mysql --disable-tablestats-limit-<LIMIT>
通过命令行创建注释
pmm-admin annotate
步骤1:安装依赖
连接PMM服务的docker 容器
docker exec -it pmm-server bash
安装Grafana插件
grafana-cli plugins install grafana-image-renderer
重启Grafana
supervisorctl restart grafana
安装库
yum install -y libXcomposite libXdamage libXtst cups libXScrnSaver pango
atk adwaita-cursor-theme adwaita-icon-theme at at-spi2-atk at-spi2-core
cairo-gobject colord-libs dconf desktop-file-utils ed emacs-filesystem
gdk-pixbuf2 glib-networking gnutls gsettings-desktop-schemas
gtk-update-icon-cache gtk3 hicolor-icon-theme jasper-libs json-glib
libappindicator-gtk3 libdbusmenu libdbusmenu-gtk3 libepoxy
liberation-fonts liberation-narrow-fonts liberation-sans-fonts
liberation-serif-fonts libgusb libindicator-gtk3 libmodman libproxy
libsoup libwayland-cursor libwayland-egl libxkbcommon m4 mailx nettle
patch psmisc redhat-lsb-core redhat-lsb-submod-security rest spax time
trousers xdg-utils xkeyboard-config alsa-lib
步骤2:共享镜像
PMM是由我们自己的和第三方开源工具构建的客户端/服务端应用

PMM客户端包提供的功能:
PMM服务端包提供的功能:

查询分析(QAN)可以分析一段时间内MySQL的查询性能,客户端的查询分析代理包括:
度量标准监控提供了对于MySQL或者MongoDB服务实例的重大缺陷的历史记录,包括:

为了保证从PMM客户端到PMM服务端的数据传输的安全性,所有的导出器都能通过
SSL/TLS加密连接,他们和PMM服务端通信是通过HTTP基本的权限认证进行保护的
