AWS Cloudwatch告警通知中可用的日志过滤参数

4
我正在使用Cloudwatch和Lambda监控日志。我已经设置了一些过滤器,当日志中出现特定类型的错误时触发这些过滤器。是否可能将在日志上过滤的参数发送到Cloudwatch Alarm SNS上?
例如:
接收错误:
[2017-06-29 17:58:52] prod.ERROR: ErrorException: Undefined variable: message X
度量过滤器:
[date,info="*.ERROR:",error]
警报:
当<=0时为IS OK
通知发送到SNS和Lambda以触发不同的通知代理。
SNS事件给了我这个消息,但我想访问过滤变量:
{
    "AlarmName": "PHP_ERROR",
    "AlarmDescription": null,
    "AWSAccountId": "xxxxxxxxx",
    "NewStateValue": "OK",
    "NewStateReason": "Threshold Crossed: no datapoints were received for 1 period and 1 missing datapoint was treated as [NonBreaching]",
    "StateChangeTime": "2017-06-29T17:09:12.336+0000",
    "Region": "EU - Ireland",
    "OldStateValue": "ALARM",
    "Trigger": {
        "MetricName": "PHP_ERROR",
        "Namespace": "Logs",
        "StatisticType": "Statistic",
        "Statistic": "SUM",
        "Unit": null,
        "Dimensions": [],
        "Period": 60,
        "EvaluationPeriods": 1,
        "ComparisonOperator": "GreaterThanOrEqualToThreshold",
        "Threshold": 0,
        "TreatMissingData": "- TreatMissingData:                    NonBreaching",
        "EvaluateLowSampleCountPercentile": ""
    }
}

Thanks,

1个回答

0

很遗憾,alarm 只查看一个 metric 来评估阈值。所以简短的答案是不行 :(

然后,你有另一层抽象,因为 metric 已经从特定的 filter 值设置。

filter 是唯一可以找到提取值的地方,但它只会将匹配转换为值或指标增量(即数字),它不能作为解析日志存储。

AWS 最近发布了 Cloudwatch Log Insights,这可能会帮助您找到错误消息。

否则,您可以尝试 AWS CLI filter for logs command,它允许您浏览日志。

Ubuntu 中的示例

export YOUR_LOG_GROUP_NAME=SomeLogGroup

# The 1000 multiplication is to convert from seconds to milliseconds
# If you already have a specific timestamp, just replace it on the start-time argument
aws logs filter-log-events --log-group-name $YOUR_LOG_GROUP_NAME \
--start-time $(($(date +%s --date="1 minute ago") * 1000)) \
--interleaved --filter-pattern ".ERROR" \
--output=text --query events[*].[message]

在 OSx 中的示例

export YOUR_LOG_GROUP_NAME=SomeLogGroup

# The 1000 multiplication is to convert from seconds to milliseconds
# If you already have a specific timestamp, just replace it on the start-time argument
aws logs filter-log-events --log-group-name $YOUR_LOG_GROUP_NAME \
--start-time $(($(date -v-1M +%s) * 1000)) \
--interleaved --filter-pattern ".ERROR" \
--output=text --query events[*].[message]

如果您想要自动化它,可以替换触发操作,调用一个 Lambda(使用某些 AWS SDK 而不是 CLI),该 Lambda 将能够使用此信息为 SNS 生成所需的消息。
即:
  • 从:Metric -> Alarm -> SNS
  • 到:Metric -> Alarm -> Lambda -> SNS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接