Elasticsearch ILM 故障排除:常见问题及修复

作者:来自 Elastic Stef Nestor

大家好!我们的 Elasticsearch 团队正在不断改进我们的索引生命周期管理 (index Lifecycle Management - ILM) 功能。当我第一次加入 Elastic Support 时,我通过我们的使用 ILM 实现自动滚动教程快速上手。在帮助多个用户设置 ILM 后,我注意到升级主要来自少数配置问题。

在以下部分中,我想介绍常见的工单、诊断流程和常见错误恢复。显示的所有命令都可以通过 Kibana 的 Dev Tools 运行。

配置

ILM 后端进程默认运行,但需要用户配置才能影响索引。你可以通过 ILM 状态返回 operation_mode:RUNNING 来验证 ILM 是否正在运行。

常见问题 1:ILM 未运行

ILM 默认运行。如果你之前已停止 ILM,则需要重新启动 ILM。

ILM 设置为在六个连续阶段中保存数据。阶段 “new” 在索引创建时是隐含的,后面是五个可配置阶段。

常见问题 2:数据未删除

人们普遍误以为配置热阶段的滚动会自动删除数据。必须明确配置删除数据阶段才能删除数据。必须明确指定每个可配置阶段。

每个可配置阶段都有一组允许的连续操作。这些操作由你自行配置,但大多数用户至少启用设置优先级、滚动和删除操作。可以通过 Kibana UI 或 Elasticsearch API 配置策略和操作。我经常看到并使用以下策略(可从 “Get ILM Policy” 访问):

GET _ilm/policy/INDEX_POLICY_NAME
{"policy": {"phases": {"hot": {"actions": {"rollover": {"max_age": "30d","max_size": "50gb"},"set_priority": {"priority": 100}},"min_age": "0ms"},"warm": {"min_age": "7d","actions": {"set_priority": {"priority": 50},"shrink": {"number_of_shards": 1},"forcemerge": {"max_num_segments": 1}}},"delete": {"min_age": "365d","actions": {"delete": {}}}}}
}

此策略(policy)指示系统立即将数据发送至 hot 阶段,创建新索引并每 30 天或 50 GB(以先到者为准)滚动更新以前的数据。滚动更新七天后,索引将不再需要文档更新,从而进入 warm 阶段。此时,该策略附加了以下两个操作:shrink(减少分片数量)和 force merge(压缩数据并擦除已删除的记录)。数据将一直处于 warm 阶段,直到滚动更新 365 天后被删除。

常见问题 3:min_age 计算说明

在与客户合作时,我发现关于 min_age 的工作方式常常存在困惑。min_age 必须在后续阶段之间递增。如果使用了 rollover(滚动),min_age 是根据滚动日期计算的。这是因为滚动操作会生成一个新索引,并使用新索引的创建日期进行计算。否则,min_age 将基于原始索引的创建日期进行计算。

一旦创建策略,就需要明确附加到索引才能生效。

常见问题 4:明确将策略连接到索引

为策略和索引赋予相同的名称并不会将两者联系在一起。例如,将你的策略​​命名为 filebeat-* 并不会将其连接到你的 filebeat-* 索引;你仍然需要明确将索引附加到策略。

你可以手动将策略附加到现有索引,但通常你会设置模板以在索引通过 Beat YAML 配置文件(例如:Filebeat 和 Metricbeat)或通过索引模板(index template)配置创建时自动附加策略

PUT _index_template/TEMPLATE_NAME
{"index_patterns": ["INDEX_NAME-*"],"template": {"settings": {"number_of_shards": 1,"number_of_replicas": 1,"index.lifecycle.name": "POLICY_NAME","index.lifecycle.rollover_alias": "INDEX_ALIAS"}}
}

你还可以通过 Kibana UI 配置索引模板。越来越多的用户正在转向数据流,它可以自动为你处理这些配置。

常见问题 5:手动管理现有索引

