Elasticsearch 常用任务管理命令及实战应用

常用任务管理命令

  • 列出所有任务
shell 复制代码
curl -X GET "http://<es_host>:<es_port>/_tasks?detailed=true&pretty" -H 'Content-Type: application/json'
  • 获取特定类型的任务
shell 复制代码
curl -X GET "http://<es_host>:<es_port>/_tasks?actions=<action_type>" -H 'Content-Type: application/json'
  • 列出所有查询任务
shell 复制代码
curl -X GET "http://<es_host>:<es_port>/_tasks?detailed=true&actions=*search" -H 'Content-Type: application/json'
  • 取消所有查询任务
    如果 es 查询因大任务而卡住,可以临时采取此措施
shell 复制代码
curl -X POST "http://<es_host>:<es_port>/_tasks/_cancel?actions=*search" -H 'Content-Type: application/json'
  • 获取特定任务的详细信息
shell 复制代码
curl -X GET "http://<es_host>:<es_port>/_tasks/<task_id>" -H 'Content-Type: application/json'
  • 取消特定任务
shell 复制代码
curl -X POST "http://<es_host>:<es_port>/_tasks/_cancel?task_id=<task_id>" -H 'Content-Type: application/json'
  • 获取特定节点上的任务
shell 复制代码
curl -X GET "http://<es_host>:<es_port>/_tasks?nodes=<node_id>" -H 'Content-Type: application/json'

实战

定时检测 Elasticsearch 后台运行的查询任务,如果任务运行时间超过 59 秒,则进行企业微信群告警通知

python 复制代码
import requests
import time

# Elasticsearch节点的URL
es_url = "http://<es_user>:<es_pwd>@<es_host>:<es_port>/_tasks?detailed=true"

# 获取任务信息
response = requests.get(es_url)
tasks_data = response.json()

# 遍历节点和任务
for node_id, node_info in tasks_data.get('nodes', {}).items():
    for task_id, task_info in node_info.get('tasks', {}).items():
        running_time_seconds = task_info.get('running_time_in_nanos', 0) / 1e9
        description = task_info.get('description', '')
        
        if running_time_seconds > 59 and description:
            running_time_formatted = f"{running_time_seconds:.2f}"
            # 准备单个任务的Markdown内容
            content = (
                f"# 有大任务在 Elasticsearch 上运行\n"
                f"- **任务 ID**: {task_id}\n"
                f"  **查询语句**: {description}\n"
                f"  **运行时间**: {running_time_formatted} seconds\n"
            )

            # 发送到Webhook
            QYWX_BODY = {
                "msgtype": "markdown",
                "markdown": {
                    "content": content
                }
            }

            BOT_KEY = "xxxxxxxxxxxxxxxxx"  # 企业微信群 bot key

            webhook_url = f"https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={BOT_KEY}"
            headers = {'Content-Type': 'application/json; charset=utf-8'}

            response = requests.post(webhook_url, json=QYWX_BODY, headers=headers)

            # 检查响应状态
            if response.status_code == 200:
                print(f"Notification for Task ID {task_id} sent successfully.")
            else:
                print(f"Failed to send notification for Task ID {task_id}. Status code: {response.status_code}, Response: {response.text}")
            # 等待 2 秒
            time.sleep(2)

print("Processing completed.")
相关推荐
2601_9618752413 小时前
法考资料电子版|pdf|资料已整理
elasticsearch·搜索引擎·pdf·全文检索·solr·lucene·sphinx
MemoriKu15 小时前
Flutter 相册 APP 收尾优化实战:未分析任务横幅持久隐藏与标签回归测试补强
大数据·人工智能·flutter·elasticsearch·机器学习·搜索引擎·重构
JAVA面经实录91715 小时前
Elasticsearch 完整版完整知识体系
java·elasticsearch·搜索引擎·es
Upsy-Daisy16 小时前
Hermes Agent 学习笔记 06:Skills 系统,Agent 如何把经验沉淀为可复用能力?
大数据·elasticsearch·搜索引擎
代码讲故事17 小时前
在没有kibana的ES(elasticsearch)线上生产环境集群中,如何通过命令行修改或增加字段而不需要reindex?
大数据·elasticsearch·搜索引擎·命令行·es·索引·模版
Java 码思客1 天前
【ElasticSearch从入门到架构师】第3章:ES 核心基础概念(架构师必备底层认知)
大数据·elasticsearch·jenkins
徐寿春2 天前
什么是 Elasticsearch 倒排索引
大数据·elasticsearch·搜索引擎
Java 码思客2 天前
【ElasticSearch从入门到架构师】第1章:ElasticSearch 核心认知与行业定位
大数据·elasticsearch·搜索引擎
serve the people3 天前
Elasticsearch(5) i want to monitor the es health from a http api
大数据·http·elasticsearch
Taerge01103 天前
Doris, StarRocks, ClickHouse, Hologres, ES 对比,选型建议
大数据·clickhouse·elasticsearch