【问题标题】:CloudWatch Subscription Filter: using lambda or direct subscriptionCloudWatch 订阅过滤器:使用 lambda 或直接订阅
【发布时间】:2020-03-03 04:41:56
【问题描述】:

我正在探索 CloudWatch Logs 流到 Firehose。据我所知,Cloudwatch 订阅过滤器是一个触发 lambda 以消化 CloudWatch 日志并将其发送到不同目的地(ElasticSearch 或 Firehose 或......另一个自定义 lambda)的事件。如果我错了,请纠正我。

我对 Cloudwatch Logs Stream to Firehose 的担忧是:

1/ 在性能+定价方面,有什么区别:

  • Cloudwatch 订阅过滤器 -> Firehose
  • Cloudwatch 订阅过滤器 -> Lambda -> Firehose

2/ Firehose 从 Cloudwatch 收到哪种数据格式?

  • Cloudwatch 订阅过滤器 -> Firehose:我不知道
  • Cloudwatch 订阅过滤器 -> Lambda -> Firehose :我认为 lambda 可以将日志转换为 JSON,然后将其放入 Firehose。

欢迎提出任何建议。

【问题讨论】:

  • 出于好奇,您为什么要将日志发送到消防软管?
  • @MyStackRunnethOver 只是为了构建一个日志分析
  • 我明白了。如果您还没有,请务必查看docs.aws.amazon.com/AmazonCloudWatch/latest/logs/… :)
  • 这真的取决于您是否计划从多个帐户收集日志。 Cloudwatch Subscription Filter -> Kinesis -> Firehose -> Lambda ,Firehose 支持 lambda 触发器,因此您不需要在 firehose 前面使用 Lambda。如果你尝试一些分类或自定义处理,你肯定需要 lambda。

标签: amazon-web-services aws-lambda amazon-cloudwatch amazon-cloudwatchlogs amazon-kinesis-firehose


【解决方案1】:
  1. 就性能+定价而言,[拥有 lambda 与直接使用 firehose 有什么区别吗?]:

是的。在性能方面,您会看到稍长的延迟,因为您的数据必须通过 lambda 才能到达 firehose,但很可能这种增加根本无关紧要。您将获得在您的 firehose 前面具有可定制处理步骤的灵活性 - 一个执行额外转换或更智能过滤的机会。

注意,当直接发送到消防软管时,您会失去 CloudWatch 的自动压缩功能 - 如果您想要压缩,您必须自己设置(可能在消防软管上)。此外,您将支付 lambda 调用来处理中间步骤。 Check the pricing page 看看这是否真的重要。

  1. Firehose 从 Cloudwatch 接收哪种数据格式?

直接使用 firehose 时,您会得到 firehose's output configuration(文件中附加的一堆记录),其中每条记录都是 CloudWatch 日志输出:

{
    "owner": "123456789012",
    "logGroup": "CloudTrail",
    "logStream": "123456789012_CloudTrail_us-east-1",
    "subscriptionFilters": [
        "Destination"
    ],
    "messageType": "DATA_MESSAGE",
    "logEvents": [
        {
            "id": "31953106606966983378809025079804211143289615424298221568",
            "timestamp": 1432826855000,
            "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}"
        },
        ...
    ]
}

(取自the SubscriptionFilter docs

使用 lambda 时:

Lambda 接收到的实际负载格式如下 { "awslogs": {"data": "BASE64ENCODED_GZIP_COMPRESSED_DATA"} }

(也来自上面链接的文档)

其中data 是上面的(编码、压缩的)CloudWatch 输出对象。

鉴于您编写了 lambda,您可以将 任何您想要的输出到 firehose。请记住,firehose 将执行与上述相同的操作,将多条记录附加到每个输出文件中。


请注意:make sure to scale your firehose appropriately - 如果您不小心,并且规模不足,firehose puts 将开始失败,您将开始删除日志数据。确保您正在监控故障!

【讨论】:

  • 您好,感谢您非常详细的回答,只是一个小问题,(可能是我的困惑):两种方式的定价相同(有一个 lambda 并直接使用 firehose)?
  • “另外,您需要为 lambda 调用支付费用以处理中间步骤。” Lambda 有一个慷慨的每月免费套餐,因此这取决于您是否处理了足够的记录以超过它。否则,可能影响定价的其他因素是 1. 如果您使用 lambda 进行更多过滤,您的消防软管成本会下降,以及 2. 对您的消防软管进行压缩可能比使用内置 cloudwatch 更昂贵发送到 firehose 时进行流压缩,因为 firehose 会根据输入数据量(以 GB 为单位)收费
猜你喜欢
  • 2019-10-01
  • 1970-01-01
  • 2018-12-15
  • 2019-02-09
  • 2019-07-28
  • 2019-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多