Mat*_*ieu 5 amazon-sqs amazon-web-services aws-sdk aws-lambda
我想发送所有console.log消息(出现在我的Cloudwatch日志中)与某个模式(例如,包括单词“ postToSlack”,或具有某个json字段,如“ slack:true”)匹配的地方的所有Cloudwatch日志。 ..)
但是我一直停留在尝试的最开始:我首先尝试执行最基本的任务:将执行lambda时编写的所有cloudwatch日志(通过放置在lambda函数中的console.logs)发送给SQS(为什么?,因为我先尝试做最简单的事情,然后再过滤发送的日志和不发送的日志。
因此,我创建了一个Cloudwatch规则>事件>事件模式,如下所示:
{
"source": [
"aws.logs"
]
}
Run Code Online (Sandbox Code Playgroud)
作为目标,我选择了SQS,然后创建了一个队列。
但是,当我触发例如lambda时,它们确实会出现在Cloudwatch日志中,因此我希望日志内容被“发送”到队列中,但是当我轮询/检查队列的内容时,SQ上看不到任何内容。
关于cloudwatch规则,我有什么误解吗?
上下文说明
我的lambda每小时都会大量触发(按我的规模:),在1或2分钟的时间内可能执行300至500次lambda。我想在Slack上监视所有他们的console.logs(我正在记录真正的error.stack javascript消息以及纯粹有用的消息,例如lambda输出的结果“ lambda的报告卡:company = Apple,location = cupertino。 。”)。
我可以在每个lambda上使用Slack的http调用,但是传入钩子的Slack每秒大约有1个请求的限制,之后,如果您尝试每秒发送多个传入的Webhook,则会收到429个错误...所以我认为我需要使用一个队列,这样我才不会在同一秒内有300多个lambda写入Slack,而是在一个称为slackQueue的集中队列中控制从AWS到Slack的流。
我的想法是从Cloudwatch向SQS slackQueue发送某些日志(请参阅下文),然后将此SQS队列用作lambda触发器,并随同该lambda一起发送10条消息(AWS允许的最大值;对我来说1条消息= 1 console.log)连接到一个大字符串或数组(无论如何)以将其发送到我的Slack通道(顺便说一句,您可以基于Slack限制连接并发送一个呼叫,最多100条Slack消息,所以如果我可以处理100条消息=我想将console.log和串联起来,但是我认为AWS的当前批处理大小限制为10),这样可以确保我每秒向Slack发送的请求数不超过1(该请求的内容为10 console.logs )。
当我在“某些日志”上面说时,这意味着,我实际上不希望将所有日志发送到队列中(因为我不希望它们在Slack上发送):实际上,我不希望纯粹地“调试”像a console.log("entered function foo").这样的消息在开发过程中很有用,但与Slack无关。
关于一些评论:据我所知(我不是AWS专家),我不想使用cloudwatch警报或指标过滤器,因为它们价格昂贵(我每小时会触发数百次),而不会不能真正满足我的需要:我不希望仅在严重问题或出现“问题”(例如CPU> xxx ...)时才在Slack上阅读,而是真正发送定期过滤我的几乎所有日志都流向Slack,以读取Slack内部而不是AWS内部的日志,因为Slack是一整天都开放的工具,它用于处理来自AWS以外的其他来源的日志/消息作为集中位置,并且我们可以更好地理解漂亮的Slack附件消息格式。当然,最后一个lambda(将消息发送到slack的那个)会做一些格式化以添加斜体/粗体/等,并且slack要求markdown才能很好地格式化“ Slack Attachments”,但这不是最复杂的问题这里 :)
小智 4
@Mathieu,我想您稍微误解了 CloudWatch Events 和 CloudWatch 日志。
您需要的是实时处理 lambda 函数生成的日志数据,根据模式过滤日志,然后将这些过滤后的日志存储到 Slack 中进行分析。
但使用 SQS 配置 CloudWatch Event 与 Lambda 的 SQS 触发器类似。这里,cloudWatch将触发(向)SQS队列发送消息。消息的内容不是您的日志,而是您创建的默认消息或自定义消息。
解决方案#1:
使用订阅筛选器根据要求筛选出日志并订阅 AWS Kinesis/AWS Lambda/Amazon Kinesis Data Firehouse。使用过滤后的流 (Kinesis),触发 lambda 将该数据推送到 Slack。
https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Subscriptions.html https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/SubscriptionFilters.html
解决方案#2:
| 归档时间: |
|
| 查看次数: |
1167 次 |
| 最近记录: |