如何编写AWS CloudWatch订阅过滤器适配混合JSON与纯文本格式日志
解决方案
你可以通过CloudWatch过滤器的字段存在性判断逻辑实现需求,调整后的订阅过滤器配置如下:
AWSTemplateFormatVersion: 2010-09-09 Parameters: ClusterName: Type: String Resources: TriggerEksControlPlane1: Type: AWS::Logs::SubscriptionFilter Properties: DestinationArn: !Sub "arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:newrelic-log-ingestion" FilterPattern: "{ ($.level != \"Metadata\") || ($.level NOT EXISTS) }" LogGroupName: !Sub /aws/eks/${ClusterName}/cluster
工作原理
- 对于合法JSON格式的日志:
- 若日志包含
level字段且值不等于Metadata,会匹配规则被推送 - 若日志包含
level字段且值等于Metadata,不会匹配 - 若日志不包含
level字段,会触发$.level NOT EXISTS条件被推送
- 若日志包含
- 对于纯文本格式的日志:CloudWatch无法解析为JSON结构,会判定所有JSON字段不存在,触发
$.level NOT EXISTS条件全部被推送
内容的提问来源于stack exchange,提问作者David Gard
相关产品推荐
相关产品推荐

