aws-ecs-monitor

监控AWS ECS服务健康状态及CloudWatch日志,自动分析错误与重启事件。

已扫描
适合谁
DevOps工程师、云平台运维人员
不适合谁
无AWS账号权限的用户、非云环境部署者
国内可用性
需网络配置。可能需要网络配置或第三方服务可访问。
安装难度
新手友好(★☆☆)。基于终端操作、依赖、API Key 和本地环境要求的初步判断。

安装与下载

openclaw skills install @briancolinger/aws-ecs-monitor

Skill 说明

命令、参数、文件名以原文为准

AWS ECS 监控

用于 AWS ECS 服务的生产环境健康监控与日志分析。

功能说明

  • 健康检查:对域名进行 HTTP 探测,检查 ECS 服务状态(期望运行数 vs 实际运行数),ALB 目标组健康状态,SSL 证书到期时间
  • 日志分析:从 CloudWatch 拉取日志,分类错误类型(崩溃、致命错误、内存溢出、超时、5xx 错误),检测容器重启,过滤健康检查噪音
  • 自动诊断:读取健康状态后,自动通过日志分析调查异常服务

前置条件

  • 已配置 aws CLI 并具备相应 IAM 权限:

- ecs:ListServices, ecs:DescribeServices

- elasticloadbalancing:DescribeTargetGroups, elasticloadbalancing:DescribeTargetHealth

- logs:FilterLogEvents, logs:DescribeLogGroups

  • 安装 curl 用于 HTTP 健康检查
  • 安装 python3 用于 JSON 处理和日志分析
  • 可选安装 openssl 用于 SSL 证书检查

配置方式

所有配置通过环境变量完成:

变量必填默认值说明
ECS_CLUSTERECS 集群名称
ECS_REGIONus-east-1AWS 区域
ECS_DOMAIN用于 HTTP/SSL 检查的域名(未设置则跳过)
ECS_SERVICES自动探测要监控的服务名列表,用逗号分隔
ECS_HEALTH_STATE./data/ecs-health.json写入健康状态的 JSON 文件路径
ECS_HEALTH_OUTDIR./data/输出目录,存放日志、告警和分析报告
ECS_LOG_PATTERN/ecs/{service}CloudWatch 日志组匹配模式({service} 会被替换)
ECS_HTTP_ENDPOINTS用逗号分隔的 name=url 对,用于自定义 HTTP 探测

写入目录

  • **ECS_HEALTH_STATE**(默认:./data/ecs-health.json)—— 健康状态 JSON 文件
  • **ECS_HEALTH_OUTDIR**(默认:./data/)—— 输出目录,存放日志、告警和分析报告

脚本说明

scripts/ecs-health.sh — 健康监控脚本

# 执行完整检查
ECS_CLUSTER=my-cluster ECS_DOMAIN=example.com ./scripts/ecs-health.sh

# 仅输出 JSON 格式结果
ECS_CLUSTER=my-cluster ./scripts/ecs-health.sh --json

# 静默模式(不发送告警,仅更新状态文件)
ECS_CLUSTER=my-cluster ./scripts/ecs-health.sh --quiet

退出码说明:0 = 健康,1 = 不健康/降级,2 = 脚本错误

scripts/cloudwatch-logs.sh — 日志分析脚本

# 从指定服务拉取原始日志
ECS_CLUSTER=my-cluster ./scripts/cloudwatch-logs.sh pull my-api --minutes 30

# 显示所有服务的错误汇总
ECS_CLUSTER=my-cluster ./scripts/cloudwatch-logs.sh errors all --minutes 120

# 深度分析并分类错误
ECS_CLUSTER=my-cluster ./scripts/cloudwatch-logs.sh diagnose --minutes 60

# 检测容器重启情况
ECS_CLUSTER=my-cluster ./scripts/cloudwatch-logs.sh restarts my-api

# 从健康状态文件自动诊断
ECS_CLUSTER=my-cluster ./scripts/cloudwatch-logs.sh auto-diagnose

# 跨所有服务生成摘要报告
ECS_CLUSTER=my-cluster ./scripts/cloudwatch-logs.sh summary --minutes 120

支持选项:--minutes N(默认:60),--json--limit N(默认:200),--verbose

自动探测机制

当未设置 ECS_SERVICES 时,两个脚本会自动从集群中探测服务:

aws ecs list-services --cluster $ECS_CLUSTER

日志组路径根据模式解析(默认为 /ecs/{service})。可通过 ECS_LOG_PATTERN 自定义:

# 若日志组路径为 /ecs/prod/my-api, /ecs/prod/my-frontend 等
ECS_LOG_PATTERN="/ecs/prod/{service}" ECS_CLUSTER=my-cluster ./scripts/cloudwatch-logs.sh diagnose

集成使用

健康监控脚本可在检测到问题时自动触发日志分析。将 ECS_HEALTH_OUTDIR 设置为共享目录,并联合运行两个脚本:

export ECS_CLUSTER=my-cluster
export ECS_DOMAIN=example.com
export ECS_HEALTH_OUTDIR=./data

# 运行健康检查(失败时自动触发日志分析)
./scripts/ecs-health.sh

# 或独立运行日志分析
./scripts/cloudwatch-logs.sh auto-diagnose --minutes 30

错误分类

日志分析器将错误分为以下类别:

  • panic — Go 崩溃
  • fatal — 致命错误
  • oom — 内存溢出
  • timeout — 连接或请求超时
  • connection_error — 连接被拒绝或重置
  • http_5xx — HTTP 500 系列响应
  • python_traceback — Python 堆栈跟踪
  • exception — 通用异常
  • auth_error — 权限或授权失败
  • structured_error — 结构化格式的错误日志(如 JSON)
  • error — 通用 ERROR 级别消息

健康检查产生的噪音(如 ALB 发起的 GET/HEAD /health 请求)会自动从错误统计和 HTTP 状态分布中过滤。

B
@briancolinger

已收录 2 个 Skill

相关推荐