夜莺-Nightingale
夜莺V7
项目介绍 功能概览
部署升级 部署升级
数据接入 数据接入
告警管理 告警管理
数据查看 数据查看
功能介绍 功能介绍
API FAQ
夜莺V6
项目介绍 架构介绍
快速开始 快速开始
黄埔营
安装部署 安装部署
升级
采集器 采集器
使用手册 使用手册
API API
数据库表结构 数据库表结构
FAQ FAQ
开源生态
Prometheus
版权声明
第1章:天降奇兵 第1章:天降奇兵
第2章:探索PromQL 第2章:探索PromQL
第3章:Prometheus告警处理 第3章:Prometheus告警处理
第4章:Exporter详解 第4章:Exporter详解
第5章:数据与可视化 第5章:数据与可视化
第6章:集群与高可用 第6章:集群与高可用
第7章:Prometheus服务发现 第7章:Prometheus服务发现
第8章:监控Kubernetes 第8章:监控Kubernetes
第9章:Prometheus Operator 第9章:Prometheus Operator
参考资料

mongodb插件

mongodb采集插件

mongodb 监控采集插件,核心原理就是连到 mongodb 实例,执行一些查询,解析输出内容,整理为监控数据上报。

社区贡献的插件中间有过协议的变化(GPL到Apache2.0),从v0.3.30到v0.3.43版本(企业版从v0.3.40到v0.3.64),categraf的mongogdb插件fork和修改的是telegraf的mongodb插件.

配置

创建只读用户并授权

至少授予以下权限给配置文件中用于连接 MongoDB 的 user 才能收集指标

    {
         "role":"clusterMonitor",
         "db":"admin"
    },
    {
         "role":"read",
         "db":"local"
    }

一个简单例子

mongo -h xxx -u xxx -p xxx --authenticationDatabase admin
> use admin
> db.createUser({user:"categraf",pwd:"categraf",roles: [{role:"read",db:"local"},{"role":"clusterMonitor","db":"admin"}]})

配置文件

  • 配置文件路径: conf/input.mongodb/mongodb.toml
  • 配置DSN 用户名 密码等,
...

# 定义访问的mongodb dsn
## deprecated, 推荐用 servers
mongodb_uri = "mongodb://127.0.0.1:27017/?authSource=admin"
## 推荐使用
servers = ["mongodb://user:pass@mongodb://127.0.0.1:27017/?authSource=admin"]
# 额外要附加的label 
labels = { cluster="mongo-cluster-01" }


# 如果设置为true, 后续的enable_xxx 配置将被忽略, 采集所有的metrics
collect_all = true

# 是否采集 database 的metrics
# enable_db_stats = true

# 是否采集 replSetGetStatus 指标
# enable_replicaset_status = true
# 是否采集 admin命令的top 指标 
# enable_top_metrics = true
# 是否采集 collections 指标 , 需要指定具体的 coll_stats_namespaces 和  discovering_mode.
# enable_coll_stats = true

# 只采集指定的 collections 和 namespace. 如果不设置 discovering_mode  会被打开
# 例如: db1.col1,db.col1
# coll_stats_namespaces = []
#  设置为true时, 将指标descending_index的标签key_name中的-1替换为DESC

...
# 配置username 和 password 会覆盖servers(mongodb_uri)中链接的用户名和密码
# 当密码包含特殊字符时,推荐配置这两项(自己会转义的忽略)
username = "xxxx"
password = "xxxx"
...

其中authSource=admin 是说认证使用admin空间的用户认证,这跟上面创建用户的 use admin是对应的。 额外的参数可以放到uri的param中, 比如跳过tls验证,可以在mongodb_uri中添加参数

tlsinsecure=true

这样最终mongodb_uri就是

mongodb://127.0.0.1:27017/?authSource=admin&tlsinsecure=true 

更详细的权限配置请参考官方文档

主要查询逻辑

配置中的开关和主要查询逻辑对应的mongo shell命令。 方便大家自己配置和测试。

0. 默认执行
use admin
db.runCommand({ serverStatus: 1,recordStats:0 })

1. enable_replicaset_status =true
 use admin
 db.runCommand({replSetGetStatus: 1})

可选
 use local
 db.getCollection("oplog.rs").find({"ts": {"$exists": true}}).limit(1) 
 db.getCollection("oplog.rs").find({"ts": {"$exists": true}}).sort({"$natural": -1}).limit(1) 

 解析出第一条和最后一条数据的timestamp, 返回两个时间戳的差值


 2. enable_cluster_status = true
 use configs 
 db.getCollection("chunks").countDocuments({"jumbo": true})

 3. shardStatus 默认采集
 use admin
 db.runCommand({connPoolStats: 1}) # 5.0及以上版本
 db.runCommand({shardConnPoolStats: 1})  # 5.0以下版本


 4. enable_coll_stats = true
 use admin
 db.adminCommand('listDatabases') # 可以配置 coll_stats_namespaces 过滤, 获取所有db
 use $上面的db 
 db.runCommand({listCollections: 1, filter: { "type": { "$in": ["collection", "timeseries"] } }, nameOnly:true })  #获取collections
 db.runCommand({collStats: $上面的colls})
 例如, 
 use admin 
 db.runCommand({collStats: "system.users"})


5. enable_db_stats = true
db.adminCommand('listDatabases')
use $上面的db
db.runCommand({dbStats: 1}) 

6. enable_top_metrics = true
use admin
db.runCommand({top: 1}) 

监控大盘和告警规则

v0.3.30版本以后,由于指标变化,推荐使用dashboard2

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云
OpenSource
开源版
Flashcat
Flashcat