新策略不会自动应用于任何现有索引。索引模板(Index templates)可以附加策略,但模板仅在创建索引时应用。如果你已更新索引模板以自动附加策略和别名,它将在未来应用,但你需要手动将策略附加到任何现有索引。

你可以通过检索索引设置(index settings)来检查当前附加到索引的策略

GET INDEX_NAME-000001/_settings?filter_path=*.settings.index.lifecycle
{"INDEX_NAME-000001" : {"settings" : {"index" : {"lifecycle" : {"name" : "INDEX_POLICY_NAME","rollover_alias" : "INDEX_ALIAS"}}}}
}

常见问题 6:配置错误导致错误

如果这些为 NULL 或配置错误,你将遇到滚动操作错误。这些是我见过的最常见的 ILM 错误,我们将在下面介绍,因为它们取决于用户配置先决条件,而不仅仅是后端系统处理。你可以考虑使用不需要配置滚动别名的数据流(Data Streams)。

策略更新仅存储最新版本。

常见问题 7:仅存储最新的策略版本

用户无法恢复到之前的策略版本,一旦策略被覆盖就无法找回。每次发送的策略 PUT 请求都会创建或完全覆盖之前的版本,而不会部分更新策略的 JSON。

为了在操作切换时保持一致性,索引会将当前正在执行的策略阶段缓存到索引的元数据 phase_execution 中。通过检查 ILM 的 explain 输出,可以查看缓存的策略版本,以及它正在应用于哪个索引、处于哪个阶段、执行哪个操作或步骤。

GET INDEX_NAME-000001/_ilm/explain
{"indices": {"INDEX_NAME-000001": {"index": "INDEX_NAME-000001","managed": true,"policy": "INDEX_POLICY_NAME","lifecycle_date_millis": 1538475653281,"lifecycle_date": "2021-06-01T13:45:21.981Z","age": "25.14s","phase": "hot","phase_time_millis": 1538475653317,"phase_time": "2021-06-01T13:45:22.577Z","action": "rollover","action_time_millis": 1538475653317,"action_time": "2021-06-01T13:45:22.577Z","step": "attempt-rollover","step_time_millis": 1538475653317,"step_time": "2021-06-01T13:45:22.577Z","phase_execution": {"policy": "my_lifecycle3","phase_definition": {"min_age": "0ms","actions": {"rollover": {"max_age": "30m"}}},"version": 2,"modified_date": "2021-06-01T11:00:11.576Z","modified_date_in_millis": 1539609701576}}}
}

phase_execution 显示该策略缓存了其 hot 阶段内容,以便每 30 分钟滚动到新索引。如果将来更新附加策略,则策略缓存将在安全的情况下更新为策略的最新版本。

常见问题 8:策略版本安全更新

在索引进入策略的下一阶段之前,某些策略版本更新不会反映在索引的 phase_execution 缓存中。这是为了保护你的数据,并且一切都按预期运行。

有时用户在继承新系统后会升级工单。通常这是因为

  • 他们需要在业务/网络需求发生变化时启用或禁用数据层。
  • 他们新设置的 Elasticsearch 用户在编辑策略时权限不足,导致策略开始失败。

默认情况下,你需要在集群上拥有 manage_ilm 权限并在相关索引上进行管理,例如通过 super_user 角色。

常见问题 9:ILM 以上次编辑用户的身份运行

ILM 以上次编辑用户的身份执行操作,其权限与上次编辑策略时的用户相同。这些错误将显示为 action [x] is unauthorized for user [y]。以下是 Elastic Discuss 问题的示例。

诊断

