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

如何用CloudWatch监控EC2中Windows服务,实现停止2分钟后触发告警?

基于CloudWatch监控Windows服务持续停止状态的解决方案

针对你需要监控EC2中Windows服务A停止状态持续2分钟后触发CloudWatch告警的需求,之前用日志过滤器的方案确实无法满足——因为Windows仅在服务状态变化时写入日志,不会定期上报持续状态。以下是可行的基于CloudWatch的解决方案:

方案一:通过自定义定期上报指标实现精准监控(推荐)

这个方案通过定时采集服务状态并上报为CloudWatch自定义指标,能准确跟踪状态持续时长,完全匹配你的需求。

步骤1:配置基础权限与工具

确保Windows EC2实例已安装CloudWatch Agent,且实例附加的IAM角色拥有cloudwatch:PutMetricData权限(用于上报指标)。若未安装AWS CLI,可先完成安装配置。

步骤2:编写服务状态检查脚本

创建PowerShell脚本(例如CheckServiceA.ps1),将服务状态转换为可上报的数值:

$serviceName = "ServiceA"
$service = Get-Service -Name $serviceName -ErrorAction SilentlyContinue

# 运行状态标记为1,停止/不存在标记为0
$metricValue = if ($service -and $service.Status -eq "Running") { 1 } else { 0 }

# 上报指标到CloudWatch
aws cloudwatch put-metric-data `
    --namespace "WindowsServiceStatus" `
    --metric-name "ServiceA_RunningState" `
    --value $metricValue `
    --dimensions InstanceId=$env:COMPUTERNAME

步骤3:设置定时任务定期执行脚本

在Windows任务计划程序中创建任务:

  • 触发器:设置为每1分钟执行一次
  • 操作:启动powershell.exe,参数填写-ExecutionPolicy Bypass -File "C:\Scripts\CheckServiceA.ps1"
  • 权限:确保任务以拥有足够权限的用户(如本地管理员)运行,避免脚本执行失败

步骤4:创建CloudWatch告警

在CloudWatch控制台配置告警:

  1. 选择自定义命名空间WindowsServiceStatus下的ServiceA_RunningState指标
  2. 统计类型选Minimum,周期设为1分钟
  3. 设置告警条件:连续2个周期(即2分钟)指标值小于1
  4. 配置告警通知(如SNS主题)完成设置

方案二:CloudWatch Synthetics补充(适合有外部入口的服务)

如果服务A提供外部可访问的端口或API,可使用CloudWatch Synthetics创建监控脚本,每隔1分钟检查服务可用性,再基于Synthetics生成的指标配置相同逻辑的告警。但此方案更适合对外服务,内部服务优先选用方案一。

核心优势说明

方案一的本质是通过定期上报状态,让CloudWatch能跟踪服务停止的持续时长,彻底解决了日志过滤器只能捕获单次状态变化的局限,完全满足你对“持续2分钟停止”的监控要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:40:33