开发者社区> 云计算> 正文

用自定义监控实现 GPU 异常状况的检查与报警

简介: 应用场景阿里云的云监控已原生支持 GPU 实例,可参考:云监控实现GPU云服务器的GPU监控和报警小概率场景中,GPU 卡会处于异常状态( 例如因[显存校验失败](https://docs.

应用场景

  • 阿里云的云监控已原生支持 GPU 实例,可参考:云监控实现GPU云服务器的GPU监控和报警
  • 小概率场景中,GPU 卡会处于异常状态( 例如因显存校验失败而暂时不可用),导致 GPU 云监控也不可用;但此时业务系统需要感知异常情况,以便快速隔离、迁移业务,重启服务器等等
  • 当业务高可用标准高、服务器数量大时,对这种小概率场景的自动监测、报警,就变得尤为重要
  • 本文将介绍通过云监控的自定义监控 & OpenApi - PutCustomEvent 来做到对这种小概率事件的自动监测、报警,第一时间精准处理。示例图:
  • 6187ccd18489987cd29d74f89bd746d3.png

实践步骤

在云监控控制台配置自定义监控

创建报警 联系人联系组

  • 2d32b23869313f58beba1c0022b2e321.pngf702f2e14371ff201682b5b4b4083743.png

创建应用分组

  • 应用分组创建后,请记录 GroupId,后续上报自定义事件时会用到。下例中 GroupId 为 10008057
  • 12697a3472d018d8a77fa5f2865e6c27.png60131ccccf3c5ca95be382f8dc7c4391.png

创建事件报警

  • 创建完成后,查看对应的联系组、通知对象等配置是否正确
  • b6ec5c7e2b04ec0d9540ea3c5508c69e.png74b2917f7d02d9a2a8b26e6e3cb59dfb.png

在 ECS 实例中部署监控 agent

监控 agent 的 demo 脚本

  • 下载 agent 脚本
  • wget https://gpu-nvidia.oss-cn-shanghai.aliyuncs.com/hc_check_gpu.py -O ~/hc_check_gpu.py && chmod +x ~/hc_check_gpu.py
  • 运行时,必需的参数有 3 个:AccessKeyId, AccessKeySecret, GroupId

    • 其中 GroupId 为 创建应用分组 之后获得的,e.g. ... -g 10008057
# ./hc_check_gpu.py -h
usage:
        hc_check_gpu.py -i AkIdXXX -k AkSecretXXX -g 12345678

check gpu status, send event to aliyun cloud monitor

optional arguments:
  -i ACCESSKEYID
  -k ACCESSKEYSECRET
  -g GROUPID
...

测试运行

  • 下载 unittest 脚本
  • wget https://gpu-nvidia.oss-cn-shanghai.aliyuncs.com/hc_check_gpu_ut.sh -O ~/hc_check_gpu_ut.sh && chmod +x ~/hc_check_gpu_ut.sh

    • 此脚本会生成虚假的异常状况,然后上报自定义事件
  • AK_ID=AkIdXXX AK_SECRET=AkSecretXXX ~/hc_check_gpu_ut.sh
  • 6f9a4eab3a2fc0c571116a904855ea89.png

收到报警后,在控制台查看详情

  • 步骤可参考本文开始的示例图

几点说明

  • hc_check_gpu.py 默认会启动 polling loop 监察 GPU 状况,查询间隔为 1 分钟,实际部署时可按需要通过 ... --interval xxx 更改
  • 实际部署时,可以让脚本在后台运行,或者安装为一个定时任务或系统服务
  • 本章节中的 hc_check_gpu.pyhc_check_gpu_ut.sh,要求 ECS 有外网访问。如果需要在内网部署类似方案,可以将 hc_check_gpu.py 拆分后部署:

    • 在内网机器上(不可访问外网),部署 check_xxx 等采集信息的函数
    • 在汇聚结点上(可访问外网),部署 putEvent 的函数

报警到钉钉群

如果短信、邮件等方式还不足以满足需要、消息的展示不够详尽时,我们可以用钉钉机器人来解决这个问题。步骤简述如下,更详细的步骤可参考钉钉文档 - 使用自定义机器人

  • 在钉钉中创建机器人并复制 token
  • c13b9aa66b798ca32fc62ef938fb197f.png
  • 同样可以用前面步骤中的 unittest 脚本来测试

    • AK_ID=AkIdXXX AK_SECRET=AkSecretXXX ~/hc_check_gpu_ut.sh --dingtalk https://oapi.dingtalk.com/robot/send?access_token=12345678xxxx
  • hc_check_gpu.py 中钉钉报警的对应函数为 putEvent 中调用的 dingRobot,用户同样可根据自己需要来做扩充、修改;更详细的消息定制,请参考钉钉文档 - 消息类型及数据格式
  • 测试效果:
  • 69ab8c1c26d5bef532789d900ca81ec2.png

总结

  • 做为对 GPU 原生云监控的有力补充,本文所讨论的方案将进一步提升 GPU 的可用性、易用性,让你的 GPU 应用快上加稳!
  • 本方案,除了 GPU 以外可同样适用于其它异常情况,只需根据自己的需要,裁减、扩充 hc_check_gpu.py 中 check_xxx 函数即可

版权声明:本文中所有内容均属于阿里云开发者社区所有,任何媒体、网站或个人未经阿里云开发者社区协议授权不得转载、链接、转贴或以其他方式复制发布/发表。申请授权请邮件developerteam@list.alibaba-inc.com,已获得阿里云开发者社区协议授权的媒体、网站,在转载使用时必须注明"稿件来源:阿里云开发者社区,原文作者姓名",违者本社区将依法追究责任。 如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
+ 订阅

时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

其他文章