Alibaba Cloud Elasticsearch が提供する X-Pack Watcher は、ネットワークアクティビティの追跡、インフラストラクチャ、インデックスデータ、クラスタのヘルスステータスのメトリクスの監視、およびアラートの報告を行うことができます。Elasticsearch クラスタの Kibana コンソールでクロス クラスタ レプリケーション (CCR) 機能に関連するメトリクスを取得し、X-Pack Watcher を使用してメトリクスを監視し、例外のアラートを報告できます。このトピックでは、X-Pack Watcher を使用して CCR 関連メトリクスを監視し、例外のアラートを報告する方法について説明します。監視とアラートは、CCR 機能と CCR チェックポイントによって受信されたデータ読み取りリクエストの消費時間に基づいて実装されます。
前提条件
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) インスタンスが作成されていること。詳細については、カスタム起動タブでインスタンスを作成する をご参照ください。
手順
ステップ 1:DingTalk チャットボットを設定する
アラート通知を受信するために使用する DingTalk グループを作成します。
DingTalk グループのチャットウィンドウの右上隅にある
アイコンをクリックします。[グループ設定] パネルで、[ボット] をクリックします。ロボット管理パネルで、[ロボットを追加] をクリックします。
[ロボット] ダイアログボックスで、[ロボットを追加] をクリックします。
[カスタム] カードをクリックします。ロボット詳細ダイアログボックスで、[追加] をクリックします。
[ロボットの追加] ダイアログボックスで、セキュリティ設定の [カスタムキーワード] を選択します。表示されるフィールドに、1 つ以上のキーワードを入力します。
重要キーワードは、設定したアラート情報に含まれている必要があります。
利用規約を読み、同意し、[完了] をクリックします。
Webhook の右側にある [コピー] をクリックして、チャットボットの webhook URL をコピーします。
webhook URL は後で使用するた保存しておいてください。また、webhook URL は機密にしておく必要があります。webhook URL が漏洩した場合、リスクが発生する可能性があります。
ステップ 2:NGINX プロキシを設定し、ECS インスタンスのセキュリティグループルールを設定する
ECS インスタンスで NGINX プロキシを設定します。
NGINX プロキシは、アラート通知を転送するために使用されます。X-Pack Watcher はアラート通知をプロキシに送信し、プロキシは通知を DingTalk または WeCom に転送します。
ECS インスタンスに NGINX をインストールします。
nginx.conf ファイルを設定します。
nginx.conf ファイルの
server設定を次のコードに置き換えます。server { listen 8080;# リッスンポート server_name localhost;# ドメイン名 index index.html index.htm index.php; root /usr/local/webserver/nginx/html;# Web サイトディレクトリ 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 <DingTalk チャットボットの Webhook URL>; } location ~ .*\.(js|css)?$ { expires 15d; # access_log off; } access_log off; }<DingTalk チャットボットの Webhook URL> を、アラート通知を受信するために設定した DingTalk チャットボットの webhook URL に置き換えます。
NGINX 設定ファイルをリロードし、NGINX を再起動します。
/usr/local/webserver/nginx/sbin/nginx -s reload # NGINX 設定ファイルをリロードします。 /usr/local/webserver/nginx/sbin/nginx -s reopen # NGINX を再起動します。
ECS インスタンスのセキュリティグループルールを設定します。
セキュリティグループルールは、ECS インスタンス上の NGINX プロキシが Elasticsearch クラスタからアラート通知を受信できるようにするために使用されます。
ECS コンソール にログインします。
左側のナビゲーションペインで、[インスタンスとイメージ] > [インスタンス] を選択します。
[インスタンス] ページで、ECS インスタンスを見つけ、その名前をクリックします。
インスタンス詳細ページで、[セキュリティグループ] タブをクリックします。
[セキュリティグループ] タブで、目的のセキュリティグループの名前をクリックします。
[アクセスルール] セクションの [受信] タブで、[ルールの追加] をクリックします。
パラメータを設定します。
パラメータ
説明
アクション
許可 を選択します。
優先度
デフォルト値を保持します。
プロトコルタイプ
カスタム TCP を選択します。
ポート範囲
このパラメータを頻繁に使用するポートに設定します。この例では、ポート 8080 が使用されています。
認証オブジェクト
Elasticsearch クラスタのすべてのノードの IP アドレスを入力します。
説明ノードの IP アドレスを取得する方法の詳細については、ノードの基本情報を表示する をご参照ください。
説明
ルールの説明。
[保存] をクリックします。
ステップ 3:アラート用のウォッチを設定する
Elasticsearch クラスタの Kibana コンソールにログインし、指示に従って Kibana コンソールのホームページに移動します。
Kibana コンソールへのログイン方法の詳細については、Kibana コンソールにログインする をご参照ください。
説明この例では、Elasticsearch V6.7.0 クラスタを使用しています。他のバージョンのクラスタでの操作は異なる場合があります。コンソールでの実際の操作が優先されます。
表示されるページの左側のナビゲーションペインで、[開発ツール] をクリックします。
表示されるページの [コンソール] タブで、次のコマンドを実行してウォッチを作成します。
PUT _watcher/watch/ccr_watcher { "trigger": { "schedule": { "interval": "10s" // チェックを実行する間隔 } }, "input": { "search": { "request": { "indices": [ ".monitoring-es*" // クエリとチェックを行うインデックス ], "body": { "size": 0, "sort": [ { "timestamp": { "order": "desc" } } ], "query": { "bool": { "must": [ { "range": { "timestamp": { "gte": "now-10m" } } }, { "term": { "type": { "value": "ccr_stats" } } }, { "bool": { "should": [ { "range": { "ccr_stats.time_since_last_read_millis": { // リーダーインデックスに読み取りリクエストが送信されてからの時間 "gte": 600000 // 10分以上 } } }, { "script": { "script": "long gap = doc['ccr_stats.leader_global_checkpoint'].value - doc['ccr_stats.follower_global_checkpoint'].value;\n return gap>1000;" // リーダーとフォロワー間のラグが 1,000 より大きい } } ] } } ] } }, "aggs": { "NAME": { "terms": { "field": "ccr_stats.follower_index", "size": 1000 } } } } } } }, "condition": { "compare": { "ctx.payload.hits.total": { "gt": 0 } } }, "transform": { "script": """ StringBuilder message = new StringBuilder(); for (def bucket : ctx.payload.aggregations.NAME.buckets) { message.append(bucket.key).append(' ') } return [ 'delay_indices' : message.toString().trim() ] """ // バケットのキーを取得し、スペースで区切る }, "actions" : { "add_index": { "index": { "index": "ccr_delay_indices", // ウォッチ設定をデバッグするために使用されるインデックスを定義 "doc_type": "doc" } }, "my_webhook": { "webhook" : { "method" : "POST", "url" : "http://<yourAddress>:8080", // アラート通知を受信するために使用されるホストアドレス "body" : "{\"msgtype\": \"text\", \"text\": { \"content\": \"Please note: {{ctx.payload}}\"}}" // DingTalk チャットボットのセキュリティ設定に基づいて設定する必要がある } } } }次の表は、上記のコードで使用されているいくつかの主要なパラメータについて説明しています。
パラメータ
説明
trigger
チェックを実行する間隔。ビジネス要件に基づいてこのパラメータを設定します。この例では、このパラメータは 10s に設定されており、10 秒間隔でチェックが実行されることを示します。
input.search.request.indices
クエリとチェックを行うインデックス。.monitoring-es* インデックスには、CCR 関連メトリクスを含む、Elasticsearch クラスタでサポートされているすべてのメトリクスが格納されます。
input.search.request.body
リクエストボディ。この例では、過去 10 分間に生成された CCR 関連のメトリクス情報が監視システムからクエリされます。次の条件のいずれかが満たされた場合、システムは condition パラメータの値に基づいてアラートを報告するかどうかを判断します。
ccr_stats.time_since_last_read_millis > 600000 ms (10 分): リーダーインデックスに読み取りリクエストが送信されてからのレイテンシが 10 分を超えています。ビジネス要件に基づいてこのパラメータを設定します。
ccr_stats.leader_global_checkpoint - ccr_stats.follower_global_checkpoint > 1000: リーダーとフォロワー間のラグが 1,000 より大きいです。ビジネス要件に基づいてこのパラメータを設定します。
condition
アクションを実行するための条件。この例では、input.search.request.body パラメータで指定された条件が満たされ、返される集計ドキュメントの数が 0 より大きい場合にのみ、アラートを報告できます。
transform
前処理方法。この例では、バケットのキーがループで取得され、スペースで区切られます。このようにして、レイテンシが発生しているインデックスの名前を識別できます。
actions
指定された条件が満たされた場合に実行されるアクション。この例では、次のアクションが指定されています。
add_index: 返された結果をインデックスに書き込み、ウォッチ設定のデバッグに使用するインデックスを定義します。
my_webhook: webhook URL を使用してアラート通知を送信します。
<yourAddress>
アラート通知を受信するために使用されるホストアドレス。
Elasticsearch クラスターが新しいネットワークアーキテクチャにデプロイされている場合は、このパラメーターをエンドポイントのドメイン名に設定します。リクエストは、ドメイン名に基づいて転送されます。エンドポイントのドメイン名の取得方法については、Elasticsearch クラスターのプライベート接続を構成するをご参照ください。
Elasticsearch クラスタが元のネットワークアーキテクチャにデプロイされている場合、このパラメータを次のいずれかの項目に設定します。
NGINX プロキシの IP アドレス。この場合、リクエストは Elasticsearch クラスタと同じ VPC にある NGINX プロキシを使用してインターネット経由で転送されます。
DingTalk チャットボットの Webhook URL。
body
DingTalk チャットボットのセキュリティ設定に基づいてこのパラメータを設定する必要があります。
たとえば、ステップ 1:DingTalkチャットボットを構成するでは、[セキュリティ設定] が [カスタムキーワード] に設定され、note キーワードが指定されています。この場合、DingTalkチャットボットは、body パラメーターの content フィールドに note が含まれている場合にのみ、アラート通知を送信します。
説明上記のコマンドを実行した後に
No handler found for uri [/_xpack/watcher/watch/log_error_watch_2] and method [PUT]というエラーが返された場合、Elasticsearch クラスタで X-Pack Watcher が無効になっています。この場合は、X-Pack Watcher を有効にしてからコマンドを再実行してください。詳細については、YML ファイルの設定 をご参照ください。
ステップ 4:アラート通知を表示する
通常のケースでは、ステップ 3:アラート用のウォッチを作成する で指定された条件が満たされた場合、次の図に示すように、アラート通知が DingTalk グループに送信されます。
このウォッチが不要になった場合は、次のコマンドを実行してウォッチを削除できます。
DELETE _xpack/watcher/watch/ccr_watcher