Terraform AWS Cloudwatch 警报
Posted
技术标签:
【中文标题】Terraform AWS Cloudwatch 警报【英文标题】:Terraform AWS Cloudwatch alarm 【发布时间】:2021-05-25 23:37:57 【问题描述】:这是cloudwatch_metric_alarm resource
的示例:
resource "aws_cloudwatch_metric_alarm" "nlb_healthyhosts"
alarm_name = "alarmname"
comparison_operator = "LessThanThreshold"
evaluation_periods = "1"
metric_name = "HealthyHostCount"
namespace = "AWS/NetworkELB"
period = "60"
statistic = "Average"
threshold = var.logstash_servers_count
alarm_description = "Number of healthy nodes in Target Group"
actions_enabled = "true"
alarm_actions = [aws_sns_topic.sns.arn]
ok_actions = [aws_sns_topic.sns.arn]
dimensions =
TargetGroup = aws_lb_target_group.lb-tg.arn_suffix
LoadBalancer = aws_lb.lb.arn_suffix
我仍然不明白警报操作参数。在 terraform 文档中,我们有:
alarm_actions - (可选)当此警报从任何其他状态转换为 ALARM 状态时要执行的操作列表。每个 action 被指定为 Amazon 资源名称 (ARN)。
谁能给我一个具体的例子,例如发送电子邮件/和/创建一个 SNS 主题(没有退出主题 ARN)。
非常感谢您的帮助。
【问题讨论】:
aws_cloudwatch_metric_alarm
资源不处理实际的消息传递,无论是通过电子邮件、SMS 还是其他方式。它唯一要做的就是将消息传递给在alarm_actions
中定义的 SNS 主题。
【参考方案1】:
如果您正在寻找一个示例,它看起来如下所示。
首先,您需要创建警报并在警报操作字段中引用您的 sns 主题 arn:
resource "aws_cloudwatch_metric_alarm" "nlb_healthyhosts"
alarm_name = "alarmname"
comparison_operator = "LessThanThreshold"
evaluation_periods = "1"
metric_name = "HealthyHostCount"
namespace = "AWS/NetworkELB"
period = "60"
statistic = "Average"
threshold = var.logstash_servers_count
alarm_description = "Number of healthy nodes in Target Group"
actions_enabled = "true"
alarm_actions = [aws_sns_topic.alarm.arn]
dimensions =
TargetGroup = aws_lb_target_group.lb-tg.arn_suffix
LoadBalancer = aws_lb.lb.arn_suffix
然后创建 SNS 主题并将您的电子邮件订阅到该主题:
# SNS topic to send emails with the Alerts
resource "aws_sns_topic" "alarm"
name = "my-alarm-topic"
kms_master_key_id = aws_kms_key.sns_encryption_key.id
delivery_policy = <<EOF
"http":
"defaultHealthyRetryPolicy":
"minDelayTarget": 20,
"maxDelayTarget": 20,
"numRetries": 3,
"numMaxDelayRetries": 0,
"numNoDelayRetries": 0,
"numMinDelayRetries": 0,
"backoffFunction": "linear"
,
"disableSubscriptionOverrides": false,
"defaultThrottlePolicy":
"maxReceivesPerSecond": 1
EOF
## This local exec, suscribes your email to the topic
provisioner "local-exec"
command = "aws sns subscribe --topic-arn $self.arn --protocol email --notification-endpoint $var.your_email --region $var.main_region"
## KMS Key to encrypt the SNS topic (security best practises)
resource "aws_kms_key" "sns_encryption_key"
description = "alarms sns topic encryption key"
deletion_window_in_days = 30
enable_key_rotation = true
【讨论】:
你好。我回来问一个问题。在维度下,我在 AWS 文档中看到只有几个可用的 EC2 实例维度是(例如实例 ID - 等....)。在我的项目中,我使用一个名为“Type”的标签将我的实例分类为 HTTP 或 APP 实例。有没有办法根据这些标签作为维度创建警报?意思是为带有标签“Http”的实例创建警报,并为标记为“App”的实例创建警报。提前非常感谢您 我以前从来没有这样做过,但是 afik 这可以用custom metrics 来完成,很抱歉我不能给你一个具体的例子。如果此解决方案不符合您的要求,请发布一个新问题,我相信 SO 社区中的某个人将能够帮助您。谢谢,以上是关于Terraform AWS Cloudwatch 警报的主要内容,如果未能解决你的问题,请参考以下文章
用于查找和填充 AWS cloudwatch 警报本身的 Terraform
用于 ECS 任务/容器的 Terraform AWS CloudWatch 日志组
如何将 AWS cloudwatch 事件添加到基于具有 terraform 的容器映像的 aws_lambda_function?
如何编写 terraform 代码来为过多的数据库连接创建 aws_cloudwatch_metric_alarm?