すべてのプロダクト
Search
ドキュメントセンター

Elasticsearch:X-Pack Watcher からのアラート通知を受信するように WeCom チャットボットを設定する

最終更新日:Jan 11, 2025

X-Pack Watcher は、Elasticsearch 用に開発された監視およびアラートサービスです。Elasticsearch クラスター用に X-Pack Watcher を設定すると、特定の条件が満たされたときに X-Pack Watcher がアクションをトリガーできます。たとえば、ログインデックスにエラーが含まれている場合、X-Pack Watcher はシステムをトリガーして、メールまたは WeCom メッセージを使用してアラート通知を送信します。このトピックでは、X-Pack Watcher からのアラート通知を受信するように WeCom チャットボットを設定する方法について説明します。

前提条件

  • Alibaba Cloud Elasticsearch クラスターが作成されていること。詳細については、「Alibaba Cloud Elasticsearch クラスターを作成する」をご参照ください。

    説明
    • 元のネットワークアーキテクチャでは、X-Pack Watcher はシングルゾーン Elasticsearch クラスターでのみ使用できます。

    • 新しいネットワークアーキテクチャでは、Elasticsearch クラスターがインターネットに接続できるようにプライベート接続を設定する必要があります。詳細については、「Elasticsearch クラスターのプライベート接続を設定する」をご参照ください。

    ネットワークアーキテクチャの詳細については、「[お知らせ] ネットワークアーキテクチャの調整」をご参照ください。

  • Elasticsearch クラスターで X-Pack Watcher が有効になっていること。デフォルトでは、X-Pack Watcher は無効になっています。詳細については、「YML ファイルを設定する」をご参照ください。

  • 仮想プライベートクラウド(VPC)に Elastic Compute Service(ECS)インスタンスが作成されていること。詳細については、「カスタム起動タブでインスタンスを作成する」をご参照ください。

    説明

    X-Pack Watcher はインターネットに直接アクセスできず、Elasticsearch クラスターの内部エンドポイントを使用してインターネットにアクセスする必要があります。この場合、VPC にデプロイされている ECS インスタンスに対してソースネットワークアドレス変換(SNAT)を有効にするか、Elastic IP アドレス(EIP)を関連付けることができます。このようにして、ECS インスタンスをプロキシとして使用してリクエストを転送できます。詳細については、「EIP を関連付ける」または「SNAT を設定する」をご参照ください。

  • WeCom チャットボットが設定され、チャットボットの webhook URL が取得されていること。

手順

