我遵循了本指南:http://owaaa.github.io/cloudwatch/amazon/aws/mongodb/devops/autoscaling/2014/01/14/mongo_cloudwatch.html,将MongoDB指标发布到CloudWatch。但是,我正在尝试编写一个cronjob,它将按分钟发布数据库的当前连接。以下脚本可以正常工作(必须从github页面进行修改):
import commands
import json
import pymongo
from pymongo import MongoClient
ret, instanceId = commands.getstatusoutput("wget -q -O - http://169.254.169.254/latest/meta-data/instance-id")
client = MongoClient("mongodb://username:userpass@privateip/admin_db_name")
db = client['desired_db_name']
collection = db.jobs
count = collection.find({"status": "New"}).count()
cmd = "aws cloudwatch put-metric-data --metric-name JobCount --namespace MongoDB --dimensions \"instance=" + instanceId + ",servertype=MongoDB\" --value " + str(count) + " --region us-west-2"
ret, cmdout= commands.getstatusoutput(cmd)
client.close()
从ec2实例内部运行mongo cli时,以下代码可以正常工作:
db.serverStatus().connections['current']
但是当我试图将它们放在一起时,通过运行上面的代码段而不是原始的代码来计数工作,它会抛出一个NameError:serverStatus()不是函数。
我已经仔细检查并确保没有错别字,并且数据库可以在cli中运行命令。我也尝试了db.runCommand({serverStatus:1})无济于事。
当从cli正常运行时,我无法在.py脚本中运行.serverStatus()的原因是什么?