Percona Monitoring and Management (PMM)2.X安装部署

Percona Monitoring and Management (PMM)2是一个用于管理和监控MySQL、PostgreSQL、MongoDB和ProxySQL性能的开源平台。它是由Percona与管理数据库服务、支助和咨询领域的专家合作开发的。

PMM是一种免费的开源解决方案,您可以在自己的环境中运行它,以获得最大的安全性和可靠性。它为MySQL、PostgreSQL和MongoDB服务器提供了全面的基于时间的分析,以确保您的数据尽可能高效地工作。

 

PMM平台基于支持可伸缩性的客户机-服务器模型。它包括以下模块:

PMM客户机安装在您想要监视的每个数据库主机上。它收集服务器指标、一般系统指标和查询分析数据,以获得完整的性能概述。

PMM服务器是PMM的中心部分,它聚合收集到的数据,并在web界面中以表格、仪表板和图形的形式显示这些数据。

 

 模块被打包以便于安装和使用。假设用户不需要了解组成每个模块的具体工具是什么,以及它们如何交互。然而,如果您想充分利用PMM的潜力,内部结构是重要的。

 PMM是一种工具的集合,它被设计成可以无缝地协同工作。有些是由Percona开发的,有些是第三方开源工具。

 

PMM Server

 PMM服务器在作为中央监视主机的机器上运行。它通过以下方式作为设备分发:

*可用于运行容器的Docker映像

*可以在VirtualBox或其他管理程序中运行的OVA(打开虚拟设备)

*您可以通过Amazon Web服务运行的AMI (Amazon Machine Image)

 

PMM服务器包括以下工具:

*查询分析(QAN)允许您在一段时间内分析MySQL查询性能。除客户端QAN代理外,还包括:

  QAN API是存储和访问运行在PMM客户机上的QAN代理收集的查询数据的后端。

  QAN Web App是一个可视化收集查询分析数据的Web应用程序。

*Metrics Monitor提供了对MySQL或MongoDB服务器实例至关重要的指标的历史视图。它包括以下内容:

  Prometheus是一个第三方时间序列数据库,它连接到运行在PMM客户机上的出口商,并汇总出口商收集的指标。

  ClickHouse是一个第三方的面向列的数据库,它促进了查询分析功能。有关更多信息,请参见ClickHouse文档。

  Grafana是一个第三方的仪表盘和图形生成器,用于将普罗米修斯在直观的web界面中聚合的数据可视化。

    Percona仪表板是由Percona为Grafana开发的一套仪表板。

所有工具都可以从PMM服务器的web界面(登录页面)访问。

 

PMM Client

每个PMM客户机收集关于一般系统和数据库性能的各种数据,并将这些数据发送到相应的PMM服务器。

PMM客户端包括以下内容:

PMM -admin是用于管理PMM客户机的命令行工具,例如,用于添加和删除您想要监视的数据库实例。

PMM -agent是一个客户端组件,一个最小的命令行接口,它是负责提供客户端功能的中心入口点:它进行客户端身份验证,获取存储在PMM服务器上的客户端配置,管理导出程序和其他代理。

node_exporters是一个收集一般系统指标的Prometheus端口。

mysqld_exporters是一个收集MySQL服务器指标的Prometheus端口。

mongodb_exporters是一个收集MongoDB服务器指标的Prometheus端口。

postgres_端口是一个收集PostgreSQL性能指标的Prometheus端口。

proxysql_exporters是一个收集ProxySQL性能指标的Prometheus端口。

为了使从PMM客户机到PMM服务器的数据传输更加安全,所有端口都能够使用SSL/TLS加密的连接,并且它们与PMM服务器的通信受到HTTP基本身份验证的保护。

 

参考:

端口:以下端口必须在pmm server和client之间开放;

pmm server需要开放80或443端口用于pmm client访问pmm web。

pmm client端必须开放以下默认端口采集数据,可以通过pmm-admin addc命令进行修改。

42000 For PMM to collect genenal system metrics.

42001 This port is used by a service which collects query performance data and makes it available to QAN.

42002 For PMM to collect MySQL server metrics.

42003 For PMM to collect MongoDB server metrics.

42004 For PMM to collect ProxySQL server metrics.

 

