CloudWatch订阅过滤器:使用lambda或直接订阅

时间:2019-11-06 16:22:41

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

我正在探索到Firehose的CloudWatch Logs流。到目前为止,据我了解,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。

任何建议都值得赞赏。

1 个答案:

答案 0 :(得分:1)

  
      
  1. 在性能+定价方面,[拥有lambda与直接使用firehose之间有什么区别?]:
  2.   

是的。在性能方面,由于数据必须先通过lambda才能传递给firehose,因此您会看到稍稍更大的延迟,但是增加的可能性根本不重要。您将获得一个灵活的选择,即在您的消防水龙头前放一个可定制的处理步骤,这是执行附加转换或更智能过滤的机会。

注意,当直接发送到firehose时,您会丢失 CloudWatch的自动压缩-如果您想要压缩,则必须自己设置(可能在firehose上)。同样,您将为处理中间步骤的lambda调用付费。 Check the pricing page来查看这是否真正重要。

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

直接使用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将执行与上述相同的操作,将多个记录追加到每个输出文件中。


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