监控服务发布 Slack 警报
Slack 警报示例演示了如何使用 clearml.automation.monitor
类来实现一个服务,该服务监控任务的完成和失败情况,并在 Slack 频道上发布警报消息。
创建 Slack 机器人
在配置和运行 Slack 警报服务之前,请先创建一个 Slack 机器人(ClearML Bot)。
重要
创建的 Slack API 令牌和频道是配置 Slack 警报服务所需的。
- 登录您的 Slack 账户。
- 访问 https://api.slack.com/apps/new。
- 在 App Name 中,输入一个应用名称。例如,“ClearML Bot”。
- 在 Development Slack Workspace 中,选择一个工作区。
- 点击 Create App。
- 在 Basic Information 下的 Display Information 部分,完成以下内容:
- 在 Short description 中,输入“ClearML Train Bot”。
- 在 Background color 中,输入“#202432”。
- 点击 Save Changes。
- 在 OAuth & Permissions 下的 Scopes 部分,点击 Add an OAuth Scope,然后从列表中选择以下权限:
- channels:join
- channels:read
- chat:write
- 在 OAuth Tokens & Redirect URLs 中
- 点击 Install App to Workspace。
- 在确认对话框中,点击 Allow。
- 点击 Copy 复制 Bot User OAuth Access Token。
运行脚本
自部署 ClearML 服务器
DevOps Services
项目中提供了一个模板 Slack Alerts
任务。您可以克隆它,根据需要调整其配置,然后直接从 ClearML UI 中排队执行。
通过以下方式之一运行监控服务:
- 在本地运行
- 在 ClearML Agent 服务模式下运行
要运行监控服务,请执行以下操作:
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 Agent)。message_prefix
- Slack 警报的消息前缀。例如,要向所有频道成员发送警报,使用:"Hey <!here>"
。min_num_iterations
- 忽略低于此最小迭代次数阈值的任务。使用此选项可排除快速失败的调试会话。默认值为 0。project
- 要监控的项目名称。默认情况下,监控所有项目。include_manual_experiments
- 是否包含在本地运行的任务True
- 监控所有任务(包括本地和远程,由 ClearML Agent 执行)。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 定义的命令行选项。它们显示在任务的配置 (CONFIGURATION) 页面下方的超参数 (HYPERPARAMETERS) > Args 中。
该任务可以重复使用来启动另一个监控实例:克隆任务,编辑其参数,然后将任务排队执行(您通常会希望使用在服务模式下运行的 ClearML Agent 来处理此类服务任务)。
控制台
所有控制台输出都显示在任务的控制台 (CONSOLE) 页面中。
关于 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
。