手順 1:NGINX プロキシを設定し、ECS インスタンスのセキュリティグループルールを設定する

  1. ECS インスタンスで NGINX プロキシを設定します。

    NGINX プロキシは、アラート通知を転送するために使用されます。X-Pack Watcher はアラート通知をプロキシに送信し、プロキシは通知を DingTalk または WeCom に転送します。

    1. ECS インスタンスに NGINX をインストールします。

    2. nginx.conf ファイルを設定します。

      nginx.conf ファイルの server 設定を次のコードに置き換えます。

      server {
              listen 8080;
              server_name _;
              root /usr/share/nginx/html;
              # デフォルトサーバーブロックの設定ファイルを読み込みます。
              include /etc/nginx/default.d/*.conf;
      
                location / {
                  proxy_pass <WeCom チャットボットの Webhook URL>;  // WeCom チャットボットの Webhook URL に置き換えます。
                }
              error_page 404 /404.html;
                  location = /40x.html {
              }
              error_page 500 502 503 504 /50x.html;
                  location = /50x.html {
              }
          }

      <WeCom チャットボットの Webhook URL> を、アラート通知を受信するように設定した WeCom チャットボットの webhook URL に置き換えます。

    3. NGINX 設定ファイルをリロードし、NGINX を再起動します。

      /usr/local/webserver/nginx/sbin/nginx -s reload            # NGINX 設定ファイルをリロードします。
      /usr/local/webserver/nginx/sbin/nginx -s reopen            # NGINX を再起動します。
  2. ECS インスタンスのセキュリティグループルールを設定します。

    セキュリティグループルールは、ECS インスタンス上の NGINX プロキシが Elasticsearch クラスターからアラート通知を受信できるようにするために使用されます。

    1. ECS コンソールにログインします。

    2. 左側のナビゲーションペインで、インスタンスとイメージ > [インスタンス] を選択します。

    3. [インスタンス] ページで、ECS インスタンスを見つけて、その名前をクリックします。

    4. インスタンスの詳細ページで、[セキュリティグループ] タブをクリックします。

    5. [セキュリティグループ] タブで、目的のセキュリティグループの名前をクリックします。

    6. アクセスルールセクションの [受信] タブで、[ルールの追加] をクリックします。

    7. パラメータを設定します。

      パラメータ

      説明

      [アクション]

      [許可] を選択します。

      [優先度]

      デフォルト値を保持します。

      [プロトコルタイプ]

      [カスタム TCP] を選択します。

      [ポート範囲]

      このパラメータを頻繁に使用するポートに設定します。この例では、ポート 8080 を使用します。

      [承認オブジェクト]

      Elasticsearch クラスター内のすべてのノードの IP アドレスを入力します。

      説明

      ノードの IP アドレスを取得する方法の詳細については、「ノードの基本情報を表示する」をご参照ください。

      [説明]

      ルールの説明。

    8. [保存] をクリックします。

手順 2:アラート用のウォッチを設定する

  1. Elasticsearch クラスターの Kibana コンソールにログインし、プロンプトに従って Kibana コンソールのホームページに移動します。

    Kibana コンソールへのログイン方法の詳細については、「Kibana コンソールにログインする」をご参照ください。

    説明

    この例では、Elasticsearch V6.7.0 クラスターを使用しています。他のバージョンのクラスターでの操作は異なる場合があります。コンソールでの実際の操作が優先されます。

  2. 表示されるページの左側のナビゲーションペインで、[dev Tools] をクリックします。

  3. 表示されるページの [コンソール] タブで、次のコマンドを実行してウォッチを作成します。

    この例では、developer_count_watch という名前のウォッチを作成して、zl-testgaes インデックスで developer フィールドを 10 秒ごとに検索します。Nintendo という developer フィールドの値で、developer フィールドの出現回数が 158,974 を超える場合、アラートがトリガーされます。

    PUT _xpack/watcher/watch/developer_count_watch
    {
      "trigger": {
        "schedule": {
          "interval": "10s"  // 10秒ごとに実行
        }
      },
      "input": {
        "search": {
          "request": {
            "indices": ["zl-testgaes"], // インデックス名
            "body": {
              "query": {
        "bool": {
          "must": [
            {"match": 
             {
               "developer" : "Nintendo"    // developer フィールドの値が "Nintendo"
            }
            },
            {
            "range": {  // 日付範囲のクエリ(必要に応じて変更)
              "year_of_release": {
                "gte": "2011-09-20T16:00:00.000Z",
                "lte": "2011-12-31T16:00:00.000Z"
                      }
                  }
            }
          ]
        } 
      }
            }
          }
        }
      },
      "condition": {
        "compare": {
          "ctx.payload.hits.total": {  // ヒット数が
            "gt": 158974  // 158974 より大きい
          }
        }
      },
      "actions" : {
      "test_issue" : {
        "webhook" : {
          "method" : "POST",
          "url" : "http://<yourAddress>:8080", // NGINX プロキシのアドレスとポート
          "body" : "{\"msgtype\": \"text\", \"text\": { \"content\": \"developer is Nintendo, More than 158974\"}}" // 送信するメッセージ本文
        }
      }
    }
    }

    表 1. パラメータ

    パラメータ

    ネットワークアーキテクチャ

    説明

    url

    新しいネットワークアーキテクチャ

    エンドポイントのドメイン名。リクエストはドメイン名に基づいて転送されます。エンドポイントのドメイン名を取得する方法の詳細については、「Elasticsearch クラスターのプライベート接続を設定する」をご参照ください。

    元のネットワークアーキテクチャ

    このパラメータを次のいずれかの項目に設定します。

    • NGINX プロキシの IP アドレス。この場合、リクエストは、Elasticsearch クラスターと同じ VPC にある NGINX プロキシを使用してインターネット経由で転送されます。

    • WeCom チャットボットの webhook URL。

    説明

    上記のコマンドを実行した後に No handler found for uri [/_xpack/watcher/watch/log_error_watch_2] and method [PUT] というエラーが返された場合、Elasticsearch クラスターで X-Pack Watcher が無効になっています。この場合、X-Pack Watcher を有効にして、コマンドを再実行します。詳細については、「YML ファイルを設定する」をご参照ください。

手順 3:アラート通知を表示する

通常のケースでは、手順 2:アラート用のウォッチを設定する で指定した条件が満たされると、次の図に示すように、アラート通知が WeCom グループに送信されます。企业微信机器人报警配置

説明

このウォッチが不要になった場合は、次のコマンドを実行してウォッチを削除できます。

DELETE _xpack/watcher/watch/developer_count_watch  // ウォッチを削除