lepus 连接mongodb 3.0出错

此问题的情境:

使用的mongodb的版本为3.0.x, 因为为生产环境,不可轻易做版本降级操作

pymongo 2.7是无法连接的,有文章有提到直接修改API的使用即可。(主要内容是:Connection继承自MongoClient)

本人没有测试直接修改lepus+pymongo 2.7版本的API是否可用,有兴趣的可以自行测试。

  1. 需要安装pymongo 3.2 这里不要再使用lepus安装文档中提到的pymongo 2.7

  2. 监控账号的授权:

    因为需要获取serverStatus, 需要给连接账号授予clusterAdmin的角色。

    MongoDB的文档中可以查看各内置角色对应的权限。

  3. 修改lepus文件check_mongodb.py

    进入到lepus的安装目录/usr/local/lepus

    修改文件 check_mongodb.py

    因为Connection在新版本中已经去掉了,所以改用MongoClient

    connect = pymongo.MongoClient(host,int(port))

    获取serverStatus的代码,若直接使用BSON的方式获取,始终报认证问题,当时修改太快了,不知道是不是权限问题,现在也不太想退回去再测试了。有兴趣的可以测试下,欢迎分享。

    serverStatus=db.command(‘serverStatus’)

    serverStatus_2=db.command(‘serverStatus’)

    注意调整connect = 1的位置,因为此处获取serverStatus的时候,没有获取replicate的信息,因此仍需要保证连接可用。

    indexCounter在3.0版本中已经去掉了,MongoDB官方文档有说明。因此相关的参数均无法获取了,直接赋值数字0.

    indexCounters_accesses = 0
    indexCounters_hits = 0
    indexCounters_misses = 0
    indexCounters_resets = 0
    indexCounters_missRatio = 0

    获取replStatus的状态:

    在第二段try代码中添加:

    replStatus=db.command(‘replSetGetStatus’)

    repl=replStatus

到此,差不多修改完了。