面试题答案
一键面试开启MongoDB的内置监控指标暴露
- 配置文件方式:在MongoDB的配置文件(通常是
mongod.conf
)中,添加或修改以下配置项:
上述配置将开启MongoDB的内置HTTP监控端点,监听在metrics: endpoint: 0.0.0.0:9216 protocol: http process: all
0.0.0.0:9216
,process: all
表示包含所有进程相关的指标。 - 命令行方式:启动
mongod
进程时,使用命令行参数设置,例如:mongod --metrics.endpoint=0.0.0.0:9216 --metrics.protocol=http --metrics.process=all
确保副本集成员间网络连通性
- 网络配置:检查副本集各个成员所在服务器的防火墙设置,确保它们之间可以相互通信。例如,在Linux系统中,使用
iptables
命令开放MongoDB服务端口(默认27017)的入站和出站规则。iptables -A INPUT -p tcp --dport 27017 -j ACCEPT iptables -A OUTPUT -p tcp --sport 27017 -j ACCEPT
- 主机名解析:保证副本集成员之间可以正确解析主机名。可以通过配置
/etc/hosts
文件,将各个成员的IP地址和主机名对应起来,例如:192.168.1.100 mongo1.example.com 192.168.1.101 mongo2.example.com 192.168.1.102 mongo3.example.com
启用身份验证(可选但推荐)
- 开启身份验证:在配置文件中添加
security.authorization: enabled
,例如:security: authorization: enabled
- 创建监控用户:使用管理员权限登录MongoDB,创建一个专门用于监控的用户,赋予
clusterMonitor
和readAnyDatabase
角色。use admin db.createUser({ user: "monitorUser", pwd: "monitorPassword", roles: [ { role: "clusterMonitor", db: "admin" }, { role: "readAnyDatabase", db: "admin" } ] })
- 在监控工具中配置认证信息:如果启用了身份验证,在Prometheus等监控工具连接MongoDB时,需要配置相应的用户名和密码。例如在Prometheus的
scrape_configs
配置中:- job_name:'mongodb' static_configs: - targets: ['mongo1.example.com:27017','mongo2.example.com:27017','mongo3.example.com:27017'] metrics_path: /metrics params: module: [mongodb] relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: mongo-exporter.example.com:9216 # 监控端点地址 basic_auth: username: monitorUser password: monitorPassword