如果 ILM explain 报告 ERROR 步骤,你可能需要解决问题才能让 ILM 继续运行。以下是最常见的错误及其解决方法

  • rollover alias [x] can point to multiple indices, found duplicated alias [x] in index template [z]
    • 索引模板定义目标滚动别名。该别名只需要在第一个索引上引导一次,因为滚动操作将管理将别名滚动到下一个索引。你可以在索引模板中指定其他别名,但不能指定用于滚动的别名。

  • index.lifecycle.rollover_alias [x] does not point to index [y]
    • ​​​​​​​你需要检查索引设置 index.lifecycle.rollover_alias。索引指向错误的别名,或者别名不存在。你可以通过运行 Get Aliases 来检查后者。这是一个 Elastic Discuss 问题示例。你可以考虑使用 Data Streams 来处理这个问题。

  • setting [index.lifecycle.rollover_alias] for index [y] is empty or not defined
    • ​​​​​​​你的索引设置 index.lifecycle.rollover_alias 为空,无法使滚动生效。请更新索引设置以附加滚动别名来解决。以下是 Elastic Discuss 问题示例。你可以考虑使用 Data Streams 来处理此问题。

  • alias [x] has more than one write index [y,z]
    • ​​​​​​​运行 “Get Aliases” 时,你会注意到两个索引被标记为 is_write_index:true,但每个别名只能有一个索引。你需要通过 Aliases API 在其中一个索引上切换 is_write_index:false。

  • index name [x] does not match pattern ^.*-\d+
    • 索引名称的正则表达式模式匹配是滚动生效的先决条件。用户最常忽略的问题是没有意识到索引名称需要以尾随数字结尾,例如 my-index-000001,而是只使用符合模式要求的 my-index。以下是 Elastic Discuss 问题示例。你可以考虑使用 Data Streams 来处理这个问题。

  • circuitBreakingException: [x] data too large, data for [y]
    • ​​​​​​​这表明集群资源已达到极限。请查看 Elasticsearch 管理和故障排除,以获得临时的系统缓解,以便继续进行 ILM 设置。

  • high disk watermark [x] exceeded on [y]
    • ​​​​​​​作为子集资源警告,这表明你的集群数据存储已达到极限。如果你尚未设置 hot 到 warm 节点 ILM 翻转,则通常会出现这种情况。你需要通过增加资源或删除不需要的索引或文档数据(或通过 delete_by_query)为你的集群腾出一些喘息空间。

系统将每十分钟自动重试失败的步骤,或者,一旦解决,你可以通过 Retry Policy Execution 手动触发重试

POST INDEX_NAME-000001/_ilm/retry

如果你想要暂时覆盖此间隔以进行测试,则需要更新集群设置以减少 indices.lifecycle.poll_interval。默认 ILM 集群设置如下

GET _cluster/settings?include_defaults=true&filter_path=*.indices.lifecycle*,*.xpack.ilm*
{ "defaults" : {"indices.lifecycle.history_index_enabled" : "true","indices.lifecycle.poll_interval" : "10m","indices.lifecycle.step.master_timeout" : "30s"}
}

如果策略配置正确且没有报告错误但你的操作没有进展,你需要调查它是否正在等待先决条件运行。

常见问题 10:良好的集群维护有助于 ILM 平稳运行

未分配(UNASSIGNED)分片可能导致策略执行无法继续,因为 ILM 在执行某些操作时会等待索引达到 “绿色” 状态。例如,迁移操作(migrate action)可能因此受阻。

由于我们已经检查了当前状态配置,并开始转向时间序列调查,因此接下来将查看 ILM 历史记录。ILM 历史记录默认通过 Elasticsearch 集群设置 indices.lifecycle.history_index_enabled:true 启用。根据部署版本的不同,可以通过在 Kibana 中创建 .ds-ilm-history-*ilm-history-* 系统索引的索引模式来查看数据。在 Kibana Discover 中,我更喜欢通过切换表格列来浏览创建的索引模式,如:[index, policy, state.phase, state.action, state.step, success]。

如果 ILM 历史记录无法提供足够的详细信息,可以通过启用更详细的集群日志记录来获取更多信息。

