Skip to main content

监控服务发布Slack警报

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

Slack 警报示例

创建一个Slack机器人

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

important

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

  1. 登录您的Slack账户。
  2. 前往 https://api.slack.com/apps/new
  3. App Name中,输入一个应用名称。例如,"ClearML Bot"。
  4. 开发Slack工作区中,选择一个工作区。
  5. 点击创建应用
  6. 基本信息中,在显示信息下,完成以下操作:
    • 简短描述中,输入"Allegro Train Bot"。
    • 背景颜色中,输入"#202432"。
  7. 点击保存更改
  8. OAuth & 权限中,在范围下,点击添加OAuth范围,然后在列表中选择以下权限:
    • channels:加入
    • channels:读取
    • chat:write
  9. OAuth Tokens & Redirect URLs中:
    1. 点击Install App to Workspace
    2. 在确认对话框中,点击Allow
    3. 点击Copy以复制Bot User OAuth Access Token

运行脚本

Self deployed ClearML server

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代理分配到此队列)。
  • 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.execute_remotely()来远程运行这个示例。

要与Slack接口,示例使用了slack_sdk.WebClientslack_sdk.errors.SlackApiError