跳到主内容

监控服务发布 Slack 警报

Slack 警报示例演示了如何使用 clearml.automation.monitor 类来实现一个服务,该服务监控任务的完成和失败情况,并在 Slack 频道上发布警报消息。

Slack alert example Slack alert example

创建 Slack 机器人

在配置和运行 Slack 警报服务之前,请先创建一个 Slack 机器人(ClearML Bot)。

重要

创建的 Slack API 令牌和频道是配置 Slack 警报服务所需的。

  1. 登录您的 Slack 账户。
  2. 访问 https://api.slack.com/apps/new
  3. App Name 中,输入一个应用名称。例如,“ClearML Bot”。
  4. Development Slack Workspace 中,选择一个工作区。
  5. 点击 Create App
  6. Basic Information 下的 Display Information 部分,完成以下内容:
    • Short description 中,输入“ClearML Train Bot”。
    • Background color 中,输入“#202432”。
  7. 点击 Save Changes
  8. OAuth & Permissions 下的 Scopes 部分,点击 Add an OAuth Scope,然后从列表中选择以下权限:
    • channels:join
    • channels:read
    • chat:write
  9. OAuth Tokens & Redirect URLs
    1. 点击 Install App to Workspace
    2. 在确认对话框中,点击 Allow
    3. 点击 Copy 复制 Bot User OAuth Access Token

运行脚本

自部署 ClearML 服务器

DevOps Services 项目中提供了一个模板 Slack Alerts 任务。您可以克隆它,根据需要调整其配置,然后直接从 ClearML UI 中排队执行。

通过以下方式之一运行监控服务:

要运行监控服务,请执行以下操作:

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 中。

Monitoring configuration

该任务可以重复使用来启动另一个监控实例:克隆任务,编辑其参数,然后将任务排队执行(您通常会希望使用在服务模式下运行的 ClearML Agent 来处理此类服务任务)。

控制台

所有控制台输出都显示在任务的控制台 (CONSOLE) 页面中。

关于 slack_alerts.py 的附加信息

slack_alerts.py 中,SlackMonitor 类继承自 clearml.automation.monitor 中的 Monitor 类。SlackMonitor 覆盖了以下 Monitor 类方法:

  • get_query_parameters - 获取任务监控的查询参数。
  • process_task - 获取任务信息,发布 Slack 消息,并输出到控制台。

您可以通过调用 Task.execute_remotely() 远程运行该示例。

为了与 Slack 交互,示例使用了 slack_sdk.WebClientslack_sdk.errors.SlackApiError