qinghui的技术专栏 CLOUD AND DATABASE

开源监控利器-PMM

2019-09-20
qinghui.guo


PMM是一款开源的用于管理和监控MySQL、PostgreSQL和MongoDB性能的开源平台,通过docker部署,但是本文没有介绍docker。有兴趣的同学可以了解下服务部署容器化的概念,据说阿里的RDS(MySQL)使用DOCKER部署的。

一、 PMM简介:

Percona Monitoring and Management (PMM)是一款开源的用于管理和监控MySQL、PostgreSQL和MongoDB性能的开源平台,通过PMM客户端收集到的DB监控数据用第三方软件Grafana画图展示出来。

PMM提供了对MyISAM、InnoDB、TokuDB、PostgreSQL和PXC/Glarera的监控,另外也提供了Query Analytics的功能,可以检视执行了哪些SQL指令,并对执行效能较差的语法进行优化。另外在新版本还支持了MySQL复制拓扑图结构构造。

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

二、PMM架构解析

PMM平台基于cs架构,可支持扩展。它包括以下模块:

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

  • PMM Server是PMM的核心部分,它聚合收集的数据并以Web界面中的表格,仪表板和图形的形式呈现。

这些模块的封装便于安装和使用。 假设用户不需要了解构成每个模块的确切工具以及它们如何交互。 但是,如果您想充分发挥PMM的潜力,了解内部结构非常重要。

PMM是一系列旨在无缝协同工作的工具。 有些是由Percona开发的,有些是第三方开源工具。

注意 整体C-S架构不太可能改变,但组成每个组件的工具集可能随产品而变化。

下图说明了PMM当前的结构

Client客户端

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

PMM客户端软件包包含以下内容:

  • pmm-admin是用于管理PMM客户端的命令行工具,例如,添加和删除要监视的数据库实例。 有关更多信息,请参阅管理PMM客户端 。

  • pmm-mysql-queries-0是一个管理QAN代理的服务,它从MySQL收集查询性能数据并将其发送到PMM Server上的QAN API。

  • pmm-mongodb-queries-0是一个管理QAN代理的服务,它从MongoDB收集查询性能数据并将其发送到PMM Server上的QAN API。

  • node_exporter 是一个用于收集常规系统指标的Prometheus exporter。

  • mysqld_exporter是一个收集MySQL指标的Prometheus exporter。

  • mongodb_exporter是一个收集MongoDB指标的的Prometheus exporter。

  • proxysql_exporter是一个用于收集ProxySQL性能指标的Prometheus exporter。

  • postgres_exporter是一个用于收集PostgreSQL性能指标的exporter。

PMM Server

PMM Server在将作为中央监控主机的计算机上运行。 它通过以下方式作为应用分发:

  • 可用于运行容器的Docker镜像

  • 您可以在VirtualBox或其他虚拟机监控程序中运行的OVA。

  • 您可以通过Amazon Web Services运行的AMI 。

有关更多信息,请参阅安装PMM Server 。

PMM Server包括以下工具:

  • Query Analytics(QAN)可以分析一段时间内的MySQL查询性能。 除客户端QAN代理外,还包括以下内容:

    • QAN API是用于存储和访问在PMM客户端上运行的QAN代理收集的查询数据的后端。
    • QAN Web App是一个用于可视化收集的Query Analytics数据的Web应用程序。
  • Metrics Monitor(MM)提供组件提供了MySQL、PostgreSQL和MongoDB历史监控信息。 它包括以下内容:

    • Percona仪表板是Percona开发的Grafana仪表板。
    • Orchestrator是一个MySQL复制拓扑管理和可视化工具。 有关更多信息,请参阅: Orchestrator手册。
    • Consul提供了一个API, PMM客户端可以使用该API为Prometheus远程列出、添加和删除的主机。 它还存储监控元数据。 有关更多信息,请参阅Consul Docs 。
    • Prometheus是第三方时间序列数据库,它连接到在PMM客户端上运行的exporter并聚合由exporter收集的数据。 有关更多信息,请参阅Prometheus文档 。
    • Grafana是第三方仪表板和图形构建器,用于可视化Prometheus中聚合的数据,以Web呈现。 有关更多信息,请参阅Grafana文档 。

