如何通过电子邮件发送 Cloudwatch 日志详细信息?
How to send Cloudwatch log details via email?
下图是我想要实现的。简而言之,将 CloudTrail 日志发送到 CloudWatch 日志组,然后对其进行扫描以查找某些事件,最后在发生协调事件时发送电子邮件警报。
我正在关注这个官方文档,其中也有一个示例 CloudFormation 模板:http://docs.aws.amazon.com/awscloudtrail/latest/userguide/use-cloudformation-template-to-create-cloudwatch-alarms.html
使用上面的 CloudFormation 模板,我已经能够发送电子邮件警报。然而,警报是非常基本的;它不会发送关键信息,例如哪个用户发起了此事件,何时发生等。
逻辑上认为 AWS::Logs::MetricFilter
应该将值传递给 AWS::CloudWatch::Alarm
,然后由后者发送信息。我查看了两个 MetricFilter
and Alarm
服务的文档。 Dimension
更接近我想要的但还不能从日志中读取信息。
我原以为这是一个常见的用例,并且会有文档。我在这里遗漏了一些明显的东西吗?这里有人解决过这个问题吗?
AWS::Logs::MetricFilter
块:
"AuthorizationFailuresMetricFilter": {
"Type": "AWS::Logs::MetricFilter",
"Properties": {
"LogGroupName": { "Ref" : "LogGroupName" },
"FilterPattern": "{ ($.errorCode = \"*UnauthorizedOperation\") || ($.errorCode = \"AccessDenied*\") }",
"MetricTransformations": [
{
"MetricNamespace": "CloudTrailMetrics",
"MetricName": "AuthorizationFailureCount",
"MetricValue": "1"
}
]
}
},
AWS::CloudWatch::Alarm
块
"AuthorizationFailuresAlarm": {
"Type": "AWS::CloudWatch::Alarm",
"Properties": {
"AlarmName" : "CloudTrailAuthorizationFailures",
"AlarmDescription" : "Alarms when an unauthorized API call is made.",
"AlarmActions" : [{ "Ref" : "AlarmNotificationTopic" }],
"Dimensions": [
{
"Name": "errorCode",
"Value": ""
},
{
"Name": "userIdentity",
"Value": ""
}
],
"MetricName" : "AuthorizationFailureCount",
"Namespace" : "CloudTrailMetrics",
"ComparisonOperator" : "GreaterThanOrEqualToThreshold",
"EvaluationPeriods" : "1",
"Period" : "300",
"Statistic" : "Sum",
"Threshold" : "1"
}
},
这是不可能的。
Amazon CloudWatch Logs 将接受来自 AWS CloudTrail 的信息,并在找到与预定义过滤器匹配的消息后增加指标计数。
当指标超过特定阈值时,Amazon CloudWatch 警报 会被触发。但是,生成指标的传入数据与基于阈值触发的警报之间没有直接联系。
可以把它想象成一个 计数进入地铁的人数的旋转门 。闸机统计人数,但不保留通过人员的信息。同样,CloudWatch 警报对事件进行计数,但没有关于已计数事件的任何信息。
下图是我想要实现的。简而言之,将 CloudTrail 日志发送到 CloudWatch 日志组,然后对其进行扫描以查找某些事件,最后在发生协调事件时发送电子邮件警报。
我正在关注这个官方文档,其中也有一个示例 CloudFormation 模板:http://docs.aws.amazon.com/awscloudtrail/latest/userguide/use-cloudformation-template-to-create-cloudwatch-alarms.html
使用上面的 CloudFormation 模板,我已经能够发送电子邮件警报。然而,警报是非常基本的;它不会发送关键信息,例如哪个用户发起了此事件,何时发生等。
逻辑上认为 AWS::Logs::MetricFilter
应该将值传递给 AWS::CloudWatch::Alarm
,然后由后者发送信息。我查看了两个 MetricFilter
and Alarm
服务的文档。 Dimension
更接近我想要的但还不能从日志中读取信息。
我原以为这是一个常见的用例,并且会有文档。我在这里遗漏了一些明显的东西吗?这里有人解决过这个问题吗?
AWS::Logs::MetricFilter
块:
"AuthorizationFailuresMetricFilter": {
"Type": "AWS::Logs::MetricFilter",
"Properties": {
"LogGroupName": { "Ref" : "LogGroupName" },
"FilterPattern": "{ ($.errorCode = \"*UnauthorizedOperation\") || ($.errorCode = \"AccessDenied*\") }",
"MetricTransformations": [
{
"MetricNamespace": "CloudTrailMetrics",
"MetricName": "AuthorizationFailureCount",
"MetricValue": "1"
}
]
}
},
AWS::CloudWatch::Alarm
块
"AuthorizationFailuresAlarm": {
"Type": "AWS::CloudWatch::Alarm",
"Properties": {
"AlarmName" : "CloudTrailAuthorizationFailures",
"AlarmDescription" : "Alarms when an unauthorized API call is made.",
"AlarmActions" : [{ "Ref" : "AlarmNotificationTopic" }],
"Dimensions": [
{
"Name": "errorCode",
"Value": ""
},
{
"Name": "userIdentity",
"Value": ""
}
],
"MetricName" : "AuthorizationFailureCount",
"Namespace" : "CloudTrailMetrics",
"ComparisonOperator" : "GreaterThanOrEqualToThreshold",
"EvaluationPeriods" : "1",
"Period" : "300",
"Statistic" : "Sum",
"Threshold" : "1"
}
},
这是不可能的。
Amazon CloudWatch Logs 将接受来自 AWS CloudTrail 的信息,并在找到与预定义过滤器匹配的消息后增加指标计数。
当指标超过特定阈值时,Amazon CloudWatch 警报 会被触发。但是,生成指标的传入数据与基于阈值触发的警报之间没有直接联系。
可以把它想象成一个 计数进入地铁的人数的旋转门 。闸机统计人数,但不保留通过人员的信息。同样,CloudWatch 警报对事件进行计数,但没有关于已计数事件的任何信息。