在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。
原因:參考https://blog.csdn.net/qq_37212970/article/details/84379926,https://www.cnblogs.com/wish123/p/6573899.html。問題是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:[email protected]: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安裝問題。參見https://www.cnblogs.com/zhjh256/p/11967952.html,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安裝使用
檢視目前被監控執行個體的狀态:
完整的使用手冊可參見:https://learn.percona.com/download-percona-monitoring-and-management-pmm-manual-2-2