Watcher Slack Action

slack アクションを使用して、Slack チームのチャンネルやユーザーにメッセージを送信します。Slack メッセージを送信するには、elasticsearch.yml少なくとも 1 つの Slack アカウントを構成する必要があります

Configuring Slack actions

Slack アクションは actions 配列で構成します。アクション固有の属性は slack キーワードを使用して指定します。

以下のスニペットは、シンプルな Slack アクションの定義を示しています:

Js

  1. "actions" : {
  2. "notify-slack" : {
  3. "transform" : { ... },
  4. "throttle_period" : "5m",
  5. "slack" : {
  6. "message" : {
  7. "to" : [ "#admins", "@chief-admin" ],
  8. "text" : "Encountered {{ctx.payload.hits.total}} errors in the last 5 minutes (facepalm)"
  9. }
  10. }
  11. }
  12. }
メッセージを送信したいチャンネルとユーザー。
メッセージの内容。

Using attachments to format Slack messages

単純なテキストベースのメッセージを送信するだけでなく、Slack の attachment 機能を使用してフォーマットされたメッセージを送信できます。Watcher は Slack 添付ファイルを活用して、実行コンテキストのペイロードからテンプレート化されたメッセージを動的に生成できるようにします。

以下のスニペットは、標準のメッセージ添付ファイルを示しています:

Js

  1. "actions" : {
  2. "notify-slack" : {
  3. "throttle_period" : "5m",
  4. "slack" : {
  5. "account" : "team1",
  6. "message" : {
  7. "from" : "watcher",
  8. "to" : [ "#admins", "@chief-admin" ],
  9. "text" : "System X Monitoring",
  10. "attachments" : [
  11. {
  12. "title" : "Errors Found",
  13. "text" : "Encountered {{ctx.payload.hits.total}} errors in the last 5 minutes (facepalm)",
  14. "color" : "danger"
  15. }
  16. ]
  17. }
  18. }
  19. }
  20. }

ペイロードから動的に生成される添付ファイルテンプレートを定義するには、ウォッチアクションで dynamic_attachments を指定します。たとえば、動的な添付ファイルはペイロード内のヒストグラムバケットを参照し、バケットごとに添付ファイルを構築できます。

以下の例では、ウォッチ入力が日付ヒストグラム集計を使用して検索を実行し、Slack アクションを実行します:

  • 1. ペイロードをリストに変換し、リスト内の各アイテムがその月のユーザー数と、その数に関連する感情を表す色(危険または悪)を保持します。
  • 2. 変換によって生成されたリスト内のアイテムを参照する添付ファイルテンプレートを定義します。

Js

  1. "input" : {
  2. "search" : {
  3. "request" : {
  4. "body" : {
  5. "aggs" : {
  6. "users_per_month" : {
  7. "date_histogram" : {
  8. "field" : "@timestamp",
  9. "interval" : "month"
  10. }
  11. }
  12. }
  13. }
  14. }
  15. }
  16. },
  17. ...
  18. "actions" : {
  19. "notify-slack" : {
  20. "throttle_period" : "5m",
  21. "transform" : {
  22. "script" : {
  23. "source" : "['items': ctx.payload.aggregations.users_per_month.buckets.collect(bucket -> ['count': bucket.doc_count, 'name': bucket.key_as_string, 'color': bucket.doc_count < 100 ? 'danger' : 'good'])]",
  24. "lang" : "painless"
  25. }
  26. },
  27. "slack" : {
  28. "account" : "team1",
  29. "message" : {
  30. "from" : "watcher",
  31. "to" : [ "#admins", "@chief-admin" ],
  32. "text" : "System X Monitoring",
  33. "dynamic_attachments" : {
  34. "list_path" : "ctx.payload.items"
  35. "attachment_template" : {
  36. "title" : "{{month}}",
  37. "text" : "Users Count: {{count}}",
  38. "color" : "{{color}}"
  39. }
  40. }
  41. }
  42. }
  43. }
  44. }
アクションの変換によって生成されたリスト。
パラメータプレースホルダーは、変換によって生成されたリストの各アイテムの属性を参照します。

Slack action attributes

名前 必須 説明
message.from いいえ Slack メッセージに表示される送信者名。
受信ウェブフックの設定された名前を上書きします。
message.to はい メッセージを送信したいチャンネルとユーザー。
チャンネル名は # で始まり、ユーザー名は @ で始まる必要があります。文字列値または文字列値の配列を受け入れます。
message.icon いいえ Slack メッセージに表示されるアイコン。受信ウェブフックの設定されたアイコンを上書きします。画像の公開 URL を受け入れます。
message.text はい メッセージの内容。
message.attachments いいえ Slack メッセージの添付ファイル。メッセージの添付ファイルを使用すると、よりリッチにフォーマットされたメッセージを作成できます。
Slack attachments documentation で定義された配列を指定します。
message.dynamic_attachments いいえ 現在のウォッチペイロードに基づいて動的に生成できる Slack メッセージの添付ファイル。詳細については、
Using attachments to format Slack messages を参照してください。
proxy.host いいえ 使用するプロキシホスト(proxy.port と組み合わせてのみ使用)。
proxy.port いいえ 使用するプロキシポート(proxy.host と組み合わせてのみ使用)。

Configuring Slack Accounts

Watcher が Slack と通信するために使用できるアカウントは、xpack.notification.slack 名前空間の elasticsearch.yml で構成します。

Slack アカウントを構成するには、Incoming Webhooks feature を持つ Slack アプリが必要です。生成されたウェブフック URL を使用して、Elasticsearch で Slack アカウントを設定します。

Slack アカウントを構成するには、少なくともアカウント名とウェブフック URL を Elasticsearch キーストアに指定する必要があります(secure settings を参照)。

Shell

  1. bin/elasticsearch-keystore add xpack.notification.slack.account.monitoring.secure_url

もはや elasticsearch.yml 設定を使用して Slack アカウントを構成することはできません。代わりに、Elasticsearch の安全な keystore メソッドを使用してください。

Slack notification attributes のデフォルトを指定できます:

Yaml

  1. xpack.notification.slack:
  2. account:
  3. monitoring:
  4. message_defaults:
  5. from: x-pack
  6. to: notifications
  7. icon: http://example.com/images/watcher-icon.jpg
  8. attachment:
  9. fallback: "X-Pack Notification"
  10. color: "#36a64f"
  11. title: "X-Pack Notification"
  12. title_link: "https://www.elastic.co/guide/en/x-pack/current/index.html"
  13. text: "One of your watches generated this notification."
  14. mrkdwn_in: "pretext, text"

複数のチャンネルに通知するには、Slack の各チャンネルに対してウェブフック URL を作成し、Elasticsearch に複数の Slack アカウントを作成します(各ウェブフック URL ごとに 1 つ)。

複数の Slack アカウントを構成する場合は、デフォルトアカウントを構成するか、通知を送信するアカウントを slack アクションで指定する必要があります。

Yaml

  1. xpack.notification.slack:
  2. default_account: team1
  3. account:
  4. team1:
  5. ...
  6. team2:
  7. ...