在mysql监控方面,除了oracle/sqlyog等商业提供的外,LZ早年基于慢日志、performance schema,参考oracle awr写过一个监控工具,接下去因为工作忙,没有持续维护下去了(准确的说,除了觉得维护繁琐,觉得没有什么难度、也没有什么收益)。除了商业版的问题外,oracle版的还有一个缺点是和oem集成到一起了,就一巨无霸。所以找了下现成友好的,于是就有了PMM。

  Percona Monitoring and Management (PMM)是Percona Server一款开源的用于管理和监控MySQL和MongoDB性能的开源平台,通过PMM客户端收集到的DB监控数据用第三方软件Grafana画图展示出来。在这个产品之前,Percona提供了Zabbix和Cacti的图形模板,也许是考虑到了用户部署起来繁琐等问题,Percona发布了PMM Docker镜像,用户只需要下载镜像运行就全部搞定,开箱即用(这也是其缺点,其实PMM之所以提供docker版,主要还是因为其自身太复杂了,友好性是非常差的)。其架构如下:

mysql/mongodb监控之Percona Monitoring and Management (PMM) 2.1.0安装使用_MySQL

     api提供了swagger api接口。

  prometheus提供直接查看被监控服务的状态和概要信息。

  graph是日常监控的主要部分。

  qan则主要用于分析sql查询性能。

  因此pmm监控由两部分组成。 

注:在正式开始安装pmm前,建议先熟悉docker

1、首先从https://www.percona.com/software/database-tools/percona-monitoring-and-management下载pmm server和pmm client。pmm server提供docker镜像。pmm client为rpm包或二进制包,需要注意下载对应的操作系统的版本。

2、docker安装。安装docker需要3.10之后的内核,也就是rhel/centos 7.x的版本。最新的版本又对container-selinux有版本要求,可能会导致无源的情况,如centos 7.2安装docker 19.03就有依赖找不到。所以最好是安装指定版本的docker如17.12。

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 docker-ce-17.12.0.ce-1.el7.centos

不指定的话,直接yum -y install docker-io即可。

