监控服务发布Slack警报
Slack alerts 示例
展示了如何使用 clearml.automation.monitor
类来实现一个服务,该服务监控任务的完成和失败情况,并在 Slack 频道上发布警报消息。
创建一个Slack机器人
在配置和运行Slack警报服务之前,请创建一个Slack Bot(ClearML Bot)。
important
配置Slack警报服务需要您创建的Slack API令牌和频道。
- 登录您的Slack账户。
- 前往 https://api.slack.com/apps/new。
- 在App Name中,输入一个应用名称。例如,"ClearML Bot"。
- 在开发Slack工作区中,选择一个工作区。
- 点击创建应用。
- 在基本信息中,在显示信息下,完成以下操作:
- 在简短描述中,输入"Allegro Train Bot"。
- 在背景颜色中,输入"#202432"。
- 点击保存更改。
- 在OAuth & 权限中,在范围下,点击添加OAuth范围,然后在列表中选择以下权限:
- channels:加入
- channels:读取
- chat:write
- 在OAuth Tokens & Redirect URLs中:
- 点击Install App to Workspace。
- 在确认对话框中,点击Allow。
- 点击Copy以复制Bot User OAuth Access Token。
运行脚本
Self deployed ClearML server
在DevOps Services
项目中提供了一个模板Slack Alerts
任务。您可以克隆它,根据您的需求调整其配置,并直接从ClearML UI中排队执行。
以以下其中一种方式运行监控服务:
- 本地运行
- 在ClearML代理服务模式中运行
要运行监控服务:
python slack_alerts.py --channel <Slack-channel-name> --slack-api <Slack-API-token> --local True [...]
channel
- 警报将发布到的Slack频道。slack_api
- Slack API 密钥。local
- 如果为True
,则在本地运行监控服务。如果为False
,则将任务放入作为service_queue
传递的队列中(默认为services
队列)以进行远程执行。
脚本支持以下额外的命令行选项:
service_queue
- 当远程作为服务运行时使用的队列。默认值为services
(确保您的工作区有这样一个队列,并将ClearML代理分配到此队列)。message_prefix
- Slack警报的消息前缀。例如,要提醒所有频道成员使用:"Hey "
。min_num_iterations
- 最小迭代次数阈值,低于此阈值的实验将被忽略。使用此选项可以排除快速失败的调试会话。默认值为0。project
- 要监控的项目名称。默认情况下,所有项目都会被监控。include_manual_experiments
- 是否包括本地运行的实验:True
- 监控所有实验(包括本地和远程,由ClearML代理执行)。False
(默认) - 仅监控远程实验。
include_completed_experiments
- 如果为False
(默认),仅发送失败任务的警报。如果为True
,则发送已完成和失败任务的警报。include_archived
- 如果为False
(默认值),则仅报告未归档的任务。如果在轮询之间任务被归档,此选项可能会有用。refresh_rate
- 监控实验的频率,以秒为单位。默认值为10.0。include_users
- 仅报告由这些用户启动的任务(接受用户名和用户ID)。 与exclude_users
互斥。exclude_users
- 仅报告不是由这些用户发起的任务(接受用户名和用户ID)。 与include_users
互斥。verbose
- 如果为True
,将增加消息的详细程度(例如,当任务被轮询但被过滤掉时)。
配置
ClearML 自动记录使用 argparse 定义的命令行选项。它们会出现在实验的 配置 页面中的 超参数 > 参数 下。
该任务可以重复使用以启动另一个监控实例:克隆任务,编辑其参数,并将任务加入队列以执行(对于此类服务任务,您通常希望使用在服务模式下运行的ClearML代理)。
控制台
所有控制台输出显示在实验的控制台页面。
关于 slack_alerts.py 的附加信息
在slack_alerts.py
中,类SlackMonitor
继承自clearml.automation.monitor
中的Monitor
类。
SlackMonitor
重写了以下Monitor
类的方法:
get_query_parameters
- 获取任务监控的查询参数。process_task
- 获取任务的信息,发布Slack消息,并输出到控制台。- 如果任务运行了少量迭代,允许跳过失败的任务。调用
Task.get_last_iteration
来获取迭代次数。 - 构建Slack消息,其中包括最近输出到控制台的内容(通过调用
Task.get_reported_console_output()
获取),以及任务输出日志在ClearML Web UI中的URL(通过调用Task.get_output_log_web_page()
获取)。
- 如果任务运行了少量迭代,允许跳过失败的任务。调用
你可以通过调用Task.execute_remotely()
来远程运行这个示例。
要与Slack接口,示例使用了slack_sdk.WebClient
和slack_sdk.errors.SlackApiError
。