2017-08-11 4 views
0

Mongoの接続、クエリ、およびレプリケーションステータスをチェックするPythonスクリプト(2.7)をビルドしました。CloudWatchに結果が入力されない

#!/usr/bin/python 
import commands 
import json 
import pymongo 
import subprocess, os 
import re 
from pymongo import MongoClient 

ret, instanceId = commands.getstatusoutput("wget -q -O - http://169.254.169.254/latest/meta-data/instance-id") 

# Checks Number of Connections Made against Total Connections Allowed 
def parse_connections(ret, instanceId): 
    # Obtains Connections made and Total Connections Allowed 
    connection_result=os.popen("/usr/lib/nagios/plugins/check_mongodb.py -A connections").read() 
    get_numeric_con_results= map(int, re.findall(r'\d+', connection_result)) 
    connections_so_far = get_numeric_con_results[1] 
    total_connections = get_numeric_con_results[2] 

    # Calculate percentage for CloudWatch 
    metric_name = "Mongo Connections" 
    percentage_connections_used = float(connections_so_far)/float(total_connections) 
    percentage_float = float(percentage_connections_used) 
    result = format(percentage_float, '.2f') 
    send_mongo_results(metric_name, instanceId, ret, result) 

# Checks Response time of Connectivity 
def check_mongo_connections(ret, instanceId): 
    connection_result=os.popen("/usr/lib/nagios/plugins/check_mongodb.py -A connect -W 2 -C 4").read() 
    metric_name = "Mongo Connection Response In Seconds" 
    # Parse Through Response 

    connection_time = map(int, re.findall(r'\d+', connection_result)) 
    connection_time_result = connection_time[0] 
    send_mongo_results(metric_name, instanceId, ret, connection_time_result) 

# Queries Per Second 
def queries_per_second(ret, instanceId): 
    connection_result=os.popen("/usr/lib/nagios/plugins/check_mongodb.py -A queries_per_second").read() 
    metric_name = "Mongo Queries Per Second" 

    #Parse Response 
    get_numeric_result=(re.findall("\d+\.\d+",connection_result)) 
    result=get_numeric_result[0] 
    send_mongo_results(metric_name, instanceId, ret, result) 

## Submit Results 
def send_mongo_results(metric_name, instance_id,ret,result): 
    cmd = "aws cloudwatch put-metric-data --metric-name " + metric_name + " --namespace MONGO --dimensions \"instance=" + instanceId + ",servertype=Mongo\" --value " + str(result) + " --region us-east-1" 
    ret,cmdout = commands.getstatusoutput(cmd) 

parse_connections(ret, instanceId) 
check_mongo_connections(ret, instanceId) 
queries_per_second(ret, instanceId) 

をスクリプトが動作しますが、スクリプトが実行されたとき、私はCloudWatchの中で結果が表示されない:構造は、基本的には、それぞれのチェックとCloudWatchのに結果を送信します1つのメソッドを実行の3つの方法です。私はsend_mongo_results()にprintステートメントを置き、メソッドにヒットします。メソッドがCloudWatchに結果を送信するのを妨げる可能性があるものを誰かに推薦できますか? (FYI:それはないですので、私は、スクリプトのIAMロールを持っている)、ここで

答えて

1

は、ログイン方法のpythonのためのドキュメントです(ラムダでは、あなたのために同じである必要があります)http://docs.aws.amazon.com/lambda/latest/dg/python-logging.html

編集: 申し訳ありませんが、あなたはCloudWatchのメトリクスを使用していた... http://boto3.readthedocs.io/en/latest/reference/services/cloudwatch.html#CloudWatch.Client.put_metric_data

このページをチェックしてください。あなたはので、私はドキュメントを追っhttps://aws.amazon.com/sdk-for-python/

+0

libにboto3を使用する必要があります。 send_mongo_results()でロギングメソッドを呼び出さなければなりませんか?もしそうなら、私は何を引数として渡すでしょうか? – ryekayo

+0

ちょうど答えを編集...その方法をチェック...私は最初にあなたが何かをログに記録したいと思ったHTH – UXDart

+0

よくログは、実際の問題は私のコードです。 – ryekayo

関連する問題