【ES实战】Elasticsearch中Task的简单管理说明

2024-08-29 02:44

本文主要是介绍【ES实战】Elasticsearch中Task的简单管理说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Elasticsearch中Task的简单管理说明

以下命令,在ES5和ES6版本中均是可以使用的

文章目录

  • Elasticsearch中Task的简单管理说明
    • 查询task
      • 示例
    • 取消任务
      • 取消任务某个特定的task
        • 示例
      • 取消某些节点上的task
        • 示例
    • 使用场景
    • 彩蛋
      • ES的审计日志的配置策略

查询task

参数名称是否必填类型备注
actionsNOString用于限制请求的操作的逗号分隔列表或通配符表达式,支持通配符*
detailedNOBoolean若是true,返回的包含有关分片恢复的详细信息
group_byNOstring可取值:nodes,parents,none,用于对返回结果中的任务进行分组的关键字,默认是nodes,根据节点分组归集
nodesNOstring限制查询的节点,值为节点id或名称的逗号分隔列表。
parent_task_idNOstring用于查询固定父任务ID的任务信息。
默认返回全部任务,若值为-1也是返回全部任务。
timeoutNO数字与支持的时间单位组合等待每个节点响应的时间。如果节点在超时之前没有响应,则响应中不包含其信息。但是,超时节点包含在响应的node_failures属性中。默认为30s
wait_for_completionNOBoolean请求阻塞等待,直到所有找到的任务都完成。默认为false

示例

GET _tasks?&detailed&actions=*data/read/search

返回

{"nodes": {"kCTg3PK6QhOI8tTH1Qvu7g": {"name": "bdes222-prd1","transport_address": "10.96.120.112:8201","host": "bdes222-prd1.cnsuning.com","ip": "10.96.120.112:8201","roles": ["data","ingest"],"attributes": {"ml.enabled": "true"},"tasks": {"kCTg3PK6QhOI8tTH1Qvu7g:3369203332": {"node": "kCTg3PK6QhOI8tTH1Qvu7g","id": 3369203332,"type": "transport","action": "indices:data/read/search","description": "indices[budsin_and_nbillingin_error_topic_index], types[budsin_and_nbillingin_error_topic_type], search_type[QUERY_THEN_FETCH], source[{\"size\":1000,\"query\":{\"bool\":{\"must\":[{\"match\":{\"orderItemStatus\":{\"query\":\"01\",\"operator\":\"OR\",\"prefix_length\":0,\"max_expansions\":50,\"fuzzy_transpositions\":true,\"lenient\":false,\"zero_terms_query\":\"NONE\",\"boost\":1.0}}},{\"match\":{\"systemName\":{\"query\":\"budsin\",\"operator\":\"OR\",\"prefix_length\":0,\"max_expansions\":50,\"fuzzy_transpositions\":true,\"lenient\":false,\"zero_terms_query\":\"NONE\",\"boost\":1.0}}},{\"match\":{\"orderItemId\":{\"query\":\"210100023293571005\",\"operator\":\"OR\",\"prefix_length\":0,\"max_expansions\":50,\"fuzzy_transpositions\":true,\"lenient\":false,\"zero_terms_query\":\"NONE\",\"boost\":1.0}}},{\"match\":{\"statusName\":{\"query\":\"FQ\",\"operator\":\"OR\",\"prefix_length\":0,\"max_expansions\":50,\"fuzzy_transpositions\":true,\"lenient\":false,\"zero_terms_query\":\"NONE\",\"boost\":1.0}}},{\"match\":{\"serialNo\":{\"query\":\"1\",\"operator\":\"OR\",\"prefix_length\":0,\"max_expansions\":50,\"fuzzy_transpositions\":true,\"lenient\":false,\"zero_terms_query\":\"NONE\",\"boost\":1.0}}}],\"disable_coord\":false,\"adjust_pure_negative\":true,\"boost\":1.0}},\"version\":true,\"_source\":false,\"sort\":[{\"_doc\":{\"order\":\"asc\"}}]}]","start_time_in_millis": 1724323962569,"running_time_in_nanos": 26397377,"cancellable": true,"parent_task_id": "kCTg3PK6QhOI8tTH1Qvu7g:3369203331"}}}}
}

返回结果标识parent_task_id代表其父任务id。cancellable代表任务是否可以取消。description里面是一些详细的说明,例如查询语句。

取消任务

取消任务某个特定的task

POST _tasks/<taskid>/_cancel

其中<taskid>使用的是parent_task_id的值。

示例
POST _tasks/kCTg3PK6QhOI8tTH1Qvu7g:3369203331/_cancel

取消某些节点上的task

POST _tasks/_cancel?nodes=<nodeId1,nodeId2>&actions=*data/read/search

<nodeId1,nodeId2>为节点id或名称的逗号分隔列表。

示例

停止节点上的全部search类任务

POST _tasks/_cancel?nodes=kCTg3PK6QhOI8tTH1Qvu7g&actions=*data/read/search

使用场景

  • 一些大查询导致,或者一些索引别名查询的索引数量太多,所需的内存太大。由于7版本之前熔断器不是很灵敏,会导致节点内存使用过高,响应过慢,最终出现OOM节点不可用。当单节点出现慢反应时,会拖慢整个集群的服务能力,导致集群的某些服务不可用。

    解决方案:及时重启问题节点(存在丢数据的风险),考虑在管理平台或者业务侧感知,跨索引数量较多的查询,及时告警,然后通过task管理功能,取消此类查询,避免最初就直接采用重启节点的方式。

彩蛋

ES的审计日志的配置策略

