Почему указанная метка времени в метрике Cloudwatch не будет считывать то же самое? - PullRequest
0 голосов
/ 13 июня 2019

Я пишу пользовательские 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)

В лямбда-процессоре метрика инициализируется из данных sns следующим образом:

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

Очевидно, я ожидаю совпадения имени файла и метки времени, но они не совпадают.

...