AWS Lambda 日志

AWS Lambda logs

我在 API 网关后面使用 AWS Lambda。

在我的日志中(来自 lambda),我有类似的东西

Timestamp | Request received ...
Timestamp | Request received ...
Timestamp | Response sent statusCode=200 ...
Timestamp | Request received ...
Timestamp | Response sent statusCode=200  ...
Timestamp | Response sent statusCode=510  ...
Timestamp | Request received ...
Timestamp | Request received ...
Timestamp | Response sent statusCode=500  ...
Timestamp | Response sent statusCode=200  ...

有没有办法在"statusCode=500"发生时触发警报?

您可以使用云手表订阅过滤器仅过滤匹配的正则表达式模式,然后使用 SNS 发送警报或通知(您将需要额外的 lambda 消费者来发送 sns)。

更好的方法

由于日志是由 Lambda 生成的,因此最好将错误代码发布为来自 lambda 代码的自定义 cloudwatch 指标。针对自定义指标创建警报将是解决方案。

https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html

您可以在 cloudwatch 日志组上使用您想要的类似于描述的模式的指标过滤器 here。指标过滤器将日志出现次数转换为数字 cloudwatch 指标。获得 cloudwatch 指标后,您可以基于它创建警报,并使用所需的阈值和警报操作来触发 SNS 主题以获取警报。

1.创建指标过滤器:

aws logs put-metric-filter \
  --log-group-name /aws/lambda/myfunction \
  --filter-name MyAppErrorCount \
  --filter-pattern 'statusCode=500' \
  --metric-transformations \
    metricName=ErrorCount,metricNamespace=MyNamespace,metricValue=1,defaultValue=0

2。创建一个 SNS 主题并获取其 arn(Amazon 资源名称)。

3。根据指标创建警报,同时指定要通知的 SNS 主题 arn:

<YOUR_ACCOUNT_ID> 替换为您的 AWS 账户 ID,将 <TOPIC_NAME> 替换为您的主题名称,以及以下命令中的区域等其他值:

aws cloudwatch put-metric-alarm --alarm-name MyAppErrorAlarm \
 --metric-name ErrorCount \
 --namespace MyNamespace \
 --period 300 \
 --evaluation-periods 1 \
 --threshold 0 \
 --comparison-operator GreaterThanThreshold \
 --statistic Sum \
 --alarm-actions arn:aws:sns:us-east-1:<YOUR_ACCOUNT_ID>:<TOPIC_NAME>