X-Pack Watcher pour Elasticsearch surveille l'infrastructure, les données d'index et les métriques de santé du cluster grâce à un système d'alerte intégré. Utilisez-le conjointement avec la console Kibana pour suivre l'état de la réplication inter-clusters (CCR) et envoyer des alertes lorsque la latence des requêtes de lecture ou le décalage des points de contrôle dépasse un seuil spécifié.
Fonctionnement
X-Pack Watcher se compose de quatre éléments : un déclencheur qui définit la fréquence d'exécution de la surveillance, une entrée qui récupère les données de surveillance depuis le cluster, une condition qui détermine si le seuil d'alerte est atteint, et des actions qui spécifient ce qui se produit lorsque la condition est remplie, comme l'envoi d'un webhook.
Prérequis
-
Vous avez créé une instance Alibaba Cloud Elasticsearch. Pour plus d'informations, consultez la rubrique Créer une instance Alibaba Cloud Elasticsearch.
RemarquePour l'ancienne architecture réseau, X-Pack Watcher prend uniquement en charge les instances Elasticsearch à zone de disponibilité unique. Les instances multi-zones de disponibilité ne sont pas prises en charge.
Pour la nouvelle architecture réseau, vous devez configurer une connexion PrivateLink pour l'instance afin de contourner les restrictions réseau. Pour plus d'informations, consultez la rubrique Configurer une connexion PrivateLink pour une instance.
Pour plus d'informations sur les architectures réseau, consultez la rubrique [[Avis] Ajustement de l'architecture réseau](t2521816.xdita#).
Vous avez activé X-Pack Watcher pour votre instance Elasticsearch. Pour plus d'informations, consultez la rubrique Configurer les paramètres YML.
-
Vous avez créé une instance ECS dans votre cloud privé virtuel (VPC). Pour plus d'informations, consultez la rubrique Créer une instance à l'aide de paramètres personnalisés.
RemarqueX-Pack Watcher dans Alibaba Cloud Elasticsearch ne peut pas accéder directement à Internet public. Il communique via le point de terminaison privé de votre instance au sein d'un VPC. Par conséquent, l'instance ECS de votre VPC doit disposer d'un accès à Internet public, soit en attribuant une adresse IP élastique (EIP), soit en configurant la traduction d'adresse source (SNAT). Pour plus d'informations, consultez les rubriques Associer une EIP ou Configurer SNAT.
Procédure
Étape 1 : Créer et configurer un bot DingTalk
Créez un groupe DingTalk pour recevoir les alertes.
Dans le coin supérieur droit du groupe, cliquez sur l'icône
. Dans le panneau Group Settings, cliquez sur Bot.Dans la boîte de dialogue Robot Management , cliquez sur Add Robot, sélectionnez Custom, puis cliquez sur Add.
-
Saisissez un Robot Name, sélectionnez Custom Keywords, puis saisissez vos mots-clés.
ImportantLes mots-clés doivent être inclus dans le message d'alerte que vous configurez.
Cochez la case I have read and agree to the "Custom Robot Service and Disclaimer Terms", puis cliquez sur Complete.
-
À côté de Webhook, cliquez sur Copy pour copier l'URL du webhook du bot.
Gardez l'URL du webhook confidentielle. La partager sur des sites web externes crée un risque de sécurité.
Étape 2 : Configurer le proxy NGINX et le groupe de sécurité ECS
-
Configurez le proxy NGINX sur votre instance ECS.
X-Pack Watcher envoie les alertes à un proxy NGINX sur votre instance ECS, qui les transfère ensuite vers DingTalk ou WeCom.
-
Installez NGINX sur l'instance ECS.
-
Configurez le fichier nginx.conf.
Remplacez la section
serverdu fichier nginx.conf par la configuration suivante.server { listen 8080;# Listener port server_name localhost;# Domain name index index.html index.htm index.php; root /usr/local/webserver/nginx/html;# Site 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 <Webhook URL>; } location ~ .*\.(js|css)?$ { expires 15d; # access_log off; } access_log off; }Remplacez <Webhook URL> par l'URL du webhook du bot DingTalk que vous avez copiée à l'étape 1.
-
Rechargez le fichier de configuration et redémarrez NGINX.
/usr/local/webserver/nginx/sbin/nginx -s reload # Reload the configuration file /usr/local/webserver/nginx/sbin/nginx -s reopen # Restart NGINX
-
-
Configurez le groupe de sécurité ECS.
Autorisez le trafic entrant depuis votre instance Alibaba Cloud Elasticsearch vers le proxy NGINX sur l'instance ECS.
Connectez-vous à la console Alibaba Cloud ECS.
Dans le volet de navigation de gauche, choisissez .
Sur la page Cluster, cliquez sur le nom de l'instance cible.
Cliquez sur l'onglet Security Group.
Sur l'onglet Security Groups, cliquez sur le nom du groupe de sécurité cible.
Sur l'onglet Inbound, cliquez sur Add Rule.
-
Configurez les paramètres.
Paramètre
Description
Action
Sélectionnez Permitted.
Priority
Conservez la valeur par défaut.
Protocol
Sélectionnez Custom TCP.
Access Source
Saisissez les adresses IP de tous les nœuds de votre instance Alibaba Cloud Elasticsearch.
RemarquePour obtenir les adresses IP des nœuds, consultez la rubrique Afficher les informations de base sur les nœuds.
Destination
Saisissez le port sur lequel NGINX est configuré pour écouter. Cette rubrique utilise le port 8080 à titre d'exemple.
Description
Saisissez une description pour la règle.
Cliquez sur OK.
Étape 3 : Configurer la surveillance
-
Connectez-vous à la console Kibana de votre cluster Elasticsearch.
Pour obtenir des instructions, consultez la rubrique Se connecter à la console Kibana.
RemarqueLes exemples présentés ici utilisent Elasticsearch V6.7.0. Les opérations peuvent varier légèrement selon les versions.
Dans le menu de navigation de gauche, choisissez .
-
Dans la Console, exécutez la commande suivante pour créer une surveillance.
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 } } }, { "script": { "script": "long gap = doc['ccr_stats.leader_global_checkpoint'].value - doc['ccr_stats.follower_global_checkpoint'].value;\n return gap>1000;" } } ] } } ] } }, "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}}\"}}" } } } }Le tableau suivant décrit les principaux paramètres.
Paramètre
Description
trigger
L'intervalle de déclenchement de la surveillance. Dans cet exemple, l'intervalle est de 10 secondes. Ajustez cette valeur selon vos besoins.
input.search.request.indices
Les index cibles à interroger. Les index .monitoring-es* stockent toutes les métriques de surveillance du cluster, y compris les métriques CCR.
input.search.request.body
Le corps de la requête. Cet exemple interroge l'état CCR des 10 dernières minutes. La surveillance se poursuit si l'une des conditions suivantes est remplie :
-
ccr_stats.time_since_last_read_millis > 600 000 ms (10 minutes) : Plus de 10 minutes se sont écoulées depuis la dernière opération de lecture depuis le cluster leader. Ajustez ce seuil selon vos besoins.
-
La différence entre ccr_stats.leader_global_checkpoint et ccr_stats.follower_global_checkpoint est supérieure à 1 000. Cela signifie que le point de contrôle du follower est en retard de plus de 1 000 opérations par rapport au point de contrôle du leader. Ajustez ce seuil selon vos besoins.
condition
La condition de déclenchement de l'alerte. Dans cet exemple, l'alerte se déclenche si les conditions définies dans input.search.request.body sont remplies et que la requête renvoie plus de zéro document correspondant.
transform
Une étape de prétraitement. Cet exemple parcourt les clés des buckets et extrait les noms des index en retard.
actions
Les actions à exécuter si la condition est vraie. Cet exemple spécifie deux actions :
-
add_index: Écrit les résultats dans un index, ce qui est utile pour déboguer la configuration de la surveillance. -
my_webhook: Envoie une alerte à l'aide d'un webhook.
<yourAddress>
L'adresse du serveur qui reçoit les alertes :
-
Pour les clusters utilisant la nouvelle architecture réseau, définissez ce paramètre sur le point de terminaison de la connexion privée. Pour plus d'informations sur l'obtention du point de terminaison, consultez la rubrique Configurer une connexion privée pour un cluster Elasticsearch.
-
Pour les clusters utilisant l'architecture réseau d'origine, définissez ce paramètre sur l'une des adresses suivantes :
-
L'adresse IP du proxy NGINX. Le proxy NGINX transfère les requêtes depuis le VPC vers Internet.
-
L'URL du webhook du chatbot DingTalk.
-
body
Configurez cette valeur conformément aux paramètres de sécurité du chatbot DingTalk.
Par exemple, si vous sélectionnez Custom Keywords comme Security Settings et ajoutez note comme mot-clé à l'Étape 1 : Créer et configurer un chatbot DingTalk, le champ content du body doit contenir le mot note pour que le chatbot traite l'alerte.
RemarqueSi vous voyez l'erreur
No handler found for uri [/_xpack/watcher/watch/log_error_watch_2] and method [PUT]lors de l'exécution de la commande, cela signifie que X-Pack Watcher n'est pas activé pour votre instance Alibaba Cloud Elasticsearch. Vous devez l'activer, puis exécuter à nouveau la commande. Pour plus d'informations, consultez la rubrique Configurer les paramètres YML. -
Étape 4 : Afficher l'alerte
Si l'état CCR répond à la condition d'alerte configurée à l'Étape 3 : Configurer la surveillance, vous recevez une alerte dans votre groupe DingTalk.
Si vous n'avez plus besoin de la surveillance, exécutez la commande suivante pour la supprimer.
DELETE _watcher/watch/ccr_watcher