【发布时间】:2023-02-15 20:52:27
【问题描述】:
我正在尝试配置 Terraforms 来为过滤器创建一个 Metric_filter 和一个 Metric_alarm。当触发警报时,它会通过 SNS 主题发送电子邮件。
我可以在不使用 Dimensions 的情况下通过手动配置 AWS 来让它工作。但是,一旦我在 metric_filter 上添加 Dimensions,它就不起作用了——无论是在 AWS 中手动还是在 terraforms 代码中。
我的理解是维度将为它指定的 json 中的每个变量创建一个单独的计数。这意味着如果由于 5 个不同的表中的错误而抛出 5 个日志,我应该为每个表收到一封单独的电子邮件。
例如,我可以通过过滤 metric_filter 模式“{$.LogTitle = MyDataLog }”来找到我的日志。
这与 json 中的 "LogTitle": "MyDataLog" 匹配。它成功地找到了日志。
我想要一个维度来为我在 API 中监控的每个表创建单独的电子邮件。 在日志消息中,TableName 可以更改。
这在尺寸部分不起作用:
dimensions = {
TableName = "$.TableName"
}
在这两种情况下,都不会生成任何数据,就像它看不到日志或没有重新编码它们一样。如果我删除这一行然后一切正常,但它是所有表的通用计数,而不是每个表的单独计数。
任何帮助表示赞赏? 我需要使用 lambda 还是什么?
这是我的日志之一:
{
"@t": "2022-09-07T03:54:45",
"@mt": "{LogTitle} - Table {TableName} is out of date.",
"@l": "Warning",
"LogTitle": "MyDataLog",
"TableName": "TableOne",
"SourceContext": "MyApp.HomeController.Data.handler",
"ActionId": "be41erg7-066y-4f8d-abc1-085drsgat4",
"ActionName": "MyApp.HomeController.Data",
"RequestId": "12tgfr54sfsrt",
"RequestPath": "/myapi",
"ConnectionId": "12tgfr54sfsrt",
"User-Agent": [
"Mozilla/5.0 blah"
],
"Referer": [
"https://mywebsite.com/myapp"
],
"RequestPort": 12345,
"RequestIpAddress": "blah",
"User": "myemail@email.com",
"ThreadId": 123,
"ApplicationName": "My App"
}
这是我的 terraform metric_filter:
resource "aws_cloudwatch_log_metric_filter" "this" {
name = "TableErrorLog"
pattern = "{$.LogTitle = MyDataLog }"
log_group_name = aws_cloudwatch_log_group.this.name
metric_transformation {
name = "TableErrorLog"
namespace = var.app
value = "1"
dimensions = {
TableName = "$.TableName"
}
}
}
这是我的 metric_alarm。 SNS 主题创建良好且有效。我只是将其中的一些隐藏在一个变量文件中:
resource "aws_cloudwatch_metric_alarm" "table_error_log_alarm" {
alarm_name = "TableErrorLogAlam"
comparison_operator = "GreaterThanOrEqualToThreshold"
evaluation_periods = "1"
metric_name = "EventCount"
namespace = var.app
period = "43200"
statistic = "Sum"
threshold = "1"
datapoints_to_alarm = "1"
dimensions = {
TableName = "$.TableName"
}
alarm_description = "This metric monitors Table Error Logs"
alarm_actions = ["${module.sns.topic_arn}"]
}
因此,我正在寻找一个可行的解决方案,让过滤器触发警报,并让该警报的维度成为日志错误指定的单个 TableName。不确定我做的尺寸是否正确......我是否需要将 lambda 作为尺寸或其他东西?
【问题讨论】:
标签: amazon-web-services terraform amazon-cloudwatch terraform-provider-aws cloudwatch-alarms