如何用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控制台配置告警:
- 选择自定义命名空间
WindowsServiceStatus下的ServiceA_RunningState指标 - 统计类型选
Minimum,周期设为1分钟 - 设置告警条件:连续2个周期(即2分钟)指标值小于1
- 配置告警通知(如SNS主题)完成设置
方案二:CloudWatch Synthetics补充(适合有外部入口的服务)
如果服务A提供外部可访问的端口或API,可使用CloudWatch Synthetics创建监控脚本,每隔1分钟检查服务可用性,再基于Synthetics生成的指标配置相同逻辑的告警。但此方案更适合对外服务,内部服务优先选用方案一。
核心优势说明
方案一的本质是通过定期上报状态,让CloudWatch能跟踪服务停止的持续时长,彻底解决了日志过滤器只能捕获单次状态变化的局限,完全满足你对“持续2分钟停止”的监控要求。
内容的提问来源于stack exchange,提问作者Pigbrainflower
相关产品推荐
相关产品推荐

