天天看點

mysql/mongodb監控之Percona Monitoring and Management (PMM) 2.1.0安裝使用

  在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安裝使用

     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安裝使用

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端口都不行)。

mysql/mongodb監控之Percona Monitoring and Management (PMM) 2.1.0安裝使用

 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安裝使用

 檢視目前被監控執行個體的狀态:

mysql/mongodb監控之Percona Monitoring and Management (PMM) 2.1.0安裝使用
mysql/mongodb監控之Percona Monitoring and Management (PMM) 2.1.0安裝使用
mysql/mongodb監控之Percona Monitoring and Management (PMM) 2.1.0安裝使用

完整的使用手冊可參見:https://learn.percona.com/download-percona-monitoring-and-management-pmm-manual-2-2

mysql/mongodb監控之Percona Monitoring and Management (PMM) 2.1.0安裝使用