PUT /_cluster/settings
{"transient": {"logger.org.elasticsearch.xpack.core.indexlifecycle": "TRACE","logger.org.elasticsearch.xpack.indexlifecycle": "TRACE"}
}

这非常繁重,只能暂时启用。对于本地集群,你可以在 Elasticsearch 日志中看到更详细的日志记录。对于 Elastic Cloud 部署,请参阅我的 Elastic Cloud 设置,了解如何启用和查看这些内容。

结论

我们已经介绍了 ILM 的常见问题、诊断流程和常见错误恢复。此时,如果你在解决问题时遇到困难,请随时联系我们。我们在这里,很乐意为你提供帮助!你可以通过 Elastic Discuss、Elastic Community Slack、咨询、培训和支持与我们联系。

原文:Troubleshooting Elasticsearch ILM: Common issues and fixes | Elastic Blog

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VBA信息获取与处理第四个专题第二节:将工作表数据写入VBA数组

《VBA信息获取与处理》教程(版权10178984)是我推出第六套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。这部教程给大家讲解的内容有:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互…

C# 命名空间(Namespace)

文章目录 前言一、命名空间的定义与使用基础(一)定义语法与规则(二)调用命名空间内元素 二、using 关键字三、嵌套命名空间 前言 命名空间(Namespace)在于提供一种清晰、高效的方式,将一组名称与…

数字图像处理内容详解

1.对比度 最大亮度 / 最小亮度 2.邻域 m邻接:对于像素p和q,如果p和q四临接,或p和q八临接且两者的四邻域的交集为空 通路:如果俩点全部是K邻接(K代表4,8,m),则说明存在K…

流媒体之linux下离线部署FFmpeg 和 SRS

前言 用户对网络做了限制,只能访问指定的网址,和没网没啥区别,导致无法连接外网,无法获取安装包,还有一些编译需要的开源工具 用户需要用平台查看库房的海康摄像头实时监控,只能在库房里一台纯净的ubantu…

【鸿蒙生态崛起】开发者如何把握机遇,应对挑战,打造卓越应用体验?

文章目录 每日一句正能量前言鸿蒙简析鸿蒙生态的认知和了解鸿蒙生态的崛起分析 鸿蒙生态下开发时遇到的挑战开发工具不完善技术难度生态竞争抓住机遇、应对挑战 鸿蒙生态未来的发展趋势1. 全场景智慧生活的推动者2. 技术创新的引领者3. 开放合作的倡导者对鸿蒙生态和开发者的建…

MySQL 主从同步一致性详解

MySQL主从同步是一种数据复制技术,它允许数据从一个数据库服务器(主服务器)自动同步到一个或多个数据库服务器(从服务器)。这种技术主要用于实现读写分离、提升数据库性能、容灾恢复以及数据冗余备份等目的。下面将详细…

第30天:安全开发-JS 应用NodeJS 指南原型链污染Express 框架功能实现审计0

时间轴: 演示案例: 环境搭建-NodeJS-解析安装&库安装 功能实现-NodeJS-数据库&文件&执行 安全问题-NodeJS-注入&RCE&原型链 案例分析-NodeJS-CTF 题目&源码审计 开发指南-NodeJS-安全 SecGuide 项目、 环境搭建-NodeJ…

Linux:network:wireshark:IO图尖峰实例

从下图可以看出来,这个尖峰还是很明显,比平均值大出不少。这个图是之前发生问题时的一个例子,放到这里做为参考。 在看峰值的时候,需要注意,时间间隔单位,一秒的间隔和100毫秒的间隔看到的信息可能不一样,比如上图,按照100毫秒展示差距很大,平均不到200,峰值到了70…

MySQL——数据类型

一、常见的数据类型及分类 其中上述的数值类型包含了整形和浮点型,文本、二进制类型主要是字符串类型。 整数类型(Integer Types): TINYINT:范围为-128到127或0到255(无符号),用于…