【测了几个环境,docker包都不同:(,比如一个环境中yum list docker仅有一个版本,如下】

[root@ta5host ~]# yum list docker
Loaded plugins: fastestmirror, langpacks
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
Loading mirror speeds from cached hostfile
Available Packages
docker.x86_64                                                                     2:1.13.1-96.gitb2f74b2.el7.centos                                                                      extras
[root@ta5host ~]# ^C
[root@dbserver1 ~]# yum list docker-ce
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.163.com
 * epel: mirrors.aliyun.com
 * extras: mirrors.163.com
 * updates: mirrors.cn99.com
可安装的软件包
docker-ce.x86_64                                                                   3:19.03.5-3.el7                                                                            docker-ce-stable 

 可能原因:yum没有找到docker包,更新epel第三方软件库。 

yum install epel-release

亦或是没有连通外网,需要自己建http代理出去

然后再执行yum list docker。

2.1、启动docker服务

[root@ta5host ~]# systemctl start docker.service
[root@ta5host ~]# systemctl status docker.service

mysql/mongodb监控之Percona Monitoring and Management (PMM) 2.1.0安装使用_MySQL_02

 

3、加载本地镜像。

cat pmm-server-2.1.0.docker | docker import - pmm-server:2.1.0

[root@bigdata ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
pmm-server 2.1.0 3d05a877b5d7 4 weeks ago 1.49GB

4、创建镜像。

[root@dbserver1 ~]# docker create -v /opt/prometheus/data -v /opt/consul-data -v /var/lib/mysql -v /var/lib/grafana --name pmm-data pmm-server:2.1.0 /bin/true
Error response from daemon: Conflict. The container name "/pmm-data" is already in use by container "d4fe3fa73ead7f8bc4842d9c3e237b968a59b7190c5c8700cefca5081ac7c7a5". You have to remove (or rename) that container to be able to reuse that name.
[root@dbserver1 ~]# 
[root@dbserver1 ~]# docker rm d4fe3fa73ead7f8bc4842d9c3e237b968a59b7190c5c8700cefca5081ac7c7a5
d4fe3fa73ead7f8bc4842d9c3e237b968a59b7190c5c8700cefca5081ac7c7a5
[root@dbserver1 ~]# docker create -v /opt/prometheus/data -v /opt/consul-data -v /var/lib/mysql -v /var/lib/grafana --name pmm-data pmm-server:2.1.0 /bin/true
e21682af63a2484d06ab99859155a3b50f356815e0957e55bae93bcd9ff3ec3a
[root@dbserver1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
pmm-server          2.1.0               e31d9a94999b        About a minute ago   1.52GB
<none>              <none>              839dc180f674        17 minutes ago       1.52GB
hello-world         latest              fce289e99eb9        11 months ago        1.84kB

 /bin/true的含义为:

/bin/true

是linux系统自带的一个程序,它固定返回0,而0是bash语法中的真值。

相应的/bin/false返回的则是非零值。

这主要是用在shell脚本中,编程者希望放置真值的地方但shell脚本却只接受命令的地方。

5、启动容器

[root@ta5host test]# docker run -d -p 8088:8088 --volumes-from pmm-data --name pmm-server --restart always pmm-server:2.1.0
/usr/bin/docker-current: Error response from daemon: No command specified.

之前在另外一台centos 7.2服务器安装的时候没有问题,此时7.2/7.6均有问题,但是之前因为无源,使用的是docker-ce-17.12.0.ce-1.el7.centos。

问题是pmm是下载的,官网好像没看到命令。。

[root@dbserver1 ~]# docker pull percona/pmm-server:2.1.0
1: Pulling from percona/pmm-server
d8d02d457314: Pull complete
9c92f2ef74f3: Pull complete
Digest: sha256:ea4eea4b6c758702c2727c07148a2514812ec0c2200b3101aaf0849fe3bb1df9
Status: Downloaded newer image for percona/pmm-server:2.1.0

[root@dbserver1 ~]# docker run -d -p 8088:8088 --volumes-from pmm-data --name pmm-server --restart always percona/pmm-server:2.1.0
16003d3ecb22e4c3f8a262d192c1e0545db2080e5ef37faf84de13d69e118e28

6、查看docker进程。

[root@dbserver1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
16003d3ecb22 percona/pmm-server:2.1.0 "/opt/entrypoint.sh" 10 hours ago Up 10 hours 80/tcp, 443/tcp, 0.0.0.0:8088->8088/tcp pmm-server

6.1、查看pmm-server里面的进程

ord.d
root                16474               16431               0                   11:19               ?                   00:00:01            /usr/sbin/pmm-agent --config-file=/usr/local/percona/pmm2/config/pmm-agent.yaml
polkitd             16480               16468               0                   11:19               ?                   00:00:06            nginx: worker process
root                16498               16473               0                   11:19               ?                   00:00:00            /usr/bin/python2 /usr/bin/supervisorctl maintail -f
26                  16520               16465               0                   11:19               ?                   00:00:00            postgres: logger
26                  16523               16465               0                   11:19               ?                   00:00:00            postgres: checkpointer
26                  16524               16465               0                   11:19               ?                   00:00:00            postgres: background writer
26                  16525               16465               0                   11:19               ?                   00:00:00            postgres: walwriter
26                  16526               16465               0                   11:19               ?                   00:00:00            postgres: autovacuum launcher
26                  16527               16465               0                   11:19               ?                   00:00:01            postgres: stats collector
26                  16528               16465               0                   11:19               ?                   00:00:00            postgres: logical replication launcher
26                  16536               16465               0                   11:19               ?                   00:00:08            postgres: pmm-managed pmm-managed 127.0.0.1(41652) idle
root                16540               16474               0                   11:19               ?                   00:00:42            /usr/local/percona/pmm2/exporters/node_exporter --collector.bonding --collector.buddyinfo --collector.cpu --collector.diskstats --collector.entropy --collector.filefd --collector.filesystem --collector.loadavg --collector.meminfo --collector.meminfo_numa --collector.netdev --collector.netstat --collector.netstat.fields=^(.*_(InErrors|InErrs|InCsumErrors)|Tcp_(ActiveOpens|PassiveOpens|RetransSegs|CurrEstab|AttemptFails|OutSegs|InSegs|EstabResets|OutRsts|OutSegs)|Tcp_Rto(Algorithm|Min|Max)|Udp_(RcvbufErrors|SndbufErrors)|Udp(6?|Lite6?)_(InDatagrams|OutDatagrams|RcvbufErrors|SndbufErrors|NoPorts)|Icmp6?_(OutEchoReps|OutEchos|InEchos|InEchoReps|InAddrMaskReps|InAddrMasks|OutAddrMaskReps|OutAddrMasks|InTimestampReps|InTimestamps|OutTimestampReps|OutTimestamps|OutErrors|InDestUnreachs|OutDestUnreachs|InTimeExcds|InRedirects|OutRedirects|InMsgs|OutMsgs)|IcmpMsg_(InType3|OutType3)|Ip(6|Ext)_(InOctets|OutOctets)|Ip_Forwarding|TcpExt_(Listen.*|Syncookies.*|TCPTimeouts))$ --collector.processes --collector.standard.go --collector.standard.process --collector.stat --collector.textfile.directory.hr=/usr/local/percona/pmm2/collectors/textfile-collector/high-resolution --collector.textfile.directory.lr=/usr/local/percona/pmm2/collectors/textfile-collector/low-resolution --collector.textfile.directory.mr=/usr/local/percona/pmm2/collectors/textfile-collector/medium-resolution --collector.textfile.hr --collector.textfile.lr --collector.textfile.mr --collector.time --collector.uname --collector.vmstat --collector.vmstat.fields=^(pg(steal_(kswapd|direct)|refill|alloc)_(movable|normal|dma3?2?)|nr_(dirty.*|slab.*|vmscan.*|isolated.*|free.*|shmem.*|i?n?active.*|anon_transparent_.*|writeback.*|unstable|unevictable|mlock|mapped|bounce|page_table_pages|kernel_stack)|drop_slab|slabs_scanned|pgd?e?activate|pgpg(in|out)|pswp(in|out)|pgm?a?j?fault)$ --no-collector.arp --no-collector.bcache --no-collector.conntrack --no-collector.drbd --no-collector.edac --no-collector.hwmon --no-collector.infiniband --no-collector.interrupts --no-collector.ipvs --no-collector.ksmd --no-collector.logind --no-collector.mdadm --no-collector.mountstats --no-collector.netclass --no-collector.nfs --no-collector.nfsd --no-collector.ntp --no-collector.qdisc --no-collector.runit --no-collector.sockstat --no-collector.supervisord --no-collector.systemd --no-collector.tcpstat --no-collector.timex --no-collector.wifi --no-collector.xfs --no-collector.zfs --web.disable-exporter-metrics --web.listen-address=:42000
root                16542               16474               0                   11:19               ?                   00:00:31            /usr/local/percona/pmm2/exporters/postgres_exporter --collect.custom_query.hr --collect.custom_query.hr.directory=/usr/local/percona/pmm2/collectors/custom-queries/postgresql/high-resolution --collect.custom_query.lr --collect.custom_query.lr.directory=/usr/local/percona/pmm2/collectors/custom-queries/postgresql/low-resolution --collect.custom_query.mr --collect.custom_query.mr.directory=/usr/local/percona/pmm2/collectors/custom-queries/postgresql/medium-resolution --web.listen-address=:42001
26                  16547               16465               0                   11:19               ?                   00:00:00            postgres: pmm-managed postgres 127.0.0.1(41654) idle
26                  16552               16465               0                   11:19               ?                   00:00:30            postgres: pmm-managed postgres 127.0.0.1(41656) idle
zjhua               16592               16431               0                   11:19               ?                   00:00:13            /usr/sbin/percona-qan-api2 --data-retention=30
26                  17130               16465               0                   11:22               ?                   00:00:07            postgres: pmm-managed pmm-managed 127.0.0.1(43580) idle

可见pmm还是很复杂的,完全手工搭建的话,成本将会很高。

7、打开http://yourip(测了几次,第一次的服务器可以,后来非80端口都不行)。

mysql/mongodb监控之Percona Monitoring and Management (PMM) 2.1.0安装使用_MySQL_03

 PMM客户端安装

  安装很简单,只需要rpm -ivh pmm包即可。

  但是在pmm-admin执行的时候,报了下列错误:

[root@bigdata ~]# pmm-admin config --server-insecure-tls --server-url=https://admin:admin@172.17.0.1:443
Checking local pmm-agent status...
pmm-agent is not running. Please re-run `pmm-agent setup` with --config-file flag.

  检查进行,pmm-agent又是在运行的,如下:

[root@bigdata ~]# ps axu | grep pmm-agent
root 11586 0.0 0.0 112708 968 pts/3 S+ 12:56 0:00 grep --color=auto pmm-agent
root 32005 0.0 0.0 1141056 8324 ? Sl Dec15 1:02 /usr/sbin/pmm-agent --config-file=/usr/local/percona/pmm2/config/pmm-agent.yaml

  这种情况大概率就是前面的pmm-data,pmm-server安装问题。docker数据卷容器。

  查看pmm-admin状态,如下:

[root@dbserver1 ~]# pmm-admin status
Agent ID: /agent_id/ab40f93c-d591-479a-89f6-4d6b4da97415
Node ID : /node_id/1eee5c26-a612-4118-ab62-7522be0dcf8c

PMM Server:
	URL    : https://172.17.0.1:443/
	Version: 2.1.0

PMM-agent:
	Connected : true
	Time drift: 113.609µs
	Latency   : 343.499µs

Agents:
	/agent_id/01d81274-b10a-4ade-b4b4-293d78faf0bf QAN_MONGODB_PROFILER_AGENT RUNNING
	/agent_id/146b2803-3a4e-4846-9a36-71849bfcc9c4 MYSQLD_EXPORTER RUNNING
	/agent_id/4a620d1b-6752-46b0-af09-85dea14703d4 NODE_EXPORTER RUNNING
	/agent_id/85d77a20-fea3-4f37-9993-f17d07787bc5 QAN_MYSQL_PERFSCHEMA_AGENT RUNNING
	/agent_id/9c183132-ef27-42f1-9d36-be38f24fb36d MONGODB_EXPORTER RUNNING
	/agent_id/a905f340-1325-4dd0-8f69-11ef6c6efb57 QAN_MYSQL_SLOWLOG_AGENT RUNNING
	/agent_id/b8bc1ac0-75ea-4e04-8ca8-cc895ff1d335 MYSQLD_EXPORTER RUNNING

添加mongodb监控

pmm-admin add mongodb --username=tabase --password=tabase mongo 10.20.30.16:27017  #认证模式

pmm-admin add mongodb 10.20.30.17:27017  #不认证模式

添加mysql监控

pmm-admin add mysql --query-source=perfschema --username=hs_tabase --password=hs_tabase 16-mysql 10.20.30.16:3306 # 基于performance schema

pmm-admin add mysql --query-source=slowlog --username=root --password=123456 145-mysql 192.168.223.145:3306  # 基于慢日志

监控

mysql/mongodb监控之Percona Monitoring and Management (PMM) 2.1.0安装使用_MySQL_04

 

 查看当前被监控实例的状态:

mysql/mongodb监控之Percona Monitoring and Management (PMM) 2.1.0安装使用_MySQL_05

 

 mysql/mongodb监控之Percona Monitoring and Management (PMM) 2.1.0安装使用_MySQL_06

 

mysql/mongodb监控之Percona Monitoring and Management (PMM) 2.1.0安装使用_MySQL_07

完整的使用手册可参见:https://learn.percona.com/download-percona-monitoring-and-management-pmm-manual-2-2

花若盛开,蝶自飞来,你若精彩,幸福开怀!2020年12月11日-18日