MongoDB:为什么不能从ec2中的.py脚本调用db.serverStatus()?

时间:2018-11-20 03:46:07

标签: mongodb amazon-web-services amazon-ec2 cron amazon-cloudwatch

我遵循了本指南: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()的原因是什么?

0 个答案:

没有答案