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

AWS App Runner如何筛选日志持久化至CloudWatch?异常问题咨询

AWS App Runner部分Error级JSON日志未同步至CloudWatch的排查方案

核心采集规则

App Runner同步日志到CloudWatch的核心逻辑:

  • 仅采集应用输出到**stdout(标准输出)和stderr(标准错误输出)**的内容
  • 无日志级别过滤规则,只要输出到对应流就会被采集
  • JSON格式日志会被CloudWatch Insights自动解析,但格式不影响采集本身

异常原因及排查步骤

1. 日志输出流不匹配

如果丢失的error日志未输出到stdout/stderr(比如写入了本地文件而非控制台),App Runner无法采集。

  • 验证:本地运行应用触发5xx请求,查看控制台是否能看到目标日志。若本地控制台无输出,说明日志未写入标准流。

2. 缓冲区未刷新

Go语言中标准流默认行缓冲,若日志未带换行符\n,或使用带缓冲的写入器未调用Flush(),日志会滞留在缓冲区,进程未退出则不会输出到控制台。

  • 验证:检查日志代码是否确保每条日志末尾带换行,或写入后执行了缓冲区刷新操作。

3. 日志长度超限

CloudWatch单条日志最大支持256KB,若包含长堆栈信息的error日志超出该阈值,会被截断或丢弃。

  • 验证:计算目标日志的字节大小,确认是否超过限制。

4. 采集延迟

CloudWatch日志 ingestion 偶尔会有延迟,最长可能达15分钟,可等待一段时间后再检查日志组。

5. IAM权限异常

即使已有部分日志同步,若App Runner执行角色的权限被修改,可能导致部分日志写入失败。检查角色是否包含logs:CreateLogStream、logs:PutLogEvents权限。

针对目标日志的验证建议

针对你提供的这条5xx日志:

{"level":"error","caller":"api/routes.go:28","msg":"incoming request","version":"","uri":"/api/v1/users/profile","status":500,"method":"PUT","duration":"512ms","stacktrace":"<stacktrace>"}
  1. 本地触发请求,确认控制台能输出该日志
  2. 检查日志代码是否将这条日志输出到os.Stderr(通常error级别日志应输出到stderr)
  3. 确认日志末尾带有换行符,且写入后执行了缓冲区刷新

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 17:10:12