我正在将自定义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",
};
很明显,我希望文件名和时间戳匹配,但是它们不匹配。