安装步骤

docker 部署pmm与mysql监控

安装docker

yum remove docker \

docker-client \

docker-client-latest \

docker-common \

docker-latest \

docker-latest-logrotate \

docker-logrotate \

docker-selinux \

docker-engine-selinux \

docker-engine

 

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum makecache fast

yum -y install docker-ce

systemctl start docker

docker run hello-world

 

PMM Server:192.168.24.90

PMM Client:192.168.24.92

 

1.Docker安装PMM Server

这里使用的Docker标签适用于最新版本的PMM 2(2.9.1),但是您可以指定任何可用的标签来使用相应版本的PMM服务器。

度量收集消耗磁盘空间。PMM需要为每个被监视的数据库节点提供大约1GB的存储空间,数据保留时间设置为一周。(默认情况下,数据保留时间为30天。)要减小Prometheus数据库的大小,可以考虑禁用表统计信息。

尽管一个受监控的数据库节点的最小内存量为2 GB,但内存使用不会随着节点数量的增加而增加。例如,16GB足够用于20个节点。

 

#版本可自选

docker create -v /opt/prometheus/data -v /opt/consul-data -v /var/lib/mysql -v /var/lib/grafana --name pmm-data percona/pmm-server:2 /bin/true

 

2.启动

#必须开启防火墙

docker run -d -p 80:80 -p 443:443 --volumes-from pmm-data --name pmm-server --restart always percona/pmm-server:2

端口默认是 80 ,如果80端口被占用,可改为其它端口号 比如 81

 

3.查看docker运行状态

docker ps -a

 

4.浏览器访问,地址一般是 http://ip地址:端口,也可以直接输 ip地址; 注意,一般端口默认为80,默认用户名:admin,默认密码:admin

例:http://192.168.24.90:80

 

5.安装pmm-client客户端。

yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm -y

yum install pmm2-client -y

 

6.连接PMM Server。

pmm-admin config --server-insecure-tls --server-url=https://admin:admin@<IP Address>:443

例:pmm-admin config --server-insecure-tls --server-url=https://admin:admin@192.168.24.90:443

注:PMM2不需要像PMM1输入指定命令添加Linux主机监控

当你使用 pmm-admin config配置了要监控的节点时,PMM2从那时自动开始收集Linux指标。

 

7.登陆浏览器访问主机监控数据

  

 

#pmm-admin 管理命令

annotate [<flags>] <text>

在Grafana图表中添加注释

config [<flags>] [<node-address>] [<node-type>] [<node-name>]

配置本地pmm-agent

list [<flags>]

显示在此节点上运行的服务和代理

status

显示关于本地pmm代理的信息

summary [<flags>]

获取系统数据以进行诊断

add external --listen-port=LISTEN-PORT [<flags>]

将外部监视添加

add mongodb [<flags>] [<name>] [<address>]

监控MongoDB

add mysql [<flags>] [<name>] [<address>]

监控MySQL

add postgresql [<flags>] [<name>] [<address>]

监控PostgreSQL

add proxysql [<flags>] [<name>] [<address>]

监控ProxySQL

register [<flags>] [<node-address>] [<node-type>] [<node-name>]

注册当前节点到PMM服务器

remove [<flags>] <service-type> [<service-name>]

从监控中删除服务

 

7.添加mysql监控。

MySQL服务器添加指定权限用户

create user pmm@'%' identified by 'pmmpassword';

grant select,process,super,replication client on *.* to 'pmm'@'%';

grant update,delete,drop on performance_schema.* to 'pmm'@'%';

flush privileges;

#授权密码如报错:Your password does not satisfy the current policy requirements

set global validate_password_policy=LOW;

MySQL8.0版本设置:set global validate_password.policy=LOW;

 

查询分析获得从MySQL中获取指标数据有两种可能的来源:慢查询日志和Performance Schema

添加Performance Schema数据字典监控

pmm-admin add mysql --query-source=perfschema --username=pmm --password=pmmpassword ps-mysql

 

添加慢日志监控

pmm-admin add mysql --query-source=slowlog --username=pmm --password=pmmpassword sl-mysql

 

查看运行的服务

pmm-admin list

 

 

9.pmm服务器页面查看

点击Query Analytics进入SQL语句分析

 

