Percona Monitoring and Management (PMM) 安装与配置
PMM 全称是 Percona Monitoring and Management,是一个开源的数据库监控工具,支持 MySQL、MariaDB、MongoDB、PostgreSQL 等数据库,提供了丰富的监控指标、图表、报警等功能。
官方文档:https://docs.percona.com/percona-monitoring-and-management/index.html
PMM 中分为 PMM Server 和 PMM Client 两部分,PMM Server 用于存储监控数据并提供页面展示,PMM Client 用于采集监控数据。
1. 安装 pmm-server
version: '3'
services:
pmm-server:
image: percona/pmm-server:2
container_name: pmm-server
hostname: pmm-server
restart: always
volumes:
- ./srv:/srv
environment:
- GF_SMTP_ENABLED=true
- GF_SMTP_HOST=smtp.qq.com:465
- GF_SMTP_USER=example@qq.com
- GF_SMTP_PASSWORD=password
- GF_SMTP_SKIP_VERIFY=false
- GF_SMTP_FROM_ADDRESS=example@qq.com
- GF_SMTP_FROM_NAME=Percona Alerting
ports:
- 80:80
- 443:443安装完成后,访问 https://<pmm_server_ip>/,输入用户名 admin 和密码 admin 登录。登录后会提示修改密码,修改完成后即可进入监控页面。如果你想使用脚本自动修改密码,可以使用以下命令:
docker exec -t pmm-server change-admin-password <new_password>其中 <new_password> 为你要修改的新密码,pmm-server 为你的容器名称。
安装时还可配置是否禁止自动检测更新,数据保留时间,日志级别,Grafana 参数等,详细可参考 https://docs.percona.com/percona-monitoring-and-management/setting-up/server/docker.html#environment-variables
2. 创建 API 密钥
访问后点击左侧导航 -> Configuration -> API Keys 或直接访问 https://<pmm_server_ip>/graph/org/apikeys 可进入 API 密钥配置页面,这样可以使你修改 PMM Server 登录账号密码时无需再去修改 PMM Client 上的配置。
创建一个 Admin 权限的密钥,名称和过期时间自己根据情况填写,然后复制生成的 Key
详细可参考:https://docs.percona.com/percona-monitoring-and-management/details/api.html#authenticate
注意,目前 PMM 不支持 Service Account 认证方式,注意不要将 API Keys 迁移到 Service Account.
3. 安装 pmm-client
version: '3'
services:
pmm-client:
image: percona/pmm-client:2
container_name: pmm-client
hostname: pmm-client # 如果你需要部署多个 pmm-client,推荐这里修改为更具辨识度的名字
restart: always
environment:
- PMM_AGENT_SERVER_ADDRESS={{pmm_server_ip:port}} # 注意这里要替换为 pmm_server 的地址
- PMM_AGENT_SERVER_USERNAME=api_key # 如果使用 api key 则这里写 api_key, 如果使用 service account 则这里写 account name
- PMM_AGENT_SERVER_PASSWORD=eyJrIjoiaEo4VklQR01qNFIxOTJnRkhkMHZFZjhIVE42Sm1lYjkiLCJuIjoidG9rZW4iLCJpZCI6MX0= # 这里写生成的 key
- PMM_AGENT_SERVER_INSECURE_TLS=1 # 跳过 PMM 服务器 TLS 证书验证。
- PMM_AGENT_SETUP=1
- PMM_AGENT_CONFIG_FILE=config/pmm-agent.yaml
volumes:
- ./srv:/srv
networks:
pxc_net_overlay: # 这里推荐先将 pmm-client 加入到 mysql 容器所在网络, 方便一会使用
networks:
pxc_net_overlay:
name: pxc_net_overlay
external: true
driver: overlay文档中有许多 pmm-admin 开头的命令,由于我们的 pmm-client 是安装在 docker 容器中的所以需要加个前缀 docker exec pmm-client。
如查看 pmm-client 运行状态:docker exec pmm-client pmm-admin status
4. pmm-server 验证 pmm-client 添加是否成功
添加 pmm-client 后可以在页面上点击左侧导航 -> Configuration -> Inventory -> Nodes 或直接访问 https://<pmm_server_ip>/graph/inventory/nodes 可以看到添加的 pmm-client。
5. 向 pmm-client 注册 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';上面的命令是创建一个名为 pmm 的用户,密码为 pass,授予允许 127.0.0.1 这个 ip 访问。不过由于我们使用 docker,需要将允许访问的 ip 修改为 pmm-client 容器访问 MySQL 时 pmm-client 的 ip,如果确认网络环境安全,也可使用 % 授予所有 ip。
向 PMM 服务端注册 MySQL 服务
使用 perfschema 监控模式,在 pmm-client 上执行:
docker exec pmm-client pmm-admin add mysql --username=pmm --password='pass' --query-source=perfschema <mysql_server_name> <mysql_ip:mysql_port>使用 slowlog 监控模式,在 pmm-client 上执行:
docker exec pmm-client pmm-admin add mysql --username=pmm --password='pass' --query-source=slowlog --size-slow-logs=-1GiB <mysql_server_name> <mysql_ip:mysql_port>关于两种模式的区别和更详细的参数可参考:https://docs.percona.com/percona-monitoring-and-management/setting-up/client/mysql.html
添加成功后会提示:
MySQL Service added.
Service ID : /service_id/89eb3bb2-5d06-44ac-b404-dee9054a47d6
Service name: mysql_server_name
Table statistics collection enabled (the limit is 1000, the actual table count is 349).然后就能在 pmm-server 仪表盘中点击左侧 MySQL 的 logo 看到监控的数据了,或者直接访问 https://<pmm_server_ip>/graph/d/mysql-instance-overview/mysql-instances-overview
6. 其他相关命令
6.1 查看 pmm-client 版本
docker exec pmm-client pmm-admin version6.2 查看 pmm-client 状态
docker exec pmm-client pmm-admin status6.3 查看当前 pmm-client 监控的服务
docker exec pmm-client pmm-admin inventory list services6.4 查看当前 pmm-client 监控的 MySQL 服务
docker exec pmm-client pmm-admin inventory list services --service-type=mysql6.5 从 pmm-client 中删除服务
docker exec pmm-client pmm-admin remove <service-type> <service-name>6.6 从 pmm-server 中删除当前 pmm-client
docker exec pmm-client pmm-admin unregister这需要确保没有任何服务在监控中,或者增加
--force参数强制删除所有服务。
7. pmm-server 报警
这里介绍下如何配置 SMTP 来发送 Email 邮件,发件配置需要在 pmm-server 启动时增加环境变量来配置发信源,如:
version: '3'
services:
pmm-server:
image: percona/pmm-server:2
container_name: pmm-server
hostname: pmm-server
restart: always
volumes:
- ./srv:/srv
environment:
- GF_SMTP_ENABLED=true
- GF_SMTP_HOST=smtp.qq.com:465
- GF_SMTP_USER=example@qq.com
- GF_SMTP_PASSWORD=password
- GF_SMTP_SKIP_VERIFY=false
- GF_SMTP_FROM_ADDRESS=example@qq.com
- GF_SMTP_FROM_NAME=Percona Alerting
ports:
- 80:80
- 443:443以下是上述每个环境变量的描述:
GF_SMTP_ENABLED:是否启用 Grafana 的 SMTP 电子邮件通知。GF_SMTP_HOST:SMTP 服务器的主机地址和端口。GF_SMTP_USER:SMTP 用户名。GF_SMTP_PASSWORD: SMTP 密码GF_SMTP_SKIP_VERIFY:如果为 true,则验证 SMTP 服务器的 SSL。GF_SMTP_FROM_ADDRESS:发送电子邮件时使用的电子邮件地址。GF_SMTP_FROM_NAME:发送电子邮件时使用的名称。
邮件接收人可以在左侧导航 -> Alerting -> Contact points 中使用 grafana-default-email 或新建一个 Email 类型的 contact point。
更多的报警配置详见:https://docs.percona.com/percona-monitoring-and-management/get-started/alerting.html#configure-email-smtp-server-settings
8. pmm-server 备份
pmm-server 还可以在页面上使用手动或计划任务的方式将数据库备份到 S3/本地存储,不过可惜的是需要 MySQL Server 和 PMM-Client 直接运行在宿主机上,不能是 Docker 容器中(因为备份使用的是 Xtrabackup,它需要直接读取 MySQL 数据目录,即 /var/lib/mysql)。 详细先决条件见:https://docs.percona.com/percona-monitoring-and-management/get-started/backup/mysql_prerequisites.html