从零到一:使用PMM构建企业级MongoDB监控体系

在当今数据驱动的时代,MongoDB作为领先的NoSQL数据库,承载着众多企业的核心业务数据。然而,随着数据量的增长和架构的复杂化,如何确保其稳定、高性能运行成为运维团队面临的关键挑战。Percona Monitoring and Management (PMM) 作为一个开源的数据库监控与管理平台,为MongoDB提供了从基础设施到查询性能的全栈可视化监控方案。本文将手把手指导您完成PMM Server与Client的部署,并深度集成MongoDB监控,助您构建坚实的数据库可观测性基石。

一、 环境规划与PMM Server容器化部署

在开始部署之前,合理的节点与资源规划是成功的第一步。PMM采用经典的Server/Client架构,Server端负责数据收集、存储与展示,Client端(pmm-agent)则部署在被监控主机上。对于生产环境,我们建议将PMM Server部署在独立于业务数据库的服务器上,以避免资源竞争。

以下是本次部署演示的节点规划,清晰地标明了各节点的角色与网络信息:

IP地址端口角色
10.0.0.3727017、7777mongodb、pmm-agent
10.0.0.3827017、7777mongodb、pmm-agent
10.0.0.3927017、7777mongodb、pmm-agent
10.0.0.2508443PMM-Server

1.1 部署PMM Server:拥抱容器化
PMM Server强烈推荐使用Docker或Kubernetes进行部署,这能极大简化安装和升级流程。在启动容器前,请确保宿主机满足以下先决条件:

  • Docker环境:版本17.03或更高,这是运行现代容器化应用的基础。
  • 硬件架构:支持x86-64-v2的CPU,这是大多数现代云服务器的标准配置。
  • 资源建议:为获得流畅体验,建议分配2核CPU、4GB内存和100GB磁盘空间。如果监控目标众多,应相应增加资源。

满足条件后,即可开始拉取PMM Server的官方Docker镜像。下图展示了Docker环境的验证状态:

在这里插入图片描述

使用以下命令从Docker Hub拉取最新的PMM Server镜像:

# 官方镜像
[root@PMM-SERVER ~]# docker pull percona/pmm-server:3
# 国内镜像源-收费
[root@PMM-SERVER ~]# docker login docker.xuanyuan.run
[root@PMM-SERVER ~]# docker pull docker.xuanyuan.run/percona/pmm-server:3.5.0

镜像拉取成功后,如下图所示:

在这里插入图片描述

1.2 运行PMM Server容器
接下来,我们需要通过一条Docker run命令来启动PMM Server容器。这条命令配置了容器名称、持久化数据卷、网络端口映射以及一些重要的环境变量。对于寻求更高可用性和弹性的团队,完全可以考虑将PMM Server部署在Kubernetes集群中,利用其强大的容器编排能力实现自动扩缩容和故障恢复。

[root@PMM-SERVER ~]# docker volume create pmm-data
pmm-data
[root@PMM-SERVER ~]# docker network create pmm-network
388c3d0338f52beb67bb4a9c88da71a9fd0f1faa2ac45ad3aada9412d79dd6d5
[root@PMM-SERVER ~]# docker image ls
REPOSITORY                               TAG       IMAGE ID       CREATED        SIZE
docker.xuanyuan.run/percona/pmm-server   3.5.0     41d039738e7f   2 months ago   2.66GB
docker run --detach --restart always \
--memory=4g \
--publish 8443:8443 \
--volume pmm-data:/srv \
--network=pmm-network \
--name pmm-server \
--env PMM_DATA_RETENTION=720h \
--env METRICS_RESOLUTION_HR=10s \
--env PMM_ENABLE_UPDATES=false \
docker.xuanyuan.run/percona/pmm-server:3.5.0
[root@PMM-SERVER ~]# docker ps
# 删除容器
docker stop pmm-server
docker rm pmm-server
docker volume rm pmm-data
docker network rm pmm-network

容器启动后,可以通过 docker ps 命令查看其运行状态,确保服务已正常启动:

在这里插入图片描述

1.3 安全加固:修改管理员密码
默认情况下,PMM Web界面的管理员密码是随机的。出于安全考虑,首次登录后必须立即修改。通过进入PMM Server容器内部,可以执行命令来重置密码。

docker exec -t pmm-server change-admin-password Wl123456#

密码修改过程如下图所示:

在这里插入图片描述

1.4 访问PMM Web控制台
完成上述步骤后,您就可以通过浏览器访问PMM的Web界面了。地址为 https://您的服务器IP:8443。使用您刚才设置的新密码登录,即可进入功能强大的监控仪表盘。

在这里插入图片描述 [AFFILIATE_SLOT_1]

