Linux Nagios检查问题:MongoDB check_mongodb.py



我正在运行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

globalLock globalLock输出信息示例请参见globalLock

serverStatus。globalLock globalLock数据结构包含关于数据库当前锁状态(历史)的信息锁状态、当前操作队列和活动的数量客户。

serverStatus.globalLock。totalTime totalTime的值代表自数据库上次启动和创建以来的时间,以微秒为单位上述。这大致相当于服务器的总正常运行时间。

自globallock

。lockTime不再表示,它不能用于计算MongoDB版本3所需的度量

最新更新