【问题标题】:Linux Nagios checks Issues: MongoDB check_mongodb.pyLinux Nagios 检查问题:MongoDB check_mongodb.py
【发布时间】:2015-08-02 05:30:10
【问题描述】:

我在 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 选项。 CRITICAL - 一般 MongoDB 错误:'lockTime'

我怎样才能摆脱这个问题? 有没有使用 check_mongodb.py 进行检查的手册?

【问题讨论】:

    标签: python linux mongodb monitoring nagios


    【解决方案1】:

    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 所需的指标。

    【讨论】:

    • 请告诉我如何解决这个问题。
    • 没有办法摆脱这个问题。 MongoDB 版本 3 不支持 check_mongodb.py 的“锁定”操作,因为它检查的指标在 MongoDB 版本 3 中不存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    • 2017-06-01
    • 2021-01-21
    相关资源
    最近更新 更多