我有一个cron,可以转储数据库并将其上传到S3存储桶。根据上传状态,我发送自定义指标来表示上传失败或上传成功。
这是cron运行的python代码片段。
.
.
.
# assume upload will work
upload_status = 0
try:
s3.meta.client.upload_file(zip_file_path, S3_BUCKET, zip_file_name)
except boto3.exceptions.S3UploadFailedError:
# set upload operation as failed
upload_status = 1
# send a custom metric signifying a failed dump upload
client.put_metric_data(
Namespace='custom/backup',
MetricData=[
{
'MetricName': 'FailedS3BackupUploads',
'Dimensions': [
{
'Name': 'BucketName',
'Value': 'db-dump-test'
},
{
'Name': 'Environment',
'Value': 'Production'
}
],
'Value': upload_status,
},
]
)
.
.
.
我使用Terraform为该指标定义了一个AWS云监视警报,并且创建得很好。
resource "aws_cloudwatch_metric_alarm" "production_dump_check" {
alarm_name = "Daily S3 database backup check"
alarm_description = "An alarm used to notify the Dev team when a backup is not saved in s3"
comparison_operator = "GreaterThanThreshold"
evaluation_periods = "1"
metric_name = "FailedS3BackupUploads"
namespace = "${var.etl_cloud_watch_metric_namespace}"
period = "900"
statistic = "Sum"
threshold = "0"
alarm_actions = ["${var.etl_cloud_watch_notification_topic}"]
ok_actions = ["${var.etl_cloud_watch_notification_topic}"]
treat_missing_data = "breaching"
dimensions {
BucketName = "${var.etl_database_dump_s3_bucket_name}"
Environment = "${var.etl_cloud_watch_environment}"
}
}
为了实验起见,我每15分钟运行一次此cron并将警报的时间设置为相同。
问题来了,当我将警报设置为破坏时,丢失的数据不会发送通知 1个数据点中的1个 。我的配置有问题吗?
当我手动将云监视警报设置为触发时 对于2个数据点中的1个 在第一个丢失的警报之后,我得到了一个警报通知2数据点。 即,如果我在9:00 am得到我的最后一个数据点,我将在〜9:47am收到通知。如果我的期限是1天,那么2天后我会收到转储失败的通知!
我想念什么?这是正常行为吗?缺少数据点时,如何获得接近通知?也就是说,如果最后一个数据点是在上午9:00收到的,则我会在上午9:17左右收到15分钟的云监视通知。
注意:如果我发送失败的信号,则会在信号出现后的5分钟内按预期方式收到通知。