• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

使用PMM(Percona Monitoring and Management)监控MySQL手册

MySQL 彭东稳 8年前 (2017-05-17) 40395次浏览 已收录 3个评论

一、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版本变化

PMM 1.4版本之前就是下面这种运作模式,我下面是基于PMM 1.1安装的。

PMM 1.4版本时就把“MySQL Replication Topology Manager”拿掉了从主页上面,而“Query Analytics”和“Metrics Monitor”更加人性化。

PMM 1.6版本时把“Query Analytics”页面取消了,从而把日志分析放到了Grafana里面展示。

PMM 1.8版本时直接把主页拿掉了,默认主页就是Grafana了,同时把日志分析也放到了Grafana。

在安装配置上面并无大的变化。

PMM 1.1版本

使用PMM(Percona Monitoring and Management)监控MySQL手册

PMM 1.4版本

使用PMM(Percona Monitoring and Management)监控MySQL手册

PMM针对操作系统的部份也提供了硬盘、网络、CPU和RAM的监控,特别的是它提供了Context switches、Processes和interrupts的监控,Context Switches可以看到CPU上下切换文的状况,Processes可以方便了解系统有多少程序在等待I/O。

二、PMM架构解析

PMM架构如下图所示

使用PMM(Percona Monitoring and Management)监控MySQL手册

PMM Server是作为Docker镜像distributed,而PMM Client就是一般的RPM,它需要安装Server端和Client端软件。

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组件

三、安装运行PMM Server

概览:用一台A服务器运行监控程序,监控程序是基于Docker构建的。然后在需要被统计的服务器上安装pm-admin,这个工具会将数据实时的发送到A服务器。A服务器会分析统计数据,然后将数据展示在web端。

Percona发布了PMM Docker镜像,用户只需要下载镜像运行就全部搞定,开箱即用相当easy!

PMM服务器的Docker映像公开托管在https://hub.docker.com/r/percona/pmm-server。如果要从Docker映像运行PMM Server,则主机必须能够运行Docker 1.13或更高版本,并具有网络访问权限。有关使用Docker的更多信息,请参阅Docker文档

你可以通过执行下面的命令,高速安装Docker。

适用于Ubuntu,Debian,Centos等大部分Linux,会3小时同步一次Docker官方资源。

1. 创建PMM数据容器

此容器不运行,它只是存在,以确保您在升级到较新的pmm-server时保留所有PMM数据。不要删除或重新创建此容器,除非您打算清除所有PMM数据并重新开始。下面解释一下docker参数的具体意义,如果你懂docker,那么应该很容易理解。

docker create:该命令指示Docker守护程序从映像创建容器。

-v:该选项初始化数据卷的容器。

--name:该选项为你可以用于引用Docker网络中的容器的容器分配一个自定义名称。

percona/pmm-server:1.4.1 :是导出容器的镜像名称和版本标签。

/bin/true :是容器运行的命令。

2. 运行PMM容器

解释一下docker选项的意义:

docker run:该命令指示守护程序从镜像运行容器。

-d:该选项在分离模式(即后台)中启动容器。

-p:该选项映射用于访问PMM服务器 Web UI的端口。例如-p 8080:80,如果端口80不可用,则可以使用登陆页面映射到端口8080 。

--volumes-from:该选项从pmm-date容器中装入卷。

--name:该选项为你可以用于引用Docker网络中的容器分配一个自定义名称。

--restart:该选项定义容器的重新启动策略,设置它以always确保Docker守护程序在启动时启动容器,并在容器退出时重新启动它。

--init:该选项在容器内运行带有PID 1的init进程,它转发信号并收集进程。

percona/pmm-server:1.4.1 :是导出容器的镜像名称和版本标签。

3. 查看Docker运行状态

通过使用运行容器的主机的IP地址连接到PMM Web界面来验证PMM服务器是否正在运行,然后在要监视的所有数据库主机上安装PMM Client。

4. 验证PMM服务器

运行PMM Server之后,你应该可以使用运行容器的主机的IP地址访问PMM Web界面。例如,如果在默认端口80上运行10.10.0.188,则应该可以访问以下内容:

使用PMM(Percona Monitoring and Management)监控MySQL手册

四、安装运行PMM Client

PMM Client是安装在你要监视的MySQL或MongoDB主机上的一组代理组件。组件收集关于一般系统和数据库性能的各种数据,并将该数据发送到相应的PMM服务器组件。