三 、 PMM部署:

3.1 环境介绍:

|主机名 | IP |实例|操作系统| |:—- | :—- :—- | :—-| |pmm-server| 192.168.56.10| PMM实例| CentOS 7.4.1708| |server0 |192.168.56.20| PostgreSQL| Red Hat 6.5| |centos1 |192.168.56.21| MySQL| CentOS 6.8| |server2 |192.168.56.22| MySQL| Red Hat 6.5| |server3 |192.168.56.23| MySQL| Red Hat 6.5|

3.2 docker部署pmm

安装依赖包

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

配置稳定仓库

# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# yum-config-manager --add-repo https://mirrors.aliyun/docker-ce/linux/

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

安装指定版本docker

需要注意docker-ce 和docker-ce-selinux依赖关系

[root@pmm-server1 ~]#  yum list docker-ce --showduplicates | sort -r

[root@pmm-server1 ~]# yum list docker-ce-selinux --showduplicates | sort -r

[root@pmm-server1 ~]# yum install  --setopt=obsoletes=0 \

docker-ce-17.03.2.ce-1.el7.centos.x86_64 \

docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch

启动docker

[root@pmm-server1 ~]# systemctl start docker

[root@pmm-server1 ~]# systemctl status docker

Pulling the PMM Server Image

镜像拉取速度较慢,失败多次,网速要求高。

nohup docker pull percona/pmm-server:latest &

创建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

创建和启动pmm-server容器

docker run -d -e ORCHESTRATOR_ENABLED=true -e METRICS_RETENTION=720h -e SERVER_USER=admin -e SERVER_PASSWORD=mysql -p 80:80 -p 443:443 --name pmm-server --volumes-from pmm-data percona/pmm-server:latest

检查docker状态

netstat -tunlp | grep docker

docker ps

3.3不要关闭防火墙

pmm-server需要开启如下端口。

CentOS7使用firewalld服务,不需要配置ipttables(该服务默认未安装)

主机信息监控端口:linux:metrics

firewall-cmd --permanent --zone=public --add-port=42000/tcp 

慢查询性能数据端口:

firewall-cmd --permanent --zone=public --add-port=42001/tcp

MySQL实例监控端口:mysql:metrics

firewall-cmd --permanent --zone=public --add-port=42002/tcp

MongoDB实例监控端口:mongodb:metrics

firewall-cmd --permanent --zone=public --add-port=42003/tcp 

ProxySQL监控端口:proxysql:metrics

firewall-cmd --permanent --zone=public --add-port=42004/tcp

PostgreSQL实例监控端口postgresql:metrics

firewall-cmd --permanent --zone=public --add-port=42005/tcp 

firewall-cmd --list-all 

firewall-cmd --reload

3.4安装配置client

下载client端,下载地址

# tar xvf  pmm-client-1.17.0.tar.gz

****

# cd  pmm-client-1.17.0.tar.gz



# ./install

3.4配置监控项

把client注册到server端,每个client端都需要注册

pmm-admin config --server 192.168.56.10 --server-user admin --server-password oracle

cat /usr/local/percona/pmm-client/pmm.yml

收集mysql性能数据

[root@centos1 log]# pmm-admin add mysql --user root --password 123456 --host localhost



[root@centos1 log]# pmm-admin list 

pmm-admin 1.17.0



PMM Server      | 192.168.56.10 (password-protected)

Client Name     | centos1

Client Address  | 192.168.56.21 

Service Manager | linux-upstart



-------------- -------- ----------- -------- ----------------------------------------- --------------------------------------------------------------------------------------

SERVICE TYPE   NAME     LOCAL PORT  RUNNING  DATA SOURCE                               OPTIONS                                                                              

-------------- -------- ----------- -------- ----------------------------------------- --------------------------------------------------------------------------------------

mysql:queries  centos1  -           YES      root:***@unix(/var/lib/mysql/mysql.sock)  query_source=slowlog, query_examples=true, slow_log_rotation=true, retain_slow_logs=1 

linux:metrics  centos1  42000       YES      -                                                                                                                              

