我在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/

10-09 20:14