Percona Monitoring and Management (PMM)2是一個用於管理和監控MySQL、PostgreSQL、MongoDB和ProxySQL性能的開源平台。它是由Percona與管理數據庫服務、支助和咨詢領域的專家合作開發的。
PMM是一種免費的開源解決方案,您可以在自己的環境中運行它,以獲得最大的安全性和可靠性。它為MySQL、PostgreSQL和MongoDB服務器提供了全面的基於時間的分析,以確保您的數據盡可能高效地工作。
PMM平台基於支持可伸縮性的客戶機-服務器模型。它包括以下模塊:
PMM客戶機安裝在您想要監視的每個數據庫主機上。它收集服務器指標、一般系統指標和查詢分析數據,以獲得完整的性能概述。
PMM服務器是PMM的中心部分,它聚合收集到的數據,並在web界面中以表格、儀表板和圖形的形式顯示這些數據。
模塊被打包以便於安裝和使用。假設用戶不需要了解組成每個模塊的具體工具是什么,以及它們如何交互。然而,如果您想充分利用PMM的潛力,內部結構是重要的。
PMM是一種工具的集合,它被設計成可以無縫地協同工作。有些是由Percona開發的,有些是第三方開源工具。
PMM Server
PMM服務器在作為中央監視主機的機器上運行。它通過以下方式作為設備分發:
*可用於運行容器的Docker映像
*可以在VirtualBox或其他管理程序中運行的OVA(打開虛擬設備)
*您可以通過Amazon Web服務運行的AMI (Amazon Machine Image)
PMM服務器包括以下工具:
*查詢分析(QAN)允許您在一段時間內分析MySQL查詢性能。除客戶端QAN代理外,還包括:
QAN API是存儲和訪問運行在PMM客戶機上的QAN代理收集的查詢數據的后端。
QAN Web App是一個可視化收集查詢分析數據的Web應用程序。
*Metrics Monitor提供了對MySQL或MongoDB服務器實例至關重要的指標的歷史視圖。它包括以下內容:
Prometheus是一個第三方時間序列數據庫,它連接到運行在PMM客戶機上的出口商,並匯總出口商收集的指標。
ClickHouse是一個第三方的面向列的數據庫,它促進了查詢分析功能。有關更多信息,請參見ClickHouse文檔。
Grafana是一個第三方的儀表盤和圖形生成器,用於將普羅米修斯在直觀的web界面中聚合的數據可視化。
Percona儀表板是由Percona為Grafana開發的一套儀表板。
所有工具都可以從PMM服務器的web界面(登錄頁面)訪問。
PMM Client
每個PMM客戶機收集關於一般系統和數據庫性能的各種數據,並將這些數據發送到相應的PMM服務器。
PMM客戶端包括以下內容:
PMM -admin是用於管理PMM客戶機的命令行工具,例如,用於添加和刪除您想要監視的數據庫實例。
PMM -agent是一個客戶端組件,一個最小的命令行接口,它是負責提供客戶端功能的中心入口點:它進行客戶端身份驗證,獲取存儲在PMM服務器上的客戶端配置,管理導出程序和其他代理。
node_exporters是一個收集一般系統指標的Prometheus端口。
mysqld_exporters是一個收集MySQL服務器指標的Prometheus端口。
mongodb_exporters是一個收集MongoDB服務器指標的Prometheus端口。
postgres_端口是一個收集PostgreSQL性能指標的Prometheus端口。
proxysql_exporters是一個收集ProxySQL性能指標的Prometheus端口。
為了使從PMM客戶機到PMM服務器的數據傳輸更加安全,所有端口都能夠使用SSL/TLS加密的連接,並且它們與PMM服務器的通信受到HTTP基本身份驗證的保護。
參考:
端口:以下端口必須在pmm server和client之間開放;
pmm server需要開放80或443端口用於pmm client訪問pmm web。
pmm client端必須開放以下默認端口采集數據,可以通過pmm-admin addc命令進行修改。
42000 For PMM to collect genenal system metrics.
42001 This port is used by a service which collects query performance data and makes it available to QAN.
42002 For PMM to collect MySQL server metrics.
42003 For PMM to collect MongoDB server metrics.
42004 For PMM to collect ProxySQL server metrics.
安裝步驟
docker 部署pmm與mysql監控
安裝docker
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 -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum -y install docker-ce
systemctl start docker
docker run hello-world
PMM Server:192.168.24.90
PMM Client:192.168.24.92
1.Docker安裝PMM Server
這里使用的Docker標簽適用於最新版本的PMM 2(2.9.1),但是您可以指定任何可用的標簽來使用相應版本的PMM服務器。
度量收集消耗磁盤空間。PMM需要為每個被監視的數據庫節點提供大約1GB的存儲空間,數據保留時間設置為一周。(默認情況下,數據保留時間為30天。)要減小Prometheus數據庫的大小,可以考慮禁用表統計信息。
盡管一個受監控的數據庫節點的最小內存量為2 GB,但內存使用不會隨着節點數量的增加而增加。例如,16GB足夠用於20個節點。
#版本可自選
docker create -v /opt/prometheus/data -v /opt/consul-data -v /var/lib/mysql -v /var/lib/grafana --name pmm-data percona/pmm-server:2 /bin/true
2.啟動
#必須開啟防火牆
docker run -d -p 80:80 -p 443:443 --volumes-from pmm-data --name pmm-server --restart always percona/pmm-server:2
端口默認是 80 ,如果80端口被占用,可改為其它端口號 比如 81
3.查看docker運行狀態
docker ps -a
4.瀏覽器訪問,地址一般是 http://ip地址:端口,也可以直接輸 ip地址; 注意,一般端口默認為80,默認用戶名:admin,默認密碼:admin
例:http://192.168.24.90:80
5.安裝pmm-client客戶端。
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm -y
yum install pmm2-client -y
6.連接PMM Server。
pmm-admin config --server-insecure-tls --server-url=https://admin:admin@<IP Address>:443
例:pmm-admin config --server-insecure-tls --server-url=https://admin:admin@192.168.24.90:443
注:PMM2不需要像PMM1輸入指定命令添加Linux主機監控
當你使用 pmm-admin config配置了要監控的節點時,PMM2從那時自動開始收集Linux指標。
7.登陸瀏覽器訪問主機監控數據
#pmm-admin 管理命令
annotate [<flags>] <text>
在Grafana圖表中添加注釋
config [<flags>] [<node-address>] [<node-type>] [<node-name>]
配置本地pmm-agent
list [<flags>]
顯示在此節點上運行的服務和代理
status
顯示關於本地pmm代理的信息
summary [<flags>]
獲取系統數據以進行診斷
add external --listen-port=LISTEN-PORT [<flags>]
將外部監視添加
add mongodb [<flags>] [<name>] [<address>]
監控MongoDB
add mysql [<flags>] [<name>] [<address>]
監控MySQL
add postgresql [<flags>] [<name>] [<address>]
監控PostgreSQL
add proxysql [<flags>] [<name>] [<address>]
監控ProxySQL
register [<flags>] [<node-address>] [<node-type>] [<node-name>]
注冊當前節點到PMM服務器
remove [<flags>] <service-type> [<service-name>]
從監控中刪除服務
7.添加mysql監控。
MySQL服務器添加指定權限用戶
create user pmm@'%' identified by 'pmmpassword';
grant select,process,super,replication client on *.* to 'pmm'@'%';
grant update,delete,drop on performance_schema.* to 'pmm'@'%';
flush privileges;
#授權密碼如報錯:Your password does not satisfy the current policy requirements
set global validate_password_policy=LOW;
MySQL8.0版本設置:set global validate_password.policy=LOW;
查詢分析獲得從MySQL中獲取指標數據有兩種可能的來源:慢查詢日志和Performance Schema
添加Performance Schema數據字典監控
pmm-admin add mysql --query-source=perfschema --username=pmm --password=pmmpassword ps-mysql
添加慢日志監控
pmm-admin add mysql --query-source=slowlog --username=pmm --password=pmmpassword sl-mysql
查看運行的服務
pmm-admin list
9.pmm服務器頁面查看
點擊Query Analytics進入SQL語句分析
10.MySQL最佳配置
慢日志設置
如果你使用Percona分支版本,正確的慢查詢日志配置將以最小的開銷提供最多的信息。否則,如果支持請使用 PerformanceSchema。
按定義,慢查詢日志應該只記錄慢查詢。這些查詢的執行時間超過了特定的閾值。這個閾值由參數 long_query_time指定。
在高負載的應用中,頻繁快速的查詢比罕見的慢速查詢對性能的影響要大的多。為全面分析你的查詢流量,設置 long_query_time為0,這樣所有的查詢語句都將被記錄。
然而,記錄所有的查詢將消耗I/O帶寬,並導致慢查詢日志增長很快。為了限制記錄到慢查詢日志中的查詢數量,使用Percona分支版本中的查詢采樣功能。
查詢采樣可能導致一些罕見的慢查詢無法被記錄到慢查詢日志中。為了避免這種情況,使用 slow_query_long_always_write_time參數指定哪類查詢應該被忽略采樣。也就是說,長時間的慢查詢應該始終記錄到慢查詢日志中。
Performance Schema設置
PMM查詢數據的默認源是慢查詢日志。這在MySQL5.1及以后的版本中可用。從MySQL5.6版本(包括Percona分支版本5.6及以后版本),你可以選擇從Performance Schema中解析查詢數據,而不是慢查詢日志。從MySQL5.6.6開始,默認啟用Performance Schema。
Performance Schema不像慢查詢日志那樣有豐富的數據,但是它具有所有關鍵的數據,並且通常解析很快。如果您沒有使用Percona分支版本(支持對慢查詢日志采樣),Performance Schema是更好的選擇。
啟用Performance Schema ,要將 performance_schema參數設置為 ON:
SHOW VARIABLES LIKE 'performance_schema';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| performance_schema | ON |
+--------------------+-------+
如果這個參數沒有設置為ON,在 my.cnf配置文件中添加以下內容並重啟MySQL服務。
[mysql]
performance_schema=ON
如果您使用了自定義的Performance Schema配置,確認 statement_digest消費者已經啟用:
select * from setup_consumers;
+----------------------------------+---------+
| NAME | ENABLED |
+----------------------------------+---------+
| events_stages_current | NO |
| events_stages_history | NO |
| events_stages_history_long | NO |
| events_statements_current | YES |
| events_statements_history | YES |
| events_statements_history_long | NO |
| events_transactions_current | NO |
| events_transactions_history | NO |
| events_transactions_history_long | NO |
| events_waits_current | NO |
| events_waits_history | NO |
| events_waits_history_long | NO |
| global_instrumentation | YES |
| thread_instrumentation | YES |
| statements_digest | YES |
+----------------------------------+---------+
15 rows in set (0.00 sec)
重要
Performance Schema生產者在MySQL5.6.6及之后的版本中默認啟用。它在MySQL5.6之前的版本中完全不可用。如果某些生產者沒有被啟用,您在 MySQLPerformanceSchemaDashboard的dashboard中看不到相應的圖。啟用所有的生產者,在啟動MySQL服務時設置 --performance_schema_instrument選項為 '%=on'。
mysqld --performance-schema-instrument='%=on'
這個選項會帶來額外的負載,請小心使用。
如果實例已經在運行,配置QAN agent從Performance Schema中收集數據:
1.打開PMM Query Analytics dashboard。
2.點擊Settings按鈕。
3.打開Settings部分。
4.從收集下拉列表中選擇 PerformanceSchema。
5.點擊Apply保存更改。
如果您使用pmm-admin工具添加一個新的監控實例,使用 --query-sourceperfschema 選項:
使用root用戶或者sudo命令執行以下命令
pmm-admin add mysql --username=pmm --password=pmmpassword --query-source='perfschema' ps-mysql 127.0.0.1:3306
更多信息,請執行 pmm-admin add mysql--help。
MySQL InnoDB 指標
為圖形收集指標和統計信息會增加開銷。您可以使用收集和繪制低開銷的指標,在故障排除時啟用高開銷的指標。
InnoDB指標提供了有關InnoDB操作的詳細信息。盡管您可以選擇捕獲指定的計數器,但是即使始終啟用它們,它們的開銷也很低。啟用所有的InnoDB指標,設置全局參數 innodb_monitor_enable為 all:
SET GLOBAL innodb_monitor_enable
Percona分支版本的特殊設置
默認情況下,並非所有Metrics Monitor的dashboard都可以用於所有MySQL分支和配置:Oracle版,Percona版或者MariaDB。一些圖形適用於Percona版本和專有的插件和額外的配置。
MySQL用戶統計信息(userstat)
用戶統計信息是Percona分支版本和MariaDB分支版本的功能。它提供了用戶活動、單個表和索引訪問的信息。在某些情況下,收集用戶統計信息可能會帶來高昂的開銷,所以請謹慎使用此功能。
啟用收集用戶統計信息,設置 userstat參數為 1。
查詢相應時間插件
查詢響應時間分布是Percona分支版的可用功能。它提供了不同查詢組的查詢響應時間變化的信息,通常可以在導致嚴重問題之前發現性能問題。
啟用收集查詢響應時間:
1.安裝 QUERY_RESPONSE_TIME插件 mysql>INSTALL PLUGIN QUERY_RESPONSE_TIME_AUDIT SONAME'query_response_time.so';mysql>INSTALL PLUGIN QUERY_RESPONSE_TIME SONAME'query_response_time.so';mysql>INSTALL PLUGIN QUERY_RESPONSE_TIME_READ SONAME'query_response_time.so';mysql>INSTALL PLUGIN QUERY_RESPONSE_TIME_WRITE SONAME'query_response_time.so';
2.設置全局參數 query_response_time_stats為 ON。 mysql>SET GLOBAL query_response_time_stats=ON;
相關信息:Percona分支版官方文檔
query_response_time_stats: https://www.percona.com/doc/percona-server/5.7/diagnostics/responsetimedistribution.html#queryresponsetime_stats
Response time 介紹: https://www.percona.com/doc/percona-server/5.7/diagnostics/responsetimedistribution.html#installing-the-plugins
logslowrate_limit
log_slow_rate_limit參數定義了慢查詢日志記錄查詢的比例。一個好的經驗是每秒記錄100個查詢。例如如果您的Percona實例QPS為10000,您應該設 log_slow_rate_limit為 100,這樣慢日志會記錄每100個查詢。
注意
當使用查詢采樣時,設置 log_slow_rate_type為 query,以便它應用的是查詢而不是會話。最好設置 log_slow_verbosity為 full,以便在慢查詢日志中記錄每個記錄的查詢語句的最大的信息量。
logslowverbosity
- log_slow_verbosity參數指定了慢查詢日志中包含多少信息。最好設置 log_slow_verbosity為 full,以便存儲有關每個記錄的查詢語句的最大信息量。
slowqueryloguseglobal_control
默認情況下,慢查詢日志只適用於新會話。如果希望調整慢查詢日志設置並將這些設置應用於現有連接,請將 slow_query_log_use_global_control設置為 all。
為PMM配置MySQL8.0
MySQL8(在8.0.4版本中)改變了對客戶端身份驗證的方式。 default_authentication_pluging參數設置為 caching_sha2_password。默認值的改變意味着MySQL的驅動需要支持SHA-256身份驗證。另外,在使用 caching_sha2_password時,必須對MySQL8的加密通道進行加密。
PMM使用的MySQL驅動還不支持SHA-256身份驗證。
為支持當前MySQL的版本,PMM需要設置專有的MySQL用戶。該MySQL用戶應該使用 mysql_native_password插件。雖然MySQL被配置支持SSL客戶端,但是到MySQL服務器的連接沒有加密。
有兩種解決方法監控MySQL8.0.4及以上版本
1.更改你打算用於PMM的MySQL用戶
2.改變MySQL的全局配置
更改MySQL用戶
假設你已經創建了你打算用於PMM的MySQL用戶,請使用以下方法更改:
然后,將此用戶傳遞給 pmm-admin add作為 --username的參數值
這是首選的方法,因為這只會降低一個用戶的安全性。
更改全局MySQL的配置
一種不太安全的方法是在添加監控前將 default_authentication_plugin設置為 mysql_native_password。然后,重啟MySQL服務,應用這個更改。