mysql:metrics  centos1  42002       YES      root:***@unix(/var/lib/mysql/mysql.sock)  

MySQL监控首页

收集PostgreSQL性能数据 添加的监控项

linux:metrics :系统数据 postgresql:metrics: 开启PG的IO统计 ALTER SYSTEM SET track_io_timing=ON; SELECT pg_reload_conf();

pmm-admin add postgresql --host=localhost --password='123456' --port=5432 --user=postgres



[root@server0 ~]# pmm-admin list 

pmm-admin 1.17.0



PMM Server      | 192.168.56.10 (password-protected)

Client Name     | server0

Client Address  | 192.168.56.20 

Service Manager | linux-upstart



------------------- -------- ----------- -------- --------------------------------------- --------

SERVICE TYPE        NAME     LOCAL PORT  RUNNING  DATA SOURCE                             OPTIONS 

------------------- -------- ----------- -------- --------------------------------------- --------

linux:metrics       server0  42000       YES      -                                              

postgresql:metrics  server0  42005       YES      postgresql:***@localhost:5432/postgres  

PostgreSQL监控首页

四 、PMM监控优劣

*本章参考文档:本节原文地址

为什么选择PMM

  • 监控信息最全,开源的监控方案我用过zabbix,open-falcon,自己采集+ES+Kibana/grafana。采集的指标项很多是数据有误,不及时,或者根本无数据。这样的抽风的监控系统会给自己的分析带来不自信,有存在的必要吗?

  • 界面最直观,细节较多。你能想到的,想不到的都给你提供了。这对我这样菜逼DBA来说是很重要的。可以根据监控图形趋势猜出实例crash或者高负载前后的信息。信息少的监控系统分析不出什么花样来,瞎抠浪费时间。

  • 支持的数据库类型最多,PG/MySQL(含PXC,MGR,TOKU,ROCKS)/MongoDB(含MONGOS)/OS。分析一个业务的OS/MONGODB/MYSQL性能要跨越两三个web网站,烦不烦?

  • 支持慢查询分析,比annometer或者logstash的配置比起来简单一万倍。只要配置监控就可以,agent可以根据可调节的开关从IS或者慢日志中捕捉慢查询,高频SQL

  • 基于grafana,可以引入oauth或者Ldap方便对现有的组织结构进行引入,根据业务对于图形进行分别授权。防止业务的活跃信息,IP等有价值信息被泄露

  • 集成了Orchestrator用于复制拓补管理和可视化

PMM的缺点

  • PMM 默认使用主机名作为唯一识别数据库实例的关键字。 在docker环境下,单机单实例,实例名和主机名保持一致,比较方便,但是不对外展示IP和端口还是蹩脚。也有可能是我的视野比较窄,或许根本不需要。但是在我们这边没有数据库微服务的情况下,IP和端口还是比较关键的信息点,而且单物理机多数据库实例下的使用效果并不好。主要体现在无法使用IP对实例进行汇总

  • 需要sudo权限

在某些权限管理比较严格的情况下,dba没有sudo权限,无法运行pmm-client

  • 服务端不好拆分 官方采用单节点Prometheus来存储监控Metric,小环境还可以,数千数万台的情况下ova或者docker化的服务端容易爆盘。这个时候易于部署的ova或者docker分发方式反而变成了缺点。

  • ova分发方式修改ova密码麻烦

  • 修改Ova的虚拟机的Linux密码后,访问监控页面也需要输入密码,agent端注册也需要密码。当然如果你不去修改Ova的密码也没问题

  • 服务端load高

参考文档 https://www.percona.com/doc/percona-monitoring-and-management/index.html http://www.mamicode.com/info-detail-2518131.html DEMO官网地址:http://pmmdemo.percona.com 数据采集工具地址: node_exporter:https://github.com/percona/node_exporter [mysqld_exporter:https://github.com/percona/mysqld_exporter mongodb_exporter:https://github.com/percona/mongodb_exporter proxysql_exporter:https://github.com/percona/proxysql_exporter postgres_exporter:https://github.com/percona/postgres_exporter


上一篇 hello jekyll!

Comments

Content