在数据库主机上安装PMM Client软件包之前,请确保你的PMM Server主机可访问。

你将需要在数据库主机上使用root用户访问安装PMM Client(以具有root权限的用户身份登录或能够运行命令的sudo权限)。

查询分析(QAN)的最低要求是:

  • MySQL 5.1或更高版本(如果使用慢查询日志)
  • MySQL 5.6.9或更高版本(如果使用性能模式)

PMM Client可以运行在任何Linux发行版上,但是Percona提供的PMM Client软件包只能从Ubuntu或CentOS发行版的软件仓库进行自动安装:

下面我们以在Red Hat或CentOS上安装PMM Client。

1. 安装RMM Client

安装PMM Client之后,它不会自动连接到PMM Server。要将客户端连接到PMM服务器,请使用该命令指定IP地址。

注意,如果在运行PMM Server时更改了默认端口80 ,请在服务器的IP地址之后指定。

2. PMM客户端管理

使用pmm-admin工具来管理PMM客户端。该pmm-admin工具需要root访问权限(你应该以具有root用户权限的用户身份登录或者可以使用命令进行登录sudo)。

用法:

OPTIONS

以下选项可用于任何命令:

-c, --config-file
指定PMM配置文件的位置(默认/usr/local/percona/pmm-client/pmm.yml)。
-h, --help
打印任何命令和退出的帮助。
-v, --version
打印PMM客户端版本
--verbose
打印详细输出。

COMMANDS

pmm-admin add
添加监控服务。
pmm-admin check-network
检查PMM客户端PMM服务器之间的网络连接。
pmm-admin config
配置PMM Client如何与PMM服务器通信
pmm-admin help
打印任何命令和退出的帮助。
pmm-admin info
打印有关PMM客户端的信息
pmm-admin list
列出为此PMM客户端添加的所有监控服务。
pmm-admin ping
检查PMM服务器是否存活。
pmm-admin purge
清除PMM服务器上的度量数据,通常删除服务后需要做的动作。
pmm-admin remove, pmm-admin rm
删除监控服务。
pmm-admin repair
删除丢失连接的服务(如服务器端宕机了)。
pmm-admin restart
重新启动监控服务。
pmm-admin show-passwords
打印PMM Client使用的密码(存储在配置文件中)。
pmm-admin start
开启监控服务。
pmm-admin stop
停止监控服务。
pmm-admin uninstall
在卸载之前清理PMM Client。 

五、添加MySQL监控

1. 连接PMM服务器

安装PMM Client之后,它不会自动连接到PMM Server。要将客户端连接到PMM服务器,请使用该命令指定IP地址。

2. 需要先创建一个监控账号

mysql:metrics – 需要REPLICATION CLIENT权限。

mysql:queries – 需要SUPER权限。

