我在Amazon Linux中运行MongoDB版本3。我想检查MongoDB,即锁表百分比
我在nrpe.cfg中添加了这一行
/usr/lib64/nagios/plugins/check_mongodb.py-a lock-w 9-c 10
在Mongo版本2中运行良好,但在3中显示此错误
无法从mongo获取globallock locktime信息,是否确实未使用版本3?请参见-m选项。
严重-一般MongoDB错误:“locktime”
我怎样才能摆脱这个问题?
有没有使用check_mongodb.py的人工支票?
最佳答案
它没有在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不支持此操作。
现在,从代码来看,他们之所以出现这个异常是因为他们将从MunGDB版本2中获取关于锁定时间信息的方式不再存在于MunGDB版本3中。
摘自check_mongodby.py
检查锁
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
获取服务器状态
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
如果你检查MangGDB documentation for version 2.6,你会看到ServStuts.GualLoCal.LoCuToT的存在,它在CHECKSMONGOBD.P.NAGIOS插件中使用。
serverstatus.globallock.locktime locktime的值表示
自数据库上次启动以来的时间(以微秒为单位)
Globallock被拘留了。
但是,MyGDB版本3中不存在ServStuts.GualLoC.LoCtTimes。根据MongoDB version 3 documentation:
locks有关locks输出的示例,请参见
服务器状态输出页。
版本3.0中的serverstatus.locks已更改。
locks文档包含提供
每个锁类型和模式的粒度报告。可能的锁类型
具体如下:
serverStatus.locks
全局表示全局锁。mmapv1journal表示mmapv1存储
用于同步日志写入的引擎特定锁;对于非mmapv1
存储引擎,mmapv1journal的模式为空。数据库
表示数据库锁。集合表示集合锁。
元数据表示元数据锁。oplog表示oplog上的锁。
globalLock
globallock有关globallock输出的示例,请参见globallock
服务器状态输出页的部分。
serverstatus.globallock globallock数据结构包含
有关数据库当前锁定状态、历史记录的信息
锁定状态、当前操作队列和活动的数目
客户。
serverstatus.globallock.totaltime totaltime的值表示
自上次启动和创建数据库以来的时间(微秒)
地球人。这大致相当于服务器的总正常运行时间。
由于globallock.locktime不再表示,因此无法使用它计算MongoDB版本3所需的度量。
关于python - Linux Nagios检查问题:MongoDB check_mongodb.py,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31768871/