在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版,主要还是因为其自身太复杂了,友好性是非常差的)。其架构如下:
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
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端口都不行)。
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 # 基于慢日志
监控
查看当前被监控实例的状态:
完整的使用手册可参见:https://learn.percona.com/download-percona-monitoring-and-management-pmm-manual-2-2