主要调整

  • 将每天生成的日志文件变成无限个数,默认是7个。
    appender.audit_rolling.strategy.fileIndex = nomax
  • 删除策略改成混合式,保存30天或者10G以内。
    appender.audit_rolling.strategy.action.condition.nested_condition.type = IfAny
    appender.audit_rolling.strategy.action.condition.nested_condition.lastModify.type = IfLastModified
    appender.audit_rolling.strategy.action.condition.nested_condition.lastModify.age = 30D
    appender.audit_rolling.strategy.action.condition.nested_condition.fileSize.type = IfAccumulatedFileSize
    appender.audit_rolling.strategy.action.condition.nested_condition.fileSize.exceeds = 10GB
    

示例:

appender.audit_rolling.type = RollingFile
appender.audit_rolling.name = audit_rolling
appender.audit_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${role_name}_audit.log
appender.audit_rolling.layout.type = PatternLayout
appender.audit_rolling.layout.pattern = {\"@timestamp":"%d{ISO8601}"\%varsNotEmpty{, "node.name":"%enc{%map{node.name}}{JSON}"}\%varsNotEmpty{, "node.id":"%enc{%map{node.id}}{JSON}"}\%varsNotEmpty{, "host.name":"%enc{%map{host.name}}{JSON}"}\%varsNotEmpty{, "host.ip":"%enc{%map{host.ip}}{JSON}"}\%varsNotEmpty{, "event.type":"%enc{%map{event.type}}{JSON}"}\%varsNotEmpty{, "event.action":"%enc{%map{event.action}}{JSON}"}\%varsNotEmpty{, "user.name":"%enc{%map{user.name}}{JSON}"}\%varsNotEmpty{, "user.run_by.name":"%enc{%map{user.run_by.name}}{JSON}"}\%varsNotEmpty{, "user.run_as.name":"%enc{%map{user.run_as.name}}{JSON}"}\%varsNotEmpty{, "user.realm":"%enc{%map{user.realm}}{JSON}"}\%varsNotEmpty{, "user.run_by.realm":"%enc{%map{user.run_by.realm}}{JSON}"}\%varsNotEmpty{, "user.run_as.realm":"%enc{%map{user.run_as.realm}}{JSON}"}\%varsNotEmpty{, "user.roles":%map{user.roles}}\%varsNotEmpty{, "origin.type":"%enc{%map{origin.type}}{JSON}"}\%varsNotEmpty{, "origin.address":"%enc{%map{origin.address}}{JSON}"}\%varsNotEmpty{, "realm":"%enc{%map{realm}}{JSON}"}\%varsNotEmpty{, "url.path":"%enc{%map{url.path}}{JSON}"}\%varsNotEmpty{, "url.query":"%enc{%map{url.query}}{JSON}"}\%varsNotEmpty{, "request.method":"%enc{%map{request.method}}{JSON}"}\%varsNotEmpty{, "request.body":"%enc{%map{request.body}}{JSON}"}\%varsNotEmpty{, "request.id":"%enc{%map{request.id}}{JSON}"}\%varsNotEmpty{, "action":"%enc{%map{action}}{JSON}"}\%varsNotEmpty{, "request.name":"%enc{%map{request.name}}{JSON}"}\%varsNotEmpty{, "indices":%map{indices}}\%varsNotEmpty{, "opaque_id":"%enc{%map{opaque_id}}{JSON}"}\%varsNotEmpty{, "x_forwarded_for":"%enc{%map{x_forwarded_for}}{JSON}"}\%varsNotEmpty{, "transport.profile":"%enc{%map{transport.profile}}{JSON}"}\%varsNotEmpty{, "rule":"%enc{%map{rule}}{JSON}"}\%varsNotEmpty{, "event.category":"%enc{%map{event.category}}{JSON}"}\}%nappender.audit_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${role_name}_audit-%d{yyyy-MM-dd}-%i.log.gz
appender.audit_rolling.policies.type = Policies
appender.audit_rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.audit_rolling.policies.time.interval = 1
appender.audit_rolling.policies.time.modulate = true
appender.audit_rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.audit_rolling.policies.size.size = 1024GB
appender.audit_rolling.strategy.type = DefaultRolloverStrategy
appender.audit_rolling.strategy.fileIndex = nomax
appender.audit_rolling.strategy.action.type = Delete
appender.audit_rolling.strategy.action.basepath = ${sys:es.logs.base_path}
appender.audit_rolling.strategy.action.condition.type = IfFileName
appender.audit_rolling.strategy.action.condition.glob = ${role_name}_audit-*
appender.audit_rolling.strategy.action.condition.nested_condition.type = IfAny
appender.audit_rolling.strategy.action.condition.nested_condition.lastModify.type = IfLastModified
appender.audit_rolling.strategy.action.condition.nested_condition.lastModify.age = 30D
appender.audit_rolling.strategy.action.condition.nested_condition.fileSize.type = IfAccumulatedFileSize
appender.audit_rolling.strategy.action.condition.nested_condition.fileSize.exceeds = 10GB

这篇关于【ES实战】Elasticsearch中Task的简单管理说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1116618

相关文章

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

java中新生代和老生代的关系说明

《java中新生代和老生代的关系说明》:本文主要介绍java中新生代和老生代的关系说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、内存区域划分新生代老年代二、对象生命周期与晋升流程三、新生代与老年代的协作机制1. 跨代引用处理2. 动态年龄判定3. 空间分

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

Java MQTT实战应用

《JavaMQTT实战应用》本文详解MQTT协议,涵盖其发布/订阅机制、低功耗高效特性、三种服务质量等级(QoS0/1/2),以及客户端、代理、主题的核心概念,最后提供Linux部署教程、Sprin... 目录一、MQTT协议二、MQTT优点三、三种服务质量等级四、客户端、代理、主题1. 客户端(Clien

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实