Loading... 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 ```yaml 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` 登录。登录后会提示修改密码,修改完成后即可进入监控页面。如果你想使用脚本自动修改密码,可以使用以下命令: ```bash 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 认证方式](https://forums.percona.com/t/connect-pmm-agent-with-service-account/26424/2),注意不要将 API Keys 迁移到 Service Account. ## 3. 安装 pmm-client ```yaml 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=<ruby>pmm_server_ip<rp> (</rp><rt>port</rt><rp>) </rp></ruby> # 注意这里要替换为 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 ``` [文档](https://docs.percona.com/percona-monitoring-and-management/setting-up/client/index.html)中有许多 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 服务上创建一个专用的用户: ```bash 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` 上执行: ```bash 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` 上执行: ```bash 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 添加成功后会提示: ```bash 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 版本 ```bash docker exec pmm-client pmm-admin version ``` ### 6.2 查看 pmm-client 状态 ```bash docker exec pmm-client pmm-admin status ``` ### 6.3 查看当前 pmm-client 监控的服务 ```bash docker exec pmm-client pmm-admin inventory list services ``` ### 6.4 查看当前 pmm-client 监控的 MySQL 服务 ```bash docker exec pmm-client pmm-admin inventory list services --service-type=mysql ``` ### 6.5 从 pmm-client 中删除服务 ```bash docker exec pmm-client pmm-admin remove <service-type> <service-name> ``` ### 6.6 从 pmm-server 中删除当前 pmm-client ```bash docker exec pmm-client pmm-admin unregister ``` > 这需要确保没有任何服务在监控中,或者增加 `--force` 参数强制删除所有服务。 ## 7. pmm-server 报警 这里介绍下如何配置 SMTP 来发送 Email 邮件,发件配置需要在 pmm-server 启动时增加环境变量来配置发信源,如: ```yaml 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](https://docs.percona.com/percona-xtrabackup/innovation-release/),它需要直接读取 MySQL 数据目录,即 `/var/lib/mysql`)。 详细先决条件见:https://docs.percona.com/percona-monitoring-and-management/get-started/backup/mysql_prerequisites.html 最后修改:2024 年 04 月 17 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请我喝杯咖啡吧。