このページでは、X-Pack Watcher の設定方法について説明します。 X-Pack Watcher を使用すると、ウォッチを使用して特定のアクションをトリガーできます。 たとえば、ログ インデックスに エラー が含まれている場合、メールまたは DingTalk でアラートが送信されます。 X-Pack Watcher は、Elasticsearch に基づくモニタリングおよびアラートサービスです。

重要 X-Pack Watcher は、1 ゾーンのみにデプロイされた Alibaba Cloud Elasticsearch インスタンスに適用できます。 複数のゾーンにデプロイされた Elasticsearch インスタンスはサポートしていません。

機能

X-Pack Watcher を使用してウォッチを作成できます。 ウォッチは、TriggerInputConditionActions で構成されています。
  • Trigger

    ウォッチを実行する日時を決定します。 ウォッチはすべてトリガーが必要です。 X-Pack Watcher は、さまざまなタイプのトリガーを作成できます。 詳細は、『Schedule Trigger』をご参照ください。

  • Input

    ウォッチのペイロードにデータをロードします。 Input は、指定されたインデックスデータのタイプのに一致させるフィルターとして使用されます。 詳細は、『Inputs』をご参照ください。

  • Condition

    ウォッチのアクションを実行するかどうかを制御します。

  • Actions

    指定された条件が満たされたときに実行されるアクションを決定します。

手順

Alibaba Cloud Elasticsearch の X-Pack Watcher は、インターネットに直接アクセスできません。 X-Pack Watcher を使用するには、インターネットおよび Alibaba Cloud Elasticsearch にアクセスできる Alibaba Cloud ECS インスタンスを購入する必要があります。 ECS インスタンスは、アクションを実行するためのプロキシとして動作します。 X-Pack Watcher は、ECS インスタンスのプライベートネットワークアドレスを使用して VPC ネットワークで通信します。