在Docker中部署禅道,亲测可用

1、确保centos中已安装docker docker -v 2、启动docker systemctl start docker 3、可设置docker开机启动 systemctl enable docker.service 4、获取最新版禅道开源版镜像 docker pull idoop/zentao 5、运行镜像生成禅道容器【创建 /data/www /data/data 目录】 doc…

【CSS in Depth 2 精译_065】第四部分:CSS 视觉增强技术 + 第 11 章 颜色与对比概述 + 11.1 通过对比进行交流

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第四部分 视觉增强技术 ✔️【第 11 章 颜色与对比】 ✔️ 11.1 通过对比进行交流 ✔️ 11.1.1 模式的建立 ✔️11.1.2 还原设计稿 ✔️ 11.2 颜色的定义 文章目录 第四部分 视觉增强技术 Visual e…

中建海龙:科技创新引领建筑业革新,铸就行业影响力

在建筑业这个古老而又充满活力的行业中,中建海龙科技有限公司(以下简称“中建海龙”)凭借其卓越的科技实力和一系列荣誉奖项,正逐步确立其在建筑工业化领域的领导地位,并对整个行业产生了深远影响。 中建海龙自成立以来…

【CDH国产化替代案例】全面简化架构,降低成本,大幅提升数据处理效率

友情链接: 【数据处理效率提升实践】ArgoDB如何助力企业全面实现数据处理效率最大化?【最新案例】ArgoDB新功能之读写分离,助力某医药集团打造高效数据中心,消除传统方案的灵活性限制,确保响应时间的可预测性【指标查…

Electron + Vue 简单实现窗口程序(Windows)从零到一

前言 想做一个桌面应用程序,一直没有找到简单快速可上手的框架。刚好有点前端的底子,就发现了Electron。关于Electron的介绍,请移步 https://www.electronjs.org/ 查阅。 简单来说,引用官网的话,Electron是一个使用 …

Ansible 运维工具

安装 apt install ansible /etc/ansible/hosts , 指定密码或密钥访问分组机器 [k8s_masters] master0.c0.k8s.sb[k8s_nodes] node0.c0.k8s.sb node1.c0.k8s.sb[k8s:children] k8s_masters k8s_nodes[k8s_masters:vars] ansible_ssh_usersbadmin ansible_ssh_pass"***&q…

Leetcode经典题5--轮转数组

题目描述 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 输入输出示例 : 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右…

mac port 安装redis 并设置为系统服务 自定义配置方法

mac系统中,port 包管理工具比brew的速度快N倍,今天就给大家分享一下在macos系统中如何使用 port安装 redis数据库并配置为服务自动启动和自定义redis.conf配置的方法。 1. 安装redis sudo port install redis 2. 启动redis服务 sudo port load redis …

github仓库自动同步到gitee

Github Actions是Github推出的自动化CI/CD的功能,我们将使用Github Actions让Github仓库同步到Gitee 同步的原理是利用 SSH 公私钥配对的方式拉取 Github 仓库的代码并推送到 Gitee 仓库中,所以我们需要以下几个步骤 生成 SSH 公私钥添加公钥添加私钥配…

工业—使用Flink处理Kafka中的数据_ProduceRecord2

使用 Flink 消费 Kafka 中 ProduceRecord 主题的数据,统计在已经检验的产品中,各设备每 5 分钟 生产产品总数,将结果存入HBase 中的 gyflinkresult:Produce5minAgg 表, rowkey“

人工智能学习用的电脑安装cuda、torch、conda等软件,版本的选择以及多版本切换

接触人工智能的学习三个月了,每天与各种安装包作斗争,缺少依赖包、版本高了、版本低了、不兼容了、系统做一半从头再来了。。。这些都是常态。三个月把单位几台电脑折腾了不下几十次安装,是时候总结一下踩过的坑和积累的经验了。 以一个典型的…