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

2024-07-08 09:47:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在向cloudwatch编写定制的SLA度量,同时向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",
};

显然,我希望文件名和时间戳匹配,但它们不匹配。你知道吗


Tags: nameclientjsonobjdefaultmessagereturns3

热门问题