次の例は、Webhook アクションを使用して DingTalk Chatbot をサービスに接続する方法を示しています。
  1. Alibaba Cloud ECS インスタンスの購入

    以下は、購入する ECS インスタンスに求められる要件です。

    重要
    • ECS インスタンスは、Alibaba Cloud Elasticsearch インスタンスと同じリージョンおよび VPC ネットワークに存在すること。
    • ECS インスタンスはインターネットにアクセスできること。
  2. セキュリティグループの設定
    1. Alibaba Cloud ECS コンソールの [インスタンス] ページで、ECS インスタンスの右側の [その他] をクリックし、[ネットワークとセキュリティグループ] > [セキュリティグループの設定] を選択します。
    2. [セキュリティグループ] リストで、[アクション][ルールを追加] をクリックします。
    3. [セキュリティグループルール] ページで、[セキュリティグループルールの追加] をクリックします。
    4. パラメーターを設定し、[OK] をクリックして設定を完了します。
      • [ルールの方向][受信] に設定します。
      • デフォルトの [アクション] 設定の [許可] を使用します。
      • [プロトコルタイプ][Customized TCP] に設定します。
      • デフォルトの プライオリティ 設定を使用します。
      • 使用頻度の高いポートに [ポート範囲] を設定します。 このポートは、NGINX 設定に必要です。 この例では、ポート 8080 を指定します。
      • [許可タイプ][IPv4 CIDR Block] に設定します。
      • [許可オブジェクト] フィールドで、Alibaba Cloud Elasticsearch インスタンスのすべてのノードの IP アドレスを入力します。
        ノードの IP アドレスを照会するには、次の操作を行います。

        Alibaba Cloud Elasticsearch インスタンスの Kibana コンソールにログインし、左側のナビゲーションウィンドウの [モニタリング][ノード] の順にクリックします。

  3. NGINX プロキシの設定
    1. Nginx 設定ファイルを変更します。 以下の設定を参照し、[NGINX のインストールと設定][サーバー] 設定をこの設定に変更します。
      server
        {
          listen 8080;#Listening port
          server_name localhost;#Domain name
          index index.html index.htm index.php;
          root /usr/local/webserver/nginx/html;#Website directory
            location ~ . *\.(php|php5)? $
          {
            #fastcgi_pass unix:/tmp/php-cgi.sock;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            include fastcgi.conf;
          }
          location ~ . *\.(gif|jpg|jpeg|png|bmp|swf|ico)$
          {
            expires 30d;
        # access_log off;
          }
          location / {
            proxy_pass Paste the Webhook address of the DingTalk Chatbot here.
          }
          location ~ . *\.(js|css)? $
          {
            expires 15d;
         # access_log off;
          }
          access_log off;
        }
      }
    2. 変更したら、NGINX 構成ファイルをリロードし、NGINX を再起動します。
      /usr/local/webserver/nginx/sbin/nginx -s reload            # Reload the NGINX configuration file
      /usr/local/webserver/nginx/sbin/nginx -s reopen            # Restart Nginx
    次の方法を使用して、DingTalk Chatbot の Webhook アドレスを照会できます。

    DingTalk でアラート連絡先グループを作成します。 DingTalk グループをクリックし、右上隅の [その他] アイコンをクリックし、[ChatBot] をクリックして、[カスタム] を選択して Webhook ChatBot を追加します。 その後、ChatBot の Webhook アドレスを表示できます。

  4. ウォッチを作成します。

    Alibaba Cloud Elasticsearch インスタンスの Kibana コンソールにログインします。 左側のナビゲーションウィンドウで [Dev Tools] をクリックし、対応する API 操作を呼び出して コンソール にウォッチを作成します。

    次の例では、log_error_watch というウォッチを作成して ログ インデックスに エラー が含まれているかどうかを 10 秒 ごとに確認する方法を示します。 0 を超えるエラーが検出されると、アラートがトリガーされます。
    PUT _xpack/watcher/watch/log_error_watch
    {
      "trigger": {
        "schedule": {
          "interval": "10s"
        }
      },
      "inputs": [
        "search": {
          "request": {
            "indices": ["logs"],
            "body": {
              "query": {
                "match": {
                  "message": "error"
                }
              }
            }
          }
        }
      },
      "condition": {
        "compare": {
          "ctx.payload.hits.total": {
            "gt": 0
          }
        }
      },
      "actions" : {
      "test_issue" : {
        "webhook" : {
          "method" : "POST",
          "url" : "http:// Private IP address of your ECS instance:8080",
          "body" : "{\"msgtype\": \"text\", \"text\": { \"content\": \"An error has been found. Handle the issue immediately.\"}}"
        }
      }
    }
    }

    action で指定された url は、ご使用の Elasticsearch インスタンスと同じリージョンと VPC を共有する購入した Alibaba Cloud ECS インスタンスのプライベート IP アドレスでなければなりません。 また、前述の手順に従って ECS インスタンスのセキュリティグループが作成されていることを確認する必要があります。 そうしないと、Watcher はアラートを送信できません。

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

FAQ

問題点:ウォッチの設定中に次の例外が発生しました No handler found for uri [/_xpack/watcher/watch/log_error_watch_2] and method [PUT]

解決策:Alibaba Cloud Elasticsearch インスタンスの Watcher 機能を有効にしていません。 Watcher 機能を有効にするには、次の手順に従います。
  1. Alibaba Cloud Elasticsearch コンソール にログインし、[インスタンス ID] > [クラスター設定] を選択します。
  2. [クラスター設定] ページで、[YML 設定] の右側の [設定の変更] をクリックします。
  3. [YML 設定] ページで、[Watcher][有効にする] を選択します。
    重要 Watcher を有効にすると、Elasticsearch インスタンスが再起動されます。 操作を確認する前に、ビジネスが再起動プロセスによって悪影響を受けていないことを確認してください。
  4. [インスタンスを再起動します。 よろしいですか?] チェックボックスを選択し、[OK] をクリックします。

    Elasticsearch インスタンスの再起動には最大 30 分かかる場合があります。 しばらくお待ちください。 Elasticsearch インスタンスを再起動すると、Watcher が有効になります。