能否为EC2实例内部运行的服务设置告警?以Mongo服务为例
完全可以实现,除了默认的EC2实例运行状态监控外,你可以通过自定义监控逻辑采集Mongo服务的运行状态,配合CloudWatch告警实现异常自动通知,以下是两种常用的落地方案:
方案一:CloudWatch自定义指标告警(推荐,可与现有CloudWatch告警体系打通)
- 首先在运行Mongo的EC2实例上安装CloudWatch Agent,完成基础权限配置(给实例绑定的IAM角色开放CloudWatch指标上报权限即可)
- 新增Mongo服务状态采集逻辑:可以通过
systemctl is-active mongod(systemd管理的Mongo服务适用)或者端口探测命令nc -zv 127.0.0.1 27017判断服务运行状态,将检测结果(正常返回1、异常返回0)作为自定义指标定期上报到CloudWatch - 在CloudWatch控制台为该自定义指标配置告警规则,设置阈值为连续N次检测结果为0时触发告警
- 将告警通知目标绑定SNS主题,在SNS主题中配置订阅端为邮箱、短信、内部通知Webhook等渠道,即可实现服务异常时自动推送通知
方案二:EC2本地轻量监控(无需依赖CloudWatch,部署速度快)
- 在Mongo实例上编写定时检测脚本,通过crontab设置每分钟运行一次,一旦检测到Mongo服务异常,直接调用本地邮件工具或者内部通知接口发送告警
- 如果你使用systemd管理Mongo服务,可以直接在Mongo的service配置文件中添加
OnFailure钩子,当服务进入失败状态时自动触发预设的通知脚本,响应速度比定时检测更快
注意:如果你的Mongo服务使用了非默认端口、或者开启了鉴权,调整对应的检测规则即可,比如给端口探测命令替换为对应端口、或者添加
mongosh连接鉴权的逻辑来判断服务可用性,比单纯的端口探测更准确。
内容的提问来源于stack exchange,提问作者Rakesh
相关产品推荐
相关产品推荐

