前言
Percona Monitoring and Management (PMM) 是 Percona 公司基于业界流行的组件 Prometheus 和 Grafana 设计开发的一体化数据库监控解决方案。本篇文章介绍如何使用它监控 MySQL 和 PostgreSQL 两款数据库。
1. 安装部署
PPM 有两个组件分别是 Server 端和 Client Agent 端,其中 Server 端安装需要使用 docker,由于 docker 被墙了,所以直接使用 docker pull 命令会超时,可以先把镜像下载下来,然后再 load 安装。
1.1 Server 安装
如果可以访问外网,那么直接使用 pull 命令即可。
-- docker 安装
docker pull percona/pmm-server:2
离线安装,加载镜像:
docker load -i pmm-server-2.tar
创建数据卷容器:
docker volume create pmm-data
创建并启动容器:
docker run --detach --restart always \
--publish 443:443 \
-v pmm-data:/srv \
--name pmm-server \
percona/pmm-server:2
验证:
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
184206a00f3d percona/pmm-server:2 "/opt/entrypoint.sh" 5 hours ago Up 4 hours (healthy) 80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp pmm-server
参考资料:Docker 安装 PMM
访问地址:https://{Server IP}/graph/dashboards 默认用户:admin 密码:admin
1.2 Client 安装
PMM 的 Client 需要到官网单独下载,地址:https://www.percona.com/downloads
下载后,上传到需要监控到服务器上面,执行如下命令:
# 解压缩
tar -zxvf pmm2-client-2.42.0.tar.gz
# 移动到 /usr/local
mv pmm2-client-2.42.0 /usr/local/
# 进入目录
cd pmm2-client-2.42.0/
# 执行安装
./install_tarball
# 输出:
Installing into /usr/local/percona/pmm2...
Successfully installed PMM Client to /usr/local/percona/pmm2
# 环境变量配置
export PATH=$PATH:/usr/local/percona/pmm2/bin
配置 agent 节点,修改 server-address、server-password 两个 Server 节点的连接参数。
pmm-agent setup --config-file=/usr/local/percona/pmm2/config/pmm-agent.yaml --server-address=172.16.121.152 --server-insecure-tls --server-username=admin --server-password=admin123
INFO[2024-09-04T13:54:38.390+08:00] Loading configuration file /usr/local/percona/pmm2/config/pmm-agent.yaml. component=setup
INFO[2024-09-04T13:54:38.391+08:00] Temporary directory is not configured and will be set to /usr/local/percona/pmm2/tmp component=setup
INFO[2024-09-04T13:54:38.391+08:00] Using /usr/local/percona/pmm2/exporters/node_exporter component=setup
INFO[2024-09-04T13:54:38.391+08:00] Using /usr/local/percona/pmm2/exporters/mysqld_exporter component=setup
INFO[2024-09-04T13:54:38.391+08:00] Using /usr/local/percona/pmm2/exporters/mongodb_exporter component=setup
INFO[2024-09-04T13:54:38.391+08:00] Using /usr/local/percona/pmm2/exporters/postgres_exporter component=setup
INFO[2024-09-04T13:54:38.391+08:00] Using /usr/local/percona/pmm2/exporters/proxysql_exporter component=setup
INFO[2024-09-04T13:54:38.391+08:00] Using /usr/local/percona/pmm2/exporters/rds_exporter component=setup
INFO[2024-09-04T13:54:38.391+08:00] Using /usr/local/percona/pmm2/exporters/azure_exporter component=setup
INFO[2024-09-04T13:54:38.391+08:00] Using /usr/local/percona/pmm2/exporters/vmagent component=setup
INFO[2024-09-04T13:54:38.391+08:00] Updating PMM Server address from "172.16.121.152" to "172.16.121.152:443". component=setup
Checking local pmm-agent status...
pmm-agent is not running.
Registering pmm-agent on PMM Server...
Registered.
Configuration file /usr/local/percona/pmm2/config/pmm-agent.yaml updated.
Please start pmm-agent: `pmm-agent --config-file=/usr/local/percona/pmm2/config/pmm-agent.yaml`.
通过服务的方式来管理 agent:
vi /etc/systemd/system/pmm-agent.service
写入配置信息:
[Unit]
Description=pmm-agent
After=time-sync.target network.target
[Service]
Type=simple
ExecStart=/usr/local/percona/pmm2/bin/pmm-agent --config-file=/usr/local/percona/pmm2/config/pmm-agent.yaml
Restart=always
RestartSec=2s
[Install]
WantedBy=multi-user.target
刷新配置:
systemctl daemon-reload
启动 anget:
systemctl start pmm-agent
可通过下方命令查询 agent 状态:
pmm-admin status
输出:
Agent ID : /agent_id/d1599b9e-7985-41d9-9d2a-1b754a25bd8f
Node ID : /node_id/b129f3d1-51ed-47f5-8455-d851c38c8df0
Node name: 172-16-104-55
PMM Server:
URL : https://172.16.121.152:443/
Version: 2.42.0
PMM Client:
Connected : true
Time drift : 5.376756ms
Latency : 910.726µs
Connection uptime: 100
pmm-admin version: 2.42.0
pmm-agent version: 2.42.0
Agents:
/agent_id/0f863af6-c12f-4437-9e37-dc6bdcc8a2ab mysqld_exporter Running 42002
/agent_id/47c59e4e-2f1f-49e6-91b4-81e7fbe0e4c3 postgres_exporter Running 42003
/agent_id/5e7f0b3b-59b0-4ea3-aa11-560cd14fb382 vmagent Running 42000
/agent_id/89500881-98ce-4bac-b9ce-7f93e11ed37e mysql_slowlog_agent Running 0
/agent_id/9a0445c3-f225-4fbd-881d-99202bc564d8 node_exporter Running 42001
/agent_id/d68a6ebe-29de-4dbd-ab5f-6130866887bd postgresql_pgstatements_agent Running 0
2. 监控数据库
Clinet 端 Agent 安装成功后,就可以通过命令行的方式,添加本地数据库的监控。
2.1 MySQL
创建一个 mysql 采集账号:
CREATE USER 'pmm'@'127.0.0.1' IDENTIFIED BY 'pass' WITH MAX_USER_CONNECTIONS 10;
GRANT SELECT, PROCESS, REPLICATION CLIENT, RELOAD, BACKUP_ADMIN ON *.* TO 'pmm'@'127.0.0.1';
开启 MySQL 采集,默认是会开启所有的采集器:
- –query-source:是慢 SQL 采集方式,none 表示不采集,slowlog 表示采集慢日志,performance 表示采集 performance_schema 中的数据。
- –username:MySQL 用户名,使用上一步创建的用户。
- –password:采集用户密码。
- mysql-node1:这个是节点服务名称,由用户自定义。
- 127.0.0.1:3306:MySQL 实例的地址。
pmm-admin add mysql --query-source=slowlog --username=pmm --password=pass mysql-node1 127.0.0.1:3306
输出:
MySQL Service added.
Service ID : /service_id/479376e5-e549-4e6e-9f24-805f6cf2312e
Service name: mysql-node1
Table statistics collection enabled (the limit is 1000, the actual table count is 358).
通过 pmm-admin list 命令可以查看,该节点当前 agent 开启哪些采集:
Service type Service name Address and port Service ID
MySQL mysql-node1 127.0.0.1:3306 /service_id/479376e5-e549-4e6e-9f24-805f6cf2312e
PostgreSQL test-pg 127.0.0.1:5432 /service_id/d52090cf-4836-401d-a1cc-5e874ace0e33
Agent type Status Metrics Mode Agent ID Service ID Port
pmm_agent Connected /agent_id/d1599b9e-7985-41d9-9d2a-1b754a25bd8f 0
node_exporter Running push /agent_id/9a0445c3-f225-4fbd-881d-99202bc564d8 42001
mysqld_exporter Running push /agent_id/0f863af6-c12f-4437-9e37-dc6bdcc8a2ab /service_id/479376e5-e549-4e6e-9f24-805f6cf2312e 42002
postgres_exporter Running push /agent_id/47c59e4e-2f1f-49e6-91b4-81e7fbe0e4c3 /service_id/d52090cf-4836-401d-a1cc-5e874ace0e33 42003
mysql_slowlog_agent Running /agent_id/89500881-98ce-4bac-b9ce-7f93e11ed37e /service_id/479376e5-e549-4e6e-9f24-805f6cf2312e 0
postgresql_pgstatements_agent Running /agent_id/d68a6ebe-29de-4dbd-ab5f-6130866887bd /service_id/d52090cf-4836-401d-a1cc-5e874ace0e33 0
vmagent Running push /agent_id/5e7f0b3b-59b0-4ea3-aa11-560cd14fb382 42000
再使用下方命令查询具体的采集器:
如果想禁用某些采集器,再添加时,可使用 --disable-collectors 参数。
2.2 PostgreSQL
先创建采集使用的帐户。
CREATE USER pmm WITH SUPERUSER ENCRYPTED PASSWORD 'admin123';
开启本地 PostgreSQL 采集,需要注意的是 Query 采集需要安装 pg_stat_statements 插件。
pmm-admin add postgresql \
--username=pmm \
--password=admin123 \
--server-url=https://admin:admin123@172.16.121.152:443 \
--server-insecure-tls \
--service-name=test-pg
安装方式参考:pg_stat_statements 插件安装
3. Dashboard 介绍
这里是总览:
值得介绍的是,PMM 会采集 Slow SQL 并且帮助用户可视化:
总结
本篇文章介绍了 PMM 监控如何部署和安装,并且接入数据库实例,这块工具非常强大,是一款企业级的数据库监控方案。