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

如何为EKS日志创建带AND条件的CloudWatch指标过滤器?

解决CloudWatch指标过滤器匹配EKS JSON日志的复合条件问题

正确的过滤表达式写法

针对你的需求,需要同时匹配kubernetes.namespace_name等于production,且log字段包含] Failed:,正确的CloudWatch JSON过滤表达式如下:

$.kubernetes.namespace_name == "production" && contains($.log, "] Failed:")

配置步骤

  1. 打开AWS CloudWatch控制台,找到目标EKS应用的日志组
  2. 切换到指标过滤器选项卡,点击创建指标过滤器
  3. 在过滤模式区域,选择JSON类型,将上面的表达式粘贴到输入框
  4. 点击测试模式,粘贴你的示例日志条目验证是否只匹配符合条件的记录
  5. 测试通过后,配置指标详情:设置指标命名空间(比如EKS/ProductionErrors)、指标名称(比如FailedRequestCount),指标值选1(每条匹配日志计数+1)
  6. 完成配置并保存

常见问题排查

  • 之前AND逻辑不生效的原因:CloudWatch过滤语法中逻辑与使用&&而非大写AND,且必须通过$.前缀正确引用JSON字段,否则会把整个日志当作纯字符串处理,导致条件判断失效
  • 误捕获staging环境的原因:如果只写"] Failed:"的字符串匹配,会忽略JSON结构,直接匹配所有包含该字符串的日志,不管所属命名空间
  • 字符串匹配注意事项:使用contains()函数实现“包含”匹配,若直接用==则只会匹配完全等于目标字符串的日志,无法满足需求

示例日志测试

符合条件的日志(会被匹配):

{
"kubernetes": {
"namespace_name": "production",
"pod_name": "payment-service-7f9d6c8b9c-2xqzk"
},
"log": "2024-05-20T14:30:00Z [ORDER_PROCESS] Failed: insufficient funds"
}

不符合条件的日志(不会被匹配):

{
"kubernetes": {
"namespace_name": "staging",
"pod_name": "payment-service-7f9d6c8b9c-5rtds"
},
"log": "2024-05-20T14:31:00Z [ORDER_PROCESS] Failed: invalid request"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 23:03:19