HOW TO TD(User Engagement)Treasure Data User Engagement

WorkflowのエラーをSlack通知させる方法

ホーム » WorkflowのエラーをSlack通知させる方法

データマネジメントユニットの藤井温子です。
この記事では、ワークフローでエラー発生時にSlackで通知する方法について解説します。

Treasure Workflowは、ワークフローが実行失敗した際にプロジェクト最終編集者のメールアドレスに通知メールが送信されるようデフォルト設定されていますが、Treasure Data CDPを使うチームのメンバー全員に通知したいケースがあるかと思います。

そのような場合には、Slack通知の設定をすると便利です。ワークフロー内に_error:の設定を記述しておくことで、ワークフローが実行失敗した際に、任意のSlackチャンネルに通知を送ることができます。

_error:とは

前提知識として、ワークフロー実行時にエラーが発生したときに、_error:以下のタスクが実行されます。
例えば、下記のように別のdigファイルを呼び出すこともできます。

_error:
  +wf_error_handling:
    call>: common/function/wf_error_handling.dig

Slack側の設定

Treasure Data CDPから通知を送るには、Slackの「Slack App」を利用します。
Slack Appを設定して、APIのURLに対してリクエストをPOSTすると、指定されたチャネルでSlack Appがメッセージを投稿してくれます。

大まかな流れとしては、下記のステップでSlack側の設定を進めます。

1. Slack Appを新規作成する

「Slack API」から新しくAppを作成します。

2. Appのスコープを設定する

作成したAppが何をできるかを指定します。今回の場合 chat:write, chat:write.customize, incoming-webhook の3つが必要です。

Bot User OAuth Tokenを取得する

スコープの設定が完了したら、発行されているOAuth Tokenをコピーします。Tokenは、後でTreasure Workflow側の設定で使用します。

作成したSlack Appを通知したいチャネルに招待する

Slackのワークスペースで、通知を送りたいチャネルに作成したAppを追加します。チャネルにAppが居ないと通知を送ることができません。

Treasure Workflow側での記述

Treasure Workflow側では、以下の2つの作業が必要です。

  • タスクの記述
  • シークレット(認証情報)の設定

1. タスクの記述

_error: 以下にタスクを記述します。
_error: 以下に直接記述しても良いですが、エラー通知のタスクは他のワークフローでも使い回しできるので、別のdigファイルに切り出してcall>:オペレータで呼び出す形にすると便利です。

http>:オペレータでSlack APIのURLを呼び出し、content:の以下に通知の内容や送り先のSlackチャネルの情報を記述します。

    弊社のデータマネジメントチームでは、下記の内容でエラー通知を記述しています。

  • エラーが発生したワークフローの名前
  • セッションタイム(現地時間)
  • ワークフローのURL(コンソール)
  • Rerunする際のTD toolbeltのコマンド

通知の内容はblocks: 以下に記載していきます。type: sectionの中で内容を段組みにして表示しています。blocksの中身の作成方法もSlackの公式サイトにて解説されていますので、ぜひカスタマイズしてみてください。

今回の場合は、送信先のSlackチャネル ${slack_ch} 、ワークフローの名前 ${wf_name} 、コンソールのURLに必要なAPIリージョン ${api_region} は別途変数を定義しています。

+slack_alert:
  http>: https://slack.com/api/chat.postMessage --Slack APIのURL
  method: POST
  content_format: json
  content:
    channel: ${slack_ch}
    username: "Failure Alert" --Slack上に表示される投稿者名
    icon_emoji: ':fireball:' --Slackのアイコン
    blocks:
    - type: header
      text:
        type: plain_text
        text: "ワークフロー実行失敗"
    - type: section
      fields:
      - type: mrkdwn
        text: |-
          *Workflow Name*
          ${wf_name}
          *Session Time*
          ${session_local_time}
      - type: mrkdwn
        text: |-
          *Console Access*
          https://console.${api_region}/app/workflows/sessions/${session_id}
          *Command for Rerun*
          `td wf retry ${attempt_id} --latest-revision --resume`

2. シークレット(認証情報)の設定

http>:を実行する際の認証情報を、シークレットに登録します。
Slack側で取得したBot User OAuth Tokenをコピーし、Bearer XXXXXX(取得したToken) となるように記載します。

以上で設定完了です。

エラーが発生したときは、Slackチャネルにこのようなメッセージが届きます。

プロジェクト内で_error:を記述する場所

下記のように、複数のワークフローをまとめて動かすプロジェクトの構成の場合は、_error:でSlack通知の設定を記述するのは日次で実行するワークフロー(ここではcron_daily.dig)のみでOKです。
cron_daily.digの中でproc_01.digやproc_02.digが呼び出されて実行されるため、仮にproc_01.digやproc_02.digが実行失敗した場合でも、最終的にcron_daily.digも実行失敗するため、エラー通知が届きます。

おわりに

データの取り込みや処理は日々実行されるため、エラーに気づかずに対応が遅れると、リカバリが大変になってしまいます。Slack通知を上手く活用しながら、エラーに対処していきましょう。

この記事が少しでも参考になりましたら幸いです。

藤井 温子

Data Managementチーム

新卒でデジタルマーケティング支援企業に入社し、UXデザインコンサルタントとして大手保険会社、食品メーカー、機器メーカー等に向けたユーザーリサーチ・WebサイトのUX・UI改善等のプロジェクトを担当。その後、同社のデータ分析系SaaSのカスタマーサクセスの立ち上げメンバーとして、トレーニングプログラムの立ち上げやお客様の活用支援に従事。よりテクニカル領域に関わりたいと思い、2020年にトレジャーデータに参画。データマネジメントチームにて、Treasure Data CDPの構築や施策のデータ集計等、データ基盤の設計・開発・運用支援に従事。

得意領域 : データ活用・分析支援、ウェブ解析、ユーザーリサーチ(定性調査)、コンサルティング

Back to top button