为什么提供给cloudwatch指标的时间戳不能读回相同的时间戳?

时间:2019-06-13 19:14:03

标签: python amazon-web-services aws-sdk boto3 amazon-cloudwatch

我正在将自定义SLA指标写入cloudwatch,同时将用于集成测试的日志写入S3。我生成一个时间戳,并将其放入度量标准和S3对象名称中。当我读回该指标时,它会关闭几毫秒。例如,如果在155986547处显示失败,则相应的S3文件的名称可能是155986532。它可以提前几毫秒,也可以落后几毫秒,但通常会少一些。

我以前有一个日期时间编码器,此后将其删除:

class DatetimeEncoder(json.JSONEncoder):
    def default(self, obj):
        try:
            return super(DatetimeEncoder, obj).default(obj)
        except TypeError:
            return str(obj)


message_encoded = json.dumps(message, cls=DatetimeEncoder, separators=(",", ":"))
from datetime import datetime
import boto3
import json

def run_loop(args):
    exec_result = exec_command(args["command"].split(" "))
    result = exec_result["return_code"] == 0
    now = int(datetime.today().timestamp())
    message = {
            "timestamp": now,
            "succeeded": result,
            "service": args["service"]
        }
    message_encoded = json.dumps(message)
    arn = get_topic_arn(args["sns_topic_name"])
    if result:
        result_name="SUCCESS"
    else:
        result_name="FAILURE"
    filename="%s/%s_%s" % (args["service"], now, result_name)

    client = boto3.client('sns')
    response = client.publish(
        TopicArn=arn,
        MessageStructure='json',
        Message=json.dumps({'default': message_encoded})
    )
    s3 = boto3.client("s3")
    s3.put_object(Body=exec_result["stdout"], 
                  Bucket=args["s3_bucket_name"],
                  Key=filename)

在处理器lambda中,通过以下方式从sns数据初始化度量标准:

const sourceMetric = {
    Timestamp: parseInt(message.timestamp),
    StorageResolution: resolution,
    Dimensions: dimensions,
    Unit: "Count",
};

很明显,我希望文件名和时间戳匹配,但是它们不匹配。

0 个答案:

没有答案
相关问题