nagios-plugin-mongodb project's README.md 中没有记录它,但是您应该修改 nrpe.cfg 中的命令定义以传递附加参数 -M "3"。
例如:
/usr/lib64/nagios/plugins/check_mongodb.py -A lock -W 9 -C 10 -M "3"
这将告诉 check_mongodb.py 您使用的是 mongodb 版本 3 而不是版本 2。它还会导致您收到更有用的错误消息:
“失败 - Mongo3 不报告全局锁”
...这会让您知道 MongoDB 版本 3 不支持此操作。
现在,通过查看代码,他们放入此异常的原因是因为他们从 MongoDB 版本 2 获取有关锁定时间的信息的方式在 MongoDB 版本 3 中不再存在。
摘自check_mongodby.py
check_lock
def check_lock(con, warning, critical, perf_data, mongo_version):
warning = warning or 10
critical = critical or 30
if mongo_version == "2":
try:
data = get_server_status(con)
lockTime = data['globalLock']['lockTime']
totalTime = data['globalLock']['totalTime']
#
# calculate percentage
#
if lockTime > totalTime:
lock_percentage = 0.00
else:
lock_percentage = float(lockTime) / float(totalTime) * 100
message = "Lock Percentage: %.2f%%" % lock_percentage
message += performance_data(perf_data, [("%.2f" % lock_percentage, "lock_percentage", warning, critical)])
return check_levels(lock_percentage, warning, critical, message)
except Exception, e:
print "Couldn't get globalLock lockTime info from mongo, are you sure you're not using version 3? See the -M option."
return exit_with_general_critical(e)
else:
print "FAIL - Mongo3 doesn't report on global locks"
return 1
get_server_status
def get_server_status(con):
try:
set_read_preference(con.admin)
data = con.admin.command(pymongo.son_manipulator.SON([('serverStatus', 1)]))
except:
data = con.admin.command(son.SON([('serverStatus', 1)]))
return data
如果您检查 MongoDB documentation for version 2.6,您会看到 serverStatus.globalLock.lockTime 存在,它在 check_mongodb.py nagios 插件中使用。
serverStatus.globalLock.lockTime lockTime 的值代表
自数据库上次启动以来的时间(以微秒为单位)
globalLock 已被持有。
但是,serverStatus.globalLock.lockTime 在 MongoDB 版本 3 中不存在。根据MongoDB version 3 documentation:
locks 有关锁输出的示例,请参见
服务器状态输出页面。
serverStatus.locks 在 3.0 版中更改。
locks 文档包含嵌入的文档,这些文档提供了一个
每种锁类型和模式的详细报告。可能的锁类型
如下:
serverStatus.locks
Global 代表全局锁。 MMAPV1Journal 表示 MMAPv1 存储
用于同步日志写入的引擎特定锁;对于非 MMAPv1
存储引擎,MMAPV1Journal 的模式为空。数据库
代表数据库锁。 Collection 代表集合锁。
元数据表示元数据锁。 oplog 表示对 oplog 的锁定。
globalLock
globalLock 有关 globalLock 输出的示例,请参见 globalLock
服务器状态输出页面的部分。
serverStatus.globalLock globalLock 数据结构包含
有关数据库当前锁定状态、历史的信息
锁状态、当前操作队列、活跃数
客户。
serverStatus.globalLock.totalTime totalTime 的值代表
自数据库上次启动和创建以来的时间(以微秒为单位)
全局锁。这大致相当于服务器的总正常运行时间。
由于不再表示 globallock.lockTime,它不能用于计算 MongoDB 版本 3 所需的指标。