1.5 深入理解PMM Server配置
在Docker run命令中,我们通过环境变量对PMM Server进行了配置。这些变量主要分为两大类:

性能与存储相关:这些变量决定了PMM的数据保留策略、时间序列数据库(VictoriaMetrics)的配置等,直接影响监控数据的存储时长和查询性能。

变量名默认值描述示例
PMM_DATA_RETENTION30d指标数据保留时长(必须是24小时的倍数)720h (30天)
PMM_METRICS_RESOLUTION1s基础指标收集间隔5s
PMM_METRICS_RESOLUTION_HR5s高分辨率指标间隔10s
PMM_METRICS_RESOLUTION_MR10s中分辨率指标间隔30s
PMM_METRICS_RESOLUTION_LR60s低分辨率指标间隔300s

功能控制相关:这些变量用于启用或禁用PMM的特定高级功能,例如查询分析(QAN)、备份管理、通信加密等,允许您根据实际需求定制PMM的功能集。

变量名默认值启用时的效果
PMM_ENABLE_UPDATEStrue允许版本检查和 UI 更新
PMM_ENABLE_TELEMETRYtrue启用使用数据收集
PMM_ENABLE_ALERTINGtrue启用 Percona 告警系统
PMM_ENABLE_BACKUP_MANAGEMENTtrue启用备份管理功能
PMM_ENABLE_AZURE_DISCOVERfalse启用 Azure 数据库发现
PMM_ENABLE_INTERNAL_PG_QAN (禁用)为 PMM Server 的内部 PostgreSQL 启用查询分析(用于故障排除或 HA 场景)

二、 在被监控节点部署PMM Client (pmm-agent)

PMM Server就绪后,下一步是在所有需要监控的MongoDB节点上安装pmm-agent。这个轻量级代理负责收集主机和数据库的指标,并安全地发送到PMM Server。

2.1 下载与安装pmm-agent
Percona为不同的Linux发行版提供了便捷的安装包。以下命令适用于基于RPM的系统(如RHEL、CentOS)。对于Debian/Ubuntu系统,可使用相应的.deb包。

[root@MongoDB-07 ~]# wget https://downloads.percona.com/downloads/pmm3/3.5.0/binary/tarball/pmm-client-3.5.0-x86_64.tar.gz
[root@MongoDB-07 ~]# tar xfz pmm-client-3.5.0-x86_64.tar.gz && cd pmm-client-3.5.0
[root@MongoDB-07 ~]# export PMM_DIR=/usr/local/percona/pmm
[root@MongoDB-07 ~]# sudo ./install_tarball
[root@MongoDB-07 ~]# echo 'PATH=$PATH:/usr/local/percona/pmm/bin' >> /etc/profile
[root@MongoDB-07 ~]# source  /etc/profile

2.2 生成并配置pmm-agent
安装完成后,需要生成初始配置文件,并指定PMM Server的地址,使agent知道将数据发送到哪里。

# 每个mongodb节点按照自己的信息生成
pmm-agent setup \
--config-file=/usr/local/percona/pmm/config/pmm-agent.yaml \
--server-address=10.0.0.250:8443 \
--server-insecure-tls \
--server-username=admin \
--server-password=Wl123456# \
10.0.0.37 \
generic \
MongoDB-07

配置文件生成后,其内容大致如下,您需要确保server-insecure-tlsserver-address配置正确:

在这里插入图片描述

2.3 配置系统服务与启动
为了确保pmm-agent在系统重启后能自动运行,我们需要将其配置为systemd服务。编辑服务文件,设置正确的启动参数。

vi /usr/lib/systemd/system/pmm-agent.service
[Unit]
Description=Percona Monitoring and Management Agent
Documentation=https://www.percona.com/doc/percona-monitoring-and-management/index.html
After=network.target
[Service]
Type=simple
User=root
Group=root
ExecStart=/usr/local/percona/pmm/bin/pmm-agent --config-file=/usr/local/percona/pmm/config/pmm-agent.yaml
Restart=always
RestartSec=10
StandardOutput=syslog
StandardError=syslog
# 以上配置会将日志写入到系统日志/var/log/messages,如果系统高于CentOS-9,可以用下面的配置自定义日志输出路径
#StandardOutput=append:/var/log/pmm-agent/pmm-agent.log
#StandardError=append:/var/log/pmm-agent/pmm-agent-error.log
[Install]
WantedBy=multi-user.target

最后,启动并启用pmm-agent服务:

systemctl daemon-reload
systemctl start pmm-agent
systemctl enable pmm-agent

至此,基础监控(如CPU、内存、磁盘IO等)已经生效。您可以在PMM的“主机”仪表盘中看到新添加的节点。