具体参考 [What privileges are required to monitor a MySQL instance?(https://www.percona.com/doc/percona-monitoring-and-management/faq.html#id11)

3. 添加MySQL监控和主机监控

这里将linux:metricsmysql-metricsmysql:queries收集MySQL主机指标和实例指标和慢查询的信息。

监控单主机多实例时如下配置即可:

查看exproter监听端口

pmm-client可以按host和port进行配置,pmm-client是否无须部署到MySQL对应的机器上呢?

pmm-client收的监控数据来源有这么几方面:

a. MySQL所在机器的系统指标(linux:metrics).

b. MySQL的performance_schema(mysql:metrics).

c. MySQL慢查询日志(mysql:queries).

4. 查看配置后的结果

如果我们想收集a和c中的指标的话,最好还是将pmm-client部署在MySQL所在机器。

5. 帮助信息

更多的设定內容可以用下列指令查询:

以下选项可以与mysql:metrics别名一起使用

--create-user
PMM客户端(命名pmm)创建一个专用的MySQL用户。
--create-user-maxconn
指定专用MySQL用户的最大连接数(默认值为10)。
--create-user-password
指定专用MySQL用户的密码。
--defaults-file
指定路径my.cnf。
--disable-binlogstats
禁用二进制日志统计的收集。
--disable-processlist
禁用进程状态指标的收集。
--disable-tablestats
禁用表统计信息的收集。
--disable-tablestats-limit
指定启用表统计信息集合的最大表数(默认情况下,限制为1000表)。
--disable-userstats
禁用用户统计信息的收集。
--force
强制创建或更新专用的MySQL用户。
--host
指定MySQL主机名,默认取Client Name。
--password
指定具有管理员权限的MySQL用户的密码。
--port
指定MySQL实例端口
--socket
指定MySQL实例套接字文件。
--user
指定具有管理员权限的MySQL用户的名称。

六、查看监控和管理平台

使用运行PMM Server的主机的IP地址访问PMM Web界面。目标网页链接到相应的PMM工具:

Component URL 备注
PMM landing page http://10.10.0.188 PMM跳转页
Query Analytics (QAN web app) http://10.10.0.188/qan SQL慢日志分析
Metrics Monitor (Grafana) http://10.10.0.188/graph user name: admin password: admin监控指标图表
Orchestrator http://10.10.0.188/orchestrator MySQL集群拓扑结构

这些工具可以全面了解MySQL主机的性能。

1. 指标监控

该监控工具提供对数据库服务器的关键指标的历史指标,基于时间的图表通过主题分为仪表板:一些与MySQL或MongoDB相关,其他则提供了一般的系统指标。

要访问仪表板,请提供默认用户凭据:

用户: admin

密码: admin

在主屏幕上,从可用的Dashboards列表中选择一个仪表板。例如,以下图片显示了系统相关指标:

使用PMM(Percona Monitoring and Management)监控MySQL手册

MySQL指标监控

使用PMM(Percona Monitoring and Management)监控MySQL手册

2. 慢查询分析

该查询分析工具,使数据库管理员和应用程序开发人员分析一段时间内的MySQL查询和发现性能问题,查询分析可以帮助你优化数据库性能。

PMM使用slow log作为查询源(还可以以performance schema作为数据源),记得要需要开启慢日志。

不然打开PMM Query Analytics会报 “QAN API error: “qh.Profile: No query classes for selected instance and time range.错误。

以下图片显示了Query Analytics:

使用PMM(Percona Monitoring and Management)监控MySQL手册

汇总表包含以%GTT (总计时间的百分比)排名的前十名查询,这是MySQL服务器执行特定查询所花费的时间百分比,与在所选期间执行所有查询的总时间相比时间。

你可以通过选择预定义的间隔(最后一小时,3小时,6小时,12小时,最后一天或5天)来选择顶部的时间段,或者使用日历图标选择特定的间隔。如果你有多个安装了PMM Client的MySQL主机,则可以使用顶部的下拉列表在这些主机之间切换。

如果要配置使用PMM Client在MySQL主机上运行的QAN代理,请单击顶部的齿轮图标。

2.1 查询详情

如果你在汇总表中单击查询,你可以获得查询的详细信息。详细信息包含特定于该特定查询的所有指标,例如发送的字节数,锁定时间,发送的行数等。你可以查看查询的第一次和最后一次查看,获取查询的示例以及其指纹。

详细信息部分使您可以EXPLAIN直接从PMM Web界面(仅指定数据库)在所选查询上运行。

使用PMM(Percona Monitoring and Management)监控MySQL手册

你可以在底部为所选查询运行“表信息”,这使你能够获得,以及通过直接从PMM Web界面查询使用的每个表:SHOWCREATE TABLESHOW INDEXSHOW TABLE STATUS

使用PMM(Percona Monitoring and Management)监控MySQL手册

如果你的MySQL严格区分大小写,查看表信息可能会有问题。这个时候你可以在点击”Add db.table to list”把你要查看的表添加进去。

2.2 Performance Schema

PMM的查询数据的默认源是慢查询日志,它在MySQL 5.1及更高版本中可用。从MySQL 5.6(包括Percona Server 5.6及更高版本)开始,你可以选择从Performance Schema中解析查询数据。从MySQL 5.6.6开始,性能模式默认启用(MariaDB 10.0&10.1默认关闭)。

Performance Schema不像慢查询日志那样具有数据丰富性,但它具有所有关键数据,并且通常更快地解析。如果你正在运行Percona Server,则正确配置的慢查询日志将以最低的开销提供最多的信息。否则,使用Performance Schema可能会提供更好的结果。

要使用性能模式:

1. 确保performance_schema变量设置为ON

如果没有,请添加以下行my.cnf并重新启动MySQL(不支持动态启动目前):

注意:默认情况下,MySQL 5.6.6及更高版本中启用了Performance Schema检测,在5.6之前的MySQL版本中完全不可用。

2. 配置QAN代理从Performance Schema收集数据

如果实例已经运行:

  • 在Query Analytics网络用户界面中,点击顶部的齿轮按钮。
  • 在“ 查询分析”下,从 “Collect from”下拉列表中选择“Performance Schema ”。
  • 单击Apply以保存更改。

如果要使用pmm-admin工具添加新的监控实例,请使用该选项,例如:--query-source perfschema

另外,打开Query Analytics,点击view database and server summary info按钮应该会显示如下信息:

使用PMM(Percona Monitoring and Management)监控MySQL手册

解决方法:需要安装percona-toolkit包即可

3. Orchestrator

Orchestrator是MySQL复制拓扑管理和可视化工具(它是一个独立的工具,不与PMM集成),你可以使用PMM服务器地址/orchestrator后的URL访问它。或者,你可以单击主PMM服务器着陆页上的MySQL复制拓扑管理器按钮。

要使用它,在所有管理实例上为Orchestrator创建一个MySQL用户:

注意:示例中的凭据是默认值,如果使用不同的用户名或密码,则必须使用以下选项在运行PMM Server时传递它们 :

然后,您可以使用Orchestrator Web界面中的Discover页将实例添加到拓扑。

七、添加MongoDB监控

1. 连接PMM服务器

安装PMM Client之后,它不会自动连接到PMM Server。要将客户端连接到PMM服务器,请使用该命令指定IP地址。

2. 添加MongoDB监控

这将创建pmm-mongodb-metrics-42003收集此特定MongoDB实例的本地MongoDB指标的服务。

八、仪表盘设置

默认情况下,仪表盘中不是所有的dashboard都可以正确显示,有一些是专门为Percona或MariaDB提供的监控指标。或者有一些需要专门的插件支持才可以正确显示。

但是收集图表的指标和统计信息会增加性能开销,所以你可以一直不断收集和绘制低开销的指标,只有在排除问题时才去启用高开销指标。

MySQL InnoDB Metrics

InnoDB指标提供有关InnoDB操作的详细信息,虽然你可以选择仅捕获特定计数器,但即使所有这些计数器始终启用,它们的开销也很低。要启用所有InnoDB指标,请将全局innodb_monitor_enable变量设置为all:

MySQL User Statistics

用户统计信息是Percona Server和MariaDB中可用的功能,它提供有关用户活动,单独表和索引访问的信息。在某些情况下,收集用户统计信息可能会导致高开销,因此请谨慎使用此功能。要启用用户统计信息,请将userstat变量设置为1即可。

MySQL Performance Schema

使用MySQL 5.6或更高版本,默认情况下启用性能模式检测。如果未启用某些仪器,则在“ MySQL Performance Schema”仪表板中将看不到相应的图形。要启用完整的仪器设置,请将–performance_schema_instrument选项设置’%=on’为启动时:

注意:此选项可能导致额外的开销,应谨慎使用。

MySQL Query Response Time

查询响应时间分配是Percona Server中可用的功能(MariaDB部分可用),它提供有关不同查询组的查询响应时间更改的信息,通常允许在导致严重问题之前发现性能问题。

注意:此功能导致非常高的开销,特别是在每秒处理超过10,000个查询的系统上,仅在故障排除问题时暂时使用它。

启用查询响应时间的收集:

1. 安装QUERY_RESPONSE_TIME插件

2. 将全局query_response_time_stats变量设置为ON

九、经常问的问题?

  • 如何控制Prometheus的内存消耗?

默认情况下,PMM Server中的Prometheus最多可以使用256MB的内存来存储最近使用的数据块。根据进入普罗米修斯的数据量,你可能需要更高的限制才能避免限制数据吞吐,或者如果其他进程需要更少的内存消耗。

你可以通过METRICS_MEMORY在创建和运行PMM Server容器时传递环境变量来控制Prometheus允许的内存消耗。要设置环境变量,请使用该-e选项。该值必须以千字节为单位传递。例如,将限制设置为4GB内存:

注意:限制仅影响为数据块保留的内存,普罗米修斯的实际RAM使用率更高,建议使用比数据块占用的预期内存至少三倍的内存。

  • 如何控制Prometheus的数据保留?

默认情况下,PMM服务器中的Prometheus将时间序列数据存储30天,根据可用的磁盘空间和您的要求,您可能需要调整数据保留时间。

您可以通过METRICS_RETENTION在创建和运行PMM Server容器时传递环境变量来控制Prometheus的数据保留时间。要设置环境变量,请使用该-e选项。该值以小时,分钟和秒的组合传递。例如,默认值为30天720h0m0s。你可能不需要比数字小时更精确,所以你可以丢弃分钟和秒。例如,将保留期限减少到8天:

  • 常见的性能考虑是什么?

如果MySQL服务器有很多模式或表,建议在添加实例时禁用每个表的指标:

注意:如果有超过1000个表,表统计信息将自动禁用。

  • 可以一次停止所有服务吗?

是的,你可以使用pmm-admin启动和停止与添加的监控实例相对应的单个服务,或者一次启动所有这些服务。

启动和停止所有服务:

  • PMM客户端日志文件位于哪里?

pmm-admin添加监控实例时创建的每个服务都有一个单独的日志文件/var/log/。文件名具有以下语法:pmm-<type>-<port>.log。

例如,QAN监控服务的日志文件是/var/log/pmm-mysql-queries-0.log。所以有问题看日志即可。

  • PMM客户端创建的服务在哪里?

使用该pmm-admin工具添加监控实例时,会创建相应的服务。该服务的名称具有以下语法: pmm-<type>-<port>

例如:pmm-mysql-metrics-42002。

服务的位置取决于服务管理器:

systemd:/etc/systemd/system/

upstart:/etc/init/

systemv:/etc/init.d/

要查看系统上使用哪个服务管理器,请运行:pmm-admin info

  • PMM如何配置安全访问模式?

你可以使用以下安全功能来保护PMM免受未经授权的访问:

  • HTTP密码保护在访问PMM服务器 Web界面时添加身份验证
  • SSL加密保护PMM客户端和PMM服务器之间的流量

1. 启用密码保护

你可以在创建和运行PMM Server容器时传递环境变量来设置访问PMM Server Web界面的密码。要设置环境变量,请使用该选项。例如,要设置密码为:

默认情况下,用户名为pmm。你可以通过传递SERVER_USER变量来改变它。

例如:

PMM客户端使用相同的凭据与PMM服务器进行通信,如果按照所述设置用户名和密码,请在将PMM Client连接到PMM服务器时指定它们:

2. 启用SSL保护

PMM中的安全功能

  • PMM-Client设置Client Name

在PMM客户端使用pmm-admin list查看监控应用时,其NAME字段的名称取自“Client Name”,而“Client Name”来自HOSTNAME。所以这个某些时候会有问题,比如在Web中显示PMM-Client名字几个数据库都是localhost.localostdoman,这就很不好分辨了。另外可能你想在Web界面直接显示主机IP地址,这时就需要调整默认方式了。有两种方法可以解决。

一:直接修改“Client Name”

在文件/usr/local/percona/pmm-client/pmm.yml中可以修改“Client Name”。

二、添加监控时指定名称

  • 怎么清理数据

pmm-admin purge清除PMM服务器上的度量数据,通常删除服务后需要做的动作。

  • Grafana密码忘记怎么办

Grafana用户密码默认都是admin,如果忘记了密码且又没有填写邮箱地址。最简单的就是进入到 SQLite 重置一下admin用户密码。

先进入到docker,然后进入到 SQLite,命令行执行sqlite3 /var/lib/grafana/grafana.db即可。

以上变更之后admin账户密码恢复为admin。

更多问题看官方:FQA


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (23)
[资助本站您就扫码 谢谢]
分享 (0)

您必须 登录 才能发表评论!

(3)个小伙伴在吐槽
  1. 博主,最近在搭建pmm客户端的时候,有多台mysql机器。通过命令pmm-admin add mysql --user pmm --password 123456 --host ip --port 3306 错误如下(只在一台客户端的话没有错误,超过一台执行命令就会这样;是不是多台有什么特殊设置呢): We have found system services disconnected from PMM server. Usually, this happens when data container is wiped before all monitoring services are removed or client is uninstalled. Orphaned local services: pmm-mysql-metrics-42002, pmm-mysql-queries-0 To continue, run 'pmm-admin repair' to remove orphaned services
    wangjq2018-12-27 13:34 Windows 10 | Chrome 71.0.3578.98