我正在运行mongodb版本3在亚马逊linux。我想检查一下mongodb,即锁表百分比
我在npe .cfg
中添加了这行/usr/lib64/nagios/plugins/check_mongodb.py
在mongo版本2中运行良好,但在3中显示这个错误
无法从mongo获取globalLock lockTime信息,您确定不是使用版本3吗?参见-M选项。关键-一般MongoDB错误:'lockTime'
我怎样才能摆脱这个问题?是否有使用check_mongodb.py检查的手册?
在nagios-plugin-mongodb项目的README中没有记录。但是,您应该修改npe .cfg中的命令定义,以传入一个额外的参数-M "3"
。例如:
/usr/lib64/nagios/plugins/check_mongodb.py -A lock -W 9 -C 10 -M "3"
这将告诉check_mongodb.py您正在使用mongodb版本3而不是版本2。它还将导致您得到一个更有用的错误消息:
"FAIL - Mongo3不报告全局锁"
…这会让你知道MongoDB版本3不支持此操作。
现在,从代码来看,他们之所以放入这个异常,是因为他们从MongoDB版本2中获取锁时间信息的方式在MongoDB版本3中不再存在。
摘自check_mongodb .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 2.6版本的文档,你会看到serverStatus.globalLock.lockTime存在,它被用于check_mongodb.py nagios插件。
然而,serverStatus.globalLock。lockTime lockTime的值代表时间时间(以微秒为单位),从数据库上次启动以来
serverStatus.globalLock。lockTime在MongoDB版本3中不存在。根据MongoDB版本3文档:
locks输出的示例,请参见
服务器状态输出。serverStatus。在3.0版更改。
locks文档包含提供每种锁类型和模式的细粒度报告。可能的锁类型
serverStatus.locks
Global表示全局锁。MMAPV1Journal表示MMAPv1存储引擎特定的锁来同步日志写;对于non-MMAPv1存储引擎时,MMAPV1Journal的模式为空。数据库表示数据库锁。集合代表集合锁。元数据表示元数据锁。Oplog表示Oplog上的锁。
globalLock
自globallockglobalLock globalLock输出信息示例请参见globalLock
serverStatus。globalLock globalLock数据结构包含关于数据库当前锁状态(历史)的信息锁状态、当前操作队列和活动的数量客户。
serverStatus.globalLock。totalTime totalTime的值代表自数据库上次启动和创建以来的时间,以微秒为单位上述。这大致相当于服务器的总正常运行时间。
。lockTime不再表示,它不能用于计算MongoDB版本3所需的度量