You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用CDK 2创建Fargate日志指标过滤器时遇无效过滤模式错误

解决CloudWatch MetricFilter过滤Fargate错误日志的问题

错误原因

你当前的filterPattern写法不符合CloudWatch日志过滤模式的语法:

  • exists('{?error ?Error ?ERROR}')是错误用法,exists用于检查结构化日志中是否存在指定字段,但你的Fargate日志大概率是纯文本格式,且该模式本身语法不合法。
  • 即便日志是结构化的,{?error ?Error ?ERROR}也不是正确的字段存在检查语法。

正确解决方案

根据日志格式分两种情况处理:

情况1:Fargate日志为纯文本格式(多数应用默认输出)

要匹配包含任意大小写error的日志行,直接使用不区分大小写的包含匹配:

new logs.MetricFilter(this, 'MetricFilter', {
  logGroup: props!.adminLogGroup,
  metricNamespace: 'fargate-metrics',
  metricName: 'fargate-error',
  // 匹配包含任意大小写"error"的纯文本日志行
  filterPattern: logs.FilterPattern.literal('?error'),
  metricValue: "1",
});

?error是CloudWatch日志过滤模式的语法,?前缀表示不区分大小写,会匹配所有包含error、Error、ERROR等任意大小写组合的日志行。

情况2:Fargate日志为结构化JSON格式(应用输出JSON日志)

如果应用输出JSON格式日志(例如{"message": "...", "level": "ERROR"}),需针对具体字段匹配:

  • 匹配message字段包含任意大小写error:
new logs.MetricFilter(this, 'MetricFilter', {
  logGroup: props!.adminLogGroup,
  metricNamespace: 'fargate-metrics',
  metricName: 'fargate-error',
  filterPattern: logs.FilterPattern.stringValue('$.message', 'contains', '?error'),
  metricValue: "1",
});
  • 匹配level字段为任意大小写的error:
new logs.MetricFilter(this, 'MetricFilter', {
  logGroup: props!.adminLogGroup,
  metricNamespace: 'fargate-metrics',
  metricName: 'fargate-error',
  filterPattern: logs.FilterPattern.stringValue('$.level', '=', '?error'),
  metricValue: "1",
});

验证方法

部署前可在CloudWatch控制台的目标日志组中,用对应的过滤模式(如?error)测试是否能匹配到目标日志,确认模式有效后再通过CDK部署。

内容的提问来源于stack exchange,提问作者whitebear

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 15:32:15