三、 集成MongoDB深度监控

仅监控主机资源是远远不够的。要真正洞察MongoDB的健康状况,必须集成数据库自身的监控。这需要为PMM创建一个具有特定权限的MongoDB用户。

3.1 创建监控角色与用户
安全最佳实践是遵循最小权限原则。我们首先创建一个专用于监控的角色,仅授予其查询监控状态所必需的权限,然后创建一个用户并分配此角色。

在MongoDB Shell中,执行以下命令创建监控角色:

db.getSiblingDB("admin").createRole({
"role": "pmmMonitor",
"privileges": [
{
"resource": { "db": "", "collection": "" },
"actions": [ "dbHash", "find", "listIndexes", "listCollections", "collStats", "dbStats", "indexStats" ]
},
{
"resource": { "db": "", "collection": "system.version" },
"actions": [ "find" ]
},
{
"resource": { "db": "", "collection": "system.profile" },
"actions": [ "dbStats", "collStats", "indexStats" ]
}
],
"roles": [ ]
})

接着,创建监控用户并为其分配密码:

db.getSiblingDB("admin").createUser({
"user": "pmm",
"pwd": "123",
"roles": [
{ "db": "admin", "role": "pmmMonitor" },
{ "db": "local", "role": "read" },
{ "db": "admin", "role": "clusterMonitor" }
]
})

3.2 启用查询分析(Query Analytics)
查询分析是PMM的杀手锏功能之一,它能帮助您发现慢查询、全表扫描等性能瓶颈。要启用此功能,需要确保MongoDB开启了数据库分析器(profiler)或将日志输出到文件。如果您的环境已配置,可跳过此步。

# 在 mongod.conf 中添加
systemLog:
destination: file
path: /var/log/mongodb/mongod.log
logAppend: true
[AFFILIATE_SLOT_2]

3.3 在PMM中添加MongoDB服务
现在,我们回到PMM Server,将MongoDB实例添加为监控目标。PMM提供了两种添加方式:

  • 添加单机实例:适用于独立部署的MongoDB。
pmm-admin add mongodb MongoDB-07-mongodb \
--username=pmm  # MongoDB 监控专用账号(需提前创建)
--password=123  # 账号密码
--host=10.0.0.37        # MongoDB 监听地址
--port=27017            # MongoDB 端口
--service-name=prod-mongodb-07  # 自定义服务名(便于识别)
--enable-all-collectors  # 启用所有指标收集器
  • 添加副本集或分片集群:对于高可用或分布式架构,PMM可以自动发现并监控整个集群。您只需指定一个集群成员,PMM便能发现其他节点。
# 根据每个mongodb节点的信息配置
pmm-admin add mongodb MongoDB-07 \
--username=pmm \
--password=123 \
--host=10.0.0.37 \
--port=27017 \
--environment=prod \
--cluster=prod-myrs01 \
--replication-set=myrs01 \
--service-name=myrs01-node01 \
--enable-all-collectors \
--query-source=mongolog

在PMM Web界面的“添加服务”页面,选择MongoDB,填写连接信息(主机、端口、上一步创建的用户名密码),PMM便会开始收集MongoDB的详细指标,如操作计数器、连接数、副本集状态、WiredTiger缓存使用率等。

在这里插入图片描述

四、 探索监控仪表盘与价值洞察

所有配置完成后,PMM的强大之处便在于其预置的、开箱即用的Grafana仪表盘。您无需从零开始配置图表,PMM已经为您准备好了涵盖各个维度的专业视图。

您可以访问的仪表盘包括:

  • MongoDB Overview:全局概览,快速掌握数据库健康度。
  • MongoDB Replication:深入监控副本集的延迟、心跳、选举等状态,是保障高可用的关键。
  • MongoDB WiredTiger:剖析存储引擎内部状态,如缓存命中率、检查点、压缩情况。
  • Query Analytics:在这里,您可以按执行时间、扫描行数等维度对查询进行排序,精准定位性能热点。
  • 主机指标:从操作系统层面观察资源使用情况,与数据库指标关联分析。

下图展示了MongoDB监控仪表盘的丰富内容:

在这里插入图片描述

通过以上步骤,您已经成功搭建了一套从基础设施到数据库应用层的完整监控体系。PMM不仅提供了实时告警和历史数据分析的能力,其基于容器的部署方式也天然适合云原生环境,可以与现有的K8s和容器化部署流程无缝集成。 记住,监控的最终目的不是收集数据,而是通过数据驱动决策,提前发现问题、优化性能,从而为业务稳定运行保驾护航。

0
posted on 2026-03-06 20:19  blfbuaa  阅读(7)  评论(0)    收藏  举报