10.MySQL最佳配置

慢日志设置

如果你使用Percona分支版本,正确的慢查询日志配置将以最小的开销提供最多的信息。否则,如果支持请使用 PerformanceSchema。

按定义,慢查询日志应该只记录慢查询。这些查询的执行时间超过了特定的阈值。这个阈值由参数 long_query_time指定。

在高负载的应用中,频繁快速的查询比罕见的慢速查询对性能的影响要大的多。为全面分析你的查询流量,设置 long_query_time为0,这样所有的查询语句都将被记录。

然而,记录所有的查询将消耗I/O带宽,并导致慢查询日志增长很快。为了限制记录到慢查询日志中的查询数量,使用Percona分支版本中的查询采样功能。

查询采样可能导致一些罕见的慢查询无法被记录到慢查询日志中。为了避免这种情况,使用 slow_query_long_always_write_time参数指定哪类查询应该被忽略采样。也就是说,长时间的慢查询应该始终记录到慢查询日志中。

 

Performance Schema设置

PMM查询数据的默认源是慢查询日志。这在MySQL5.1及以后的版本中可用。从MySQL5.6版本(包括Percona分支版本5.6及以后版本),你可以选择从Performance Schema中解析查询数据,而不是慢查询日志。从MySQL5.6.6开始,默认启用Performance Schema。

Performance Schema不像慢查询日志那样有丰富的数据,但是它具有所有关键的数据,并且通常解析很快。如果您没有使用Percona分支版本(支持对慢查询日志采样),Performance Schema是更好的选择。

启用Performance Schema ,要将 performance_schema参数设置为 ON:

 

SHOW VARIABLES LIKE 'performance_schema';

+--------------------+-------+

| Variable_name      | Value |

+--------------------+-------+

| performance_schema | ON    |

+--------------------+-------+

 

如果这个参数没有设置为ON,在 my.cnf配置文件中添加以下内容并重启MySQL服务。

 

[mysql]

performance_schema=ON

 

如果您使用了自定义的Performance Schema配置,确认 statement_digest消费者已经启用:

 

select * from setup_consumers;

+----------------------------------+---------+

| NAME                             | ENABLED |

+----------------------------------+---------+

| events_stages_current            | NO      |

| events_stages_history            | NO      |

| events_stages_history_long       | NO      |

| events_statements_current        | YES     |

| events_statements_history        | YES     |

| events_statements_history_long   | NO      |

| events_transactions_current      | NO      |

| events_transactions_history      | NO      |

| events_transactions_history_long | NO      |

| events_waits_current             | NO      |

| events_waits_history             | NO      |

| events_waits_history_long        | NO      |

| global_instrumentation           | YES     |

| thread_instrumentation           | YES     |

| statements_digest                | YES     |

+----------------------------------+---------+

15 rows in set (0.00 sec)

 

重要

 

Performance Schema生产者在MySQL5.6.6及之后的版本中默认启用。它在MySQL5.6之前的版本中完全不可用。如果某些生产者没有被启用,您在 MySQLPerformanceSchemaDashboard的dashboard中看不到相应的图。启用所有的生产者,在启动MySQL服务时设置 --performance_schema_instrument选项为 '%=on'。

mysqld --performance-schema-instrument='%=on'

这个选项会带来额外的负载,请小心使用。

 

如果实例已经在运行,配置QAN agent从Performance Schema中收集数据:

1.打开PMM Query Analytics dashboard。

2.点击Settings按钮。

3.打开Settings部分。

4.从收集下拉列表中选择 PerformanceSchema。

5.点击Apply保存更改。

 

如果您使用pmm-admin工具添加一个新的监控实例,使用 --query-sourceperfschema 选项:

使用root用户或者sudo命令执行以下命令

pmm-admin add mysql --username=pmm --password=pmmpassword --query-source='perfschema' ps-mysql 127.0.0.1:3306

更多信息,请执行 pmm-admin add mysql--help。

 

MySQL InnoDB 指标

为图形收集指标和统计信息会增加开销。您可以使用收集和绘制低开销的指标,在故障排除时启用高开销的指标。

InnoDB指标提供了有关InnoDB操作的详细信息。尽管您可以选择捕获指定的计数器,但是即使始终启用它们,它们的开销也很低。启用所有的InnoDB指标,设置全局参数 innodb_monitor_enable为 all:

SET GLOBAL innodb_monitor_enable

 

Percona分支版本的特殊设置

默认情况下,并非所有Metrics Monitor的dashboard都可以用于所有MySQL分支和配置:Oracle版,Percona版或者MariaDB。一些图形适用于Percona版本和专有的插件和额外的配置。

 

MySQL用户统计信息(userstat)

用户统计信息是Percona分支版本和MariaDB分支版本的功能。它提供了用户活动、单个表和索引访问的信息。在某些情况下,收集用户统计信息可能会带来高昂的开销,所以请谨慎使用此功能。

启用收集用户统计信息,设置 userstat参数为 1。

 

查询相应时间插件

查询响应时间分布是Percona分支版的可用功能。它提供了不同查询组的查询响应时间变化的信息,通常可以在导致严重问题之前发现性能问题。

 

启用收集查询响应时间:

 

1.安装 QUERY_RESPONSE_TIME插件 mysql>INSTALL PLUGIN QUERY_RESPONSE_TIME_AUDIT SONAME'query_response_time.so';mysql>INSTALL PLUGIN QUERY_RESPONSE_TIME SONAME'query_response_time.so';mysql>INSTALL PLUGIN QUERY_RESPONSE_TIME_READ SONAME'query_response_time.so';mysql>INSTALL PLUGIN QUERY_RESPONSE_TIME_WRITE SONAME'query_response_time.so';

2.设置全局参数 query_response_time_stats为 ON。 mysql>SET GLOBAL query_response_time_stats=ON;

相关信息:Percona分支版官方文档

query_response_time_stats: https://www.percona.com/doc/percona-server/5.7/diagnostics/responsetimedistribution.html#queryresponsetime_stats

Response time 介绍: https://www.percona.com/doc/percona-server/5.7/diagnostics/responsetimedistribution.html#installing-the-plugins

 

logslowrate_limit

log_slow_rate_limit参数定义了慢查询日志记录查询的比例。一个好的经验是每秒记录100个查询。例如如果您的Percona实例QPS为10000,您应该设 log_slow_rate_limit为 100,这样慢日志会记录每100个查询。

 

注意

当使用查询采样时,设置 log_slow_rate_type为 query,以便它应用的是查询而不是会话。最好设置 log_slow_verbosity为 full,以便在慢查询日志中记录每个记录的查询语句的最大的信息量。

 

logslowverbosity

- log_slow_verbosity参数指定了慢查询日志中包含多少信息。最好设置 log_slow_verbosity为 full,以便存储有关每个记录的查询语句的最大信息量。

slowqueryloguseglobal_control

默认情况下,慢查询日志只适用于新会话。如果希望调整慢查询日志设置并将这些设置应用于现有连接,请将 slow_query_log_use_global_control设置为 all。

 

为PMM配置MySQL8.0

MySQL8(在8.0.4版本中)改变了对客户端身份验证的方式。 default_authentication_pluging参数设置为 caching_sha2_password。默认值的改变意味着MySQL的驱动需要支持SHA-256身份验证。另外,在使用 caching_sha2_password时,必须对MySQL8的加密通道进行加密。

PMM使用的MySQL驱动还不支持SHA-256身份验证。

为支持当前MySQL的版本,PMM需要设置专有的MySQL用户。该MySQL用户应该使用 mysql_native_password插件。虽然MySQL被配置支持SSL客户端,但是到MySQL服务器的连接没有加密。

有两种解决方法监控MySQL8.0.4及以上版本

1.更改你打算用于PMM的MySQL用户

2.改变MySQL的全局配置

更改MySQL用户

假设你已经创建了你打算用于PMM的MySQL用户,请使用以下方法更改:

然后,将此用户传递给 pmm-admin add作为 --username的参数值

这是首选的方法,因为这只会降低一个用户的安全性。

更改全局MySQL的配置

一种不太安全的方法是在添加监控前将 default_authentication_plugin设置为 mysql_native_password。然后,重启MySQL服务,应用这个更改。

 

posted @ 2020-09-03 09:07  sky87  阅读(2236)  评论(0编辑  收藏  举报