You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何实现SSM托管实例Ping状态监控及连接丢失告警?

如何监控SSM托管实例的Ping状态并触发告警

我之前帮团队搞定过这个需求,CloudWatch事件规则确实没法直接实现Ping状态的监控——因为它主要是响应AWS原生服务的状态变化,而Ping连通性属于自定义的实例层面指标。不过我们可以结合SSM和CloudWatch的组合来搞定,步骤很清晰:

1. 准备CloudWatch自定义指标的上报脚本

首先要在SSM里创建一个自定义文档,用来让实例定期执行Ping并把结果上报到CloudWatch:

  • 打开SSM控制台,进入「文档」→「创建文档」,选择「命令行」类型,把下面的脚本贴进去(记得替换YOUR_TARGET_HOST为你要Ping的目标,比如网关或特定服务地址):
#!/bin/bash
# 执行3次Ping测试,静默输出
ping -c 3 YOUR_TARGET_HOST > /dev/null
# 根据Ping结果上报指标:1=连通,0=丢失
if [ $? -eq 0 ]; then
  aws cloudwatch put-metric-data \
    --namespace "SSMInstancePing" \
    --metric-name "ConnectivityStatus" \
    --value 1 \
    --dimensions InstanceId=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
else
  aws cloudwatch put-metric-data \
    --namespace "SSMInstancePing" \
    --metric-name "ConnectivityStatus" \
    --value 0 \
    --dimensions InstanceId=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
fi
  • 注意:要确保SSM托管实例的IAM角色拥有cloudwatch:PutMetricData权限,不然没法上报指标。可以给角色附加CloudWatchFullAccess(或者更精细化的权限)。

2. 用SSM State Manager定期执行脚本

接下来要让实例定期运行这个Ping脚本:

  • 进入SSM控制台的「State Manager」→「创建关联」
  • 选择刚才创建的自定义文档,设置执行频率(比如每5分钟一次,根据你的监控需求调整)
  • 选择需要监控的SSM托管实例,完成关联创建。这样实例就会自动定期执行Ping并上报状态到CloudWatch。

3. 创建CloudWatch告警触发通知

最后配置告警规则,当Ping失败时发送通知:

  • 打开CloudWatch控制台,进入「告警」→「创建告警」
  • 选择「选择指标」,找到我们自定义的SSMInstancePing命名空间,选择ConnectivityStatus指标,并按InstanceId维度过滤到目标实例
  • 设置告警条件:比如「当指标值等于0,持续1个周期(5分钟)」就触发告警
  • 配置通知:选择一个已有的SNS主题(如果没有就新建一个),把需要接收告警的邮箱、Slack机器人或其他端点订阅到这个主题。这样当实例Ping连接丢失时,你就会收到告警通知。

另外补充下:如果你不想在实例上跑脚本,也可以用CloudWatch Synthetics的Canary来远程Ping实例,但这种方式监控的是Canary节点到实例的连通性,而不是实例自身对外的Ping状态——所以前者更适合你的需求。

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

火山引擎 最新活动