您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 怎么使用Zabbix的自动发现来监控Mongo数据库
## 前言
在现代IT基础设施中,MongoDB作为流行的NoSQL数据库被广泛使用。Zabbix作为企业级监控解决方案,通过其自动发现(Auto Discovery)功能可以高效地监控MongoDB实例。本文将详细介绍如何配置Zabbix来自动发现并监控MongoDB数据库。
---
## 一、准备工作
### 1.1 环境要求
- Zabbix Server 5.0+(推荐6.0 LTS)
- MongoDB 3.6+ 实例
- Zabbix Agent 安装在MongoDB主机上
- 管理员权限账户(用于MongoDB连接)
### 1.2 必要组件
- `mongostat` 工具(通常随MongoDB安装包提供)
- Zabbix MongoDB模板(如官方模板或社区模板)
---
## 二、配置MongoDB监控账户
```bash
# 连接到MongoDB Shell
mongo admin --username root --password yourpassword
# 创建只读监控用户
db.createUser({
user: "zabbix_monitor",
pwd: "SecurePass123",
roles: [ "clusterMonitor", "readAnyDatabase" ]
})
注意:生产环境建议使用更复杂的密码并限制访问IP
编辑/etc/zabbix/zabbix_agentd.conf
:
# MongoDB状态检测
UserParameter=mongodb.status[*],/usr/bin/mongo --quiet --eval "db.runCommand({serverStatus:1}).$1" admin -u zabbix_monitor -p SecurePass123
# 自动发现数据库和集合
UserParameter=mongodb.discover.databases,/usr/bin/mongo --quiet --eval "printjson(db.getMongo().getDBs().databases.map(function(d){return d.name}))" admin -u zabbix_monitor -p SecurePass123
UserParameter=mongodb.discover.collections[*],/usr/bin/mongo --quiet --eval "printjson(db.getSiblingDB('$1').getCollectionNames())" admin -u zabbix_monitor -p SecurePass123
systemctl restart zabbix-agent
Configuration → Templates → Import
mongodb.discover.databases
为每个发现的数据创建监控项原型:
名称: MongoDB Collections Count on {#DBNAME}
键值: mongodb.discover.collections[{#DBNAME}]
类型: 文本
信息类型: 文本
{
"data": [
{ "{#DBNAME}": "admin" },
{ "{#DBNAME}": "config" },
{ "{#DBNAME}": "local" },
{ "{#DBNAME}": "userdb" }
]
}
{
"data": [
{ "{#COLLECTION}": "users" },
{ "{#COLLECTION}": "transactions" }
]
}
在Discovery Rule中配置JavaScript预处理:
try {
var dbs = JSON.parse(value);
var result = [];
dbs.forEach(function(db) {
if (!['admin', 'local', 'config'].includes(db)) {
result.push({ '{#DBNAME}': db });
}
});
return JSON.stringify({ data: result });
} catch (error) {
return JSON.stringify({ data: [] });
}
指标名称 | 键值 | 单位 |
---|---|---|
连接数 | mongodb.status[connections] | 个 |
内存使用 | mongodb.status[mem] | MB |
查询操作数 | mongodb.status[opcounters.query] | ops |
名称: High MongoDB Connections
表达式: {Template MongoDB:mongodb.status[connections.current].last()} > 500
严重性: 高
# 监控分片状态
UserParameter=mongodb.shard.status,/usr/bin/mongo --quiet --eval "sh.status()" config -u zabbix_monitor -p SecurePass123
# 获取副本集状态
UserParameter=mongodb.replset.status[*],/usr/bin/mongo --quiet --eval "rs.status().$1" admin -u zabbix_monitor -p SecurePass123
创建/etc/zabbix/scripts/mongodb_monitor.sh
:
#!/bin/bash
case $1 in
"query")
mongo --quiet --eval "db.serverStatus().opcounters.query" admin -u zabbix_monitor -p $2
;;
"repl_lag")
mongo --quiet --eval "db.printSlaveReplicationInfo()" | awk '/secs/ {print $NF}'
;;
esac
认证失败:
--auth
Zabbix Agent无响应:
zabbix_get -s 127.0.0.1 -k mongodb.status[connections]
发现规则不工作:
tail -f /var/log/zabbix/zabbix_agentd.log
journalctl -u mongod -f
使用SSL加密连接:
UserParameter=mongodb.status[*],mongo --ssl --quiet --eval "..."
限制Zabbix账户权限:
roles: [
{ role: "read", db: "admin" },
{ role: "clusterMonitor", db: "admin" }
]
使用Vault管理密码:
UserParameter=mongodb.status[*],/etc/zabbix/scripts/get_mongo_creds.sh "$1"
通过Zabbix的自动发现功能,我们可以轻松实现MongoDB的全面监控。本文介绍了从基础配置到高级应用的完整流程,实际部署时可根据业务需求调整监控指标和告警阈值。建议定期审查监控策略,确保其与业务发展保持同步。
最佳实践提示:对于大型MongoDB集群,建议将发现间隔设置为6-12小时,避免频繁查询影响数据库性能。 “`
(全文约2050字,实际字数可能因格式调整略有变化)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。