gpt4 book ai didi

amazon-web-services - 将与模式匹配的Cloudwatch日志发送到SQS队列

转载 作者:行者123 更新时间:2023-12-04 08:09:39 29 4
gpt4 key购买 nike

我想发送所有console.log消息(出现在我的Cloudwatch日志中)与某个模式(例如,包括单词“postToSlack”,或具有某个json字段,例如“slack:true”)匹配的地方的所有Cloudwatch日志。 ..)

但是我一直处于尝试的最开始:我首先尝试执行最基本的任务:将执行lambda时编写的所有cloudwatch日志(通过放置在lambda函数中的console.logs)发送给SQS(为什么?,因为我先尝试做最简单的事情,然后再过滤发送的日志和不发送的日志。

因此,我创建了一个Cloudwatch规则>事件>事件模式,如下所示:

{
"source": [
"aws.logs"
]
}

作为目标,我选择了SQS,然后创建了一个队列。

但是,当我触发我的lambda时,它们确实会出现在Cloudwatch日志中,因此我希望日志内容被“发送”到队列中,但是当我轮询/检查队列的内容时,SQ上看不到任何内容。

关于cloudwatch规则,我有什么误解吗?

语境说明

我的lambda每小时都会大量触发(按我的规模:),在1或2分钟的时间内可能执行了300至500次lambda。
我想在Slack上监视所有他们的console.logs(我正在记录真正的error.stack javascript消息以及纯粹有用的消息,例如lambda输出的结果“lambda的报告卡:company = Apple,location = cupertino。 。”)。

我可以在每个lambda上使用http调用Slack,但使用 Slack for incoming hooks has a limit of about 1 request per second,之后,如果您尝试每秒发送多个传入的Webhook,则会收到429个错误……所以我认为我需要使用一个队列,以便我不会在同一秒内有300多个lambda写入Slack,而是在称为slackQueue的集中队列中控制从AWS到Slack的流。

我的想法是将某些日志(从Cloudwatch发送到SQS slackQueue),然后使用此SQS队列作为lambda触发器,并随同该lambda发送10条消息(AWS允许的最大值;对我来说1条消息= 1 console.log)连接到一个大字符串或数组(无论如何)以将其发送到我的Slack channel (顺便说一句,您可以基于Slack限制连接并发送一个调用,最多100条Slack消息,因此,如果我可以处理100条消息=我想将console.log和串联起来,但是我认为AWS的当前批处理大小限制为10),这样可以确保我每秒向Slack发送的请求数不超过1(该请求的内容为10 console.logs )。

当我在“某些日志”上面说时,这意味着,我实际上不希望将所有日志发送到队列中(因为我不希望它们在Slack上发送):实际上,我不希望纯粹地“调试”像 console.log("entered function foo").这样的消息,在开发过程中很有用,但与Slack无关。

关于一些评论:据我所知(我不是AWS专家),我不想使用cloudwatch警报或指标过滤器,因为它们非常昂贵(我每小时会触发数百次),而不会真正符合我的需要:我不希望仅在严重问题或出现“问题”(例如CPU> xxx ...)时才在Slack上阅读,而是将常规的过滤后的“几乎”所有日志流发送到使用Slack读取Slack内部而不是AWS内部的日志,因为Slack是一整天开放的工具,它被用于来自其他来源而非AWS的日志/消息作为集中位置,并且更好地消化了漂亮的Slack附件消息格式被我们。当然,最后一个lambda(将消息发送到slack的那个)会做一些格式化以添加斜体/粗体/等,并且slack要求markdown才能很好地格式化“Slack Attachments”,但这不是最复杂的问题这里 :)

最佳答案

@Mathieu,我想您对CloudWatch事件和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:

  • 将您的cloudWatch日志推送到S3。
  • 在S3中的'ObjectCreated'事件上创建一个通知事件,并使用该事件来触发Lambda函数。
  • 在Lambda函数中,编写逻辑以从S3中读取日志(相当于读取文件),对其进行过滤,然后将过滤后的日志推送到Slack。
  • 关于amazon-web-services - 将与模式匹配的Cloudwatch日志发送到SQS队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53270751/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com