阿里云Elasticsearch 智能化运维实践

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 背景   Elasticsearch作为一个开箱即用的搜索引擎,其丰富的功能和极低的使用门槛吸引着越来越多的公司和用户选择它作为搜索和数据分析的工具。用户在运维Elasticsearch集群时往往会遇到很多难题,具体来说有下面列举的几点: 使用方式往往比较粗糙,默认的设置并不适合每一个集群和业务,非精细化的设计将会极大的增加集群隐患; 集群出现问题,无法及时定位原因、寻找解决方案,低效的沟通或者解决问题的方式可能会使得问题变得愈发严重; ES提供的监控指标繁杂,指标多,意义不明确,需要一定的专业知识才可以理解,缺乏全局视角; 此外,集群潜在的异常无法发现,更不能及时规避风险。

背景

  Elasticsearch作为一个开箱即用的搜索引擎,其丰富的功能和极低的使用门槛吸引着越来越多的公司和用户选择它作为搜索和数据分析的工具。用户在运维Elasticsearch集群时往往会遇到很多难题,具体来说有下面列举的几点:

  • 使用方式往往比较粗糙,默认的设置并不适合每一个集群和业务,非精细化的设计将会极大的增加集群隐患;
  • 集群出现问题,无法及时定位原因、寻找解决方案,低效的沟通或者解决问题的方式可能会使得问题变得愈发严重;
  • ES提供的监控指标繁杂,指标多,意义不明确,需要一定的专业知识才可以理解,缺乏全局视角;
  • 此外,集群潜在的异常无法发现,更不能及时规避风险。

  随着越来越多的用户选择使用阿里云ES服务来支持搜索和分析业务,上述这些问题越发明显,用户和实例数量的快速增长,让我们没有太多的精力去逐一对接所有用户的问题,这无形中大大降低了我们和用户双方的效率。基于阿里云ES的智能运维系统EYou正是为了解决上面问题才出现的,它用来帮助用户自主诊断阿里云ES实例健康状况,探测潜在风险并提供解决方案。

EYou

总体概述

  首先以医院作为类比可能会更容易理解EYou的设计思路。
当病人生病就医时,会去医院找到对应科室的医生,医生通过询问,化验等手段收集信息后然后根据自己的专业知识去诊断病因,并寻求治疗方案。而当病情严重的时候则可能需要多个科室的医生来综合治疗。而人们在日常并未感觉身体不适的时候,同样可以去体检中心体检,以便及时发现可能存在的问题,通过保持良好的生活习惯来预防病情或者尽早治疗以免病情严重。
EYou的核心思想和上述就医流程类似,通过专家经验和集群数据的双重驱动来诊断集群状况,先收集数据(化验,询问)然后使用专业知识(经验)来找到问题的原因或者提前发现问题(体检),给出合理的解决方案。希望成为最了解ES集群的存在,可以在全局视角判断集群的运行状况,也可以在日常的时候引导用户使用规范;可以在集群出现问题时查找原因,也可以发现集群的潜在风险。

系统架构
7e01e6c8bfcf021bb65441931d38827d0f5cd583

EYou整体上分为5个部分:

  1. 数据采集,数据采集模块是专门收集EYou系统所需要的各类信息。

    • 目标ES集群的基本配置信息,包括settings,mapping,status,shard,segment等等;
    • Shuttle,shuttle是阿里云ES集群的调度服务,EYou在这里获得集群的资源和生命周期等信息;
    • Log,我们有一个专门用于收集ES各类日志的logcenter,它可以提供集群的异常日志,gc日志等,另外EYou会使用logcenter做一部分的机器学习任务以及全局统计信息;
    • Metric,metric包括机器指标(CPU使用率,load大小等)和ES服务指标(latency,QPS等)。
  2. 数据处理,数据处理模块用于对采集到的数据加工整理。由于采集到的原始数据多且零散,所以很多无法被上层模块直接使用,为了屏蔽数据的复杂性,数据处理模块会对数据加工以提供更友好的数据。包括查询语句的模板归一,机器学习结果的输出,QPS,latency等指标的二次聚合计算。

  3. 诊断分析层,按照规则判断某类指标是否有异常。这里最核心的是诊断规则,结合积累经验和集群数据利用Hawkeye平台逐项检测集群状况,发现异常点并给出解决方案。按照数据和Action(解决方案),在大类上分为5类:

    • 容量管理,这里的容量管理包括磁盘,内存,CPU,网络等几乎所有与硬件资源相关的诊断;
    • 集群配置管理,细分为全局配置(clusterSettings,集群拓扑等)和节点配置(与yml相关的全部);
    • 索引管理,索引的mapping,settings(包括索引切分,冷热索引,无效字段)等一切与索引操作相关的诊断
    • 查询优化,~
    • 版本管理,ES的版本迭代很快,每个版本都会解决老的bug并引入新的特性,一些特定问题可以通过版本升级解决,比如6.x版本failover的效率提升。
  4. 诊断层,诊断层面向用户问题,如果说诊断分析层是医院的科室,那么诊断层就是导诊台,根据病情提供科室建议,即管理用户问题和诊断分析之间的映射。

  5. 接入层,提供EYou诊断结果,目前可通过web控制台和钉钉机器人接入,并且提供了API供其他系统调用。

  上述架构是经过数次演进而来的,可以看到将诊断分析和实际问题区分开,使得它们各自都可以更方便的扩展。而面向问题出发对用户而言也会更加直接友好,也便于我们形成效果反馈的闭环驱动EYou的优化。

诊断分析

  EYou的核心是诊断分析模块,而诊断分析则是以“诊断项”为核心来帮助用户运维其集群。诊断项由数据输入和诊断规则组成,是可以直接反馈ES集群某一个状态或行为是否合理的指标。通过收集云上用户的问题,寻找普遍存在或影响最大的问题,重点解决。不停的更新迭代逐步完善EYou的诊断范围和问题,丰富其诊断项。目前,EYou已经覆盖到集群、节点、索引三个维度超过20个诊断项,可帮助用户发现集群异常、资源以及使用规范、日常运维等多个方面的问题。
image.png

  每一个诊断项都有其特定的逻辑策略,这里以集群颜色异常诊断,shard合理性诊断,存储资源诊断这3个出现频率较高的诊断项为例介绍一下。
1. 集群颜色异常诊断
ES会通过红黄绿3种颜色来表示其数据分片是否丢失。ES内部的decider模块决定了数据分片是否可以被加载到某个节点上,共包含如下所示的14种decider。颜色诊断就是通过decider的结果来找到异常原因和解决方案。EYou通过ES提供的 _cluster/allocation/explain API 获得类似于下面的decider信息。

// decider
awareness  cluster_rebalance  concurrent_rebalance
disk_threshold  enable  filter  max_retry
node_version  rebalance_only_when_active
replica_after_primary_active  same_shard
shards_limit  snapshot_in_progress  throttling
// node_allocation_decisions.deciders.decider
{
    "index": "ft2",
    ...
    "allocate_explanation": "cannot allocate because allocation is not permitted to any of the nodes",
    "node_allocation_decisions": [
        {...},
        {
            "node_id": "RgmxR4vXSEuK32Dtnn8dyw",
            "node_attributes": {...},
            "node_decision": "no",
            "deciders": [
                {
                    "decider": "same_shard",
                    "decision": "NO",
                    "explanation": "the shard cannot be allocated to the same node on which a copy of the shard already exists [[ft2][4], node[RgmxR4vXSEuK32Dtnn8dyw], [R], s[STARTED], a[id=F5NuAQQhRlCid2PoQu8IdA]]"
                },
                {
                    "decider": "disk_threshold",
                    "decision": "NO",
                    "explanation": "allocating the shard to this node will bring the node above the high watermark cluster setting [cluster.routing.allocation.disk.watermark.high=90%] and cause it to use more disk space than the maximum allowed [90.0%] (free space after shard added: [8.240863369353132%])"
                }
            ]
        },
        {...}
    ]
}

  比如当decider触发disk_threshold时,诊断策略将会分析用户的磁盘容量和实际数据量,计算出合适的磁盘容量;当触发enable,shards_limt等配置相关的decider时,将会检查集群配置,并给出正常的配置方式。通过这种方式用户可以更直观的了解到集群异常原因,也可以轻松的找到解决方案。

2. shard合理性诊断
计算索引shard的个数是创建索引时最重要的一个环节,shard的合理性不仅仅会影响索引读写的性能,还可能会对系统负载造成较大的影响。然而很多用户在创建索引会直接选择ES的默认配置,这种方式固然简单,但默认的设置并不适合每一个集群和业务,不合理的shard将大大增加集群隐患。比如以下3种常见的case:

  • 一个4节点的集群,ES默认的5个shard势必会导致其中一个节点会比其它3个节点多出一倍的数据量和访问流量,当请求增加时,该集群会大概率出现单点瓶颈。
  • 一个1TB大小的索引,分配了5个shard,单shard数据达到200G,这绝对会大大降低读写性能,并且在集群管理上会更加麻烦,比如后续可能无法通过添加节点的方式来提高性能。
  • 一个1GB大小的索引,分配了5个shard,这在一定程度上就是资源浪费,会增加ES对meta信息的维护,monitor的监控读写的成本。

  shard合理性诊断就是为了解决上述这些问题。它会从索引的shard个数和节点的shard平衡两个方面去诊断。
在索引层面,会去诊断单个索引的shard个数和大小是否合理。为了简化模型,它遵循一个原则,数据量才能真正决定shard个数的合理范围,而节点资源仅仅是对结果进行微调。根据索引的数据大小,EYou将索引分为小索引,中索引,大索引,超大索引4类,每一个分类的索引都设置了单shard大小的上下限和少量的溢出阈值。在计算出合理shard的区间后,首先会判断索引当前shard个数是否需要调整,然后会根据当前集群的节点资源(规格,节点数)来缩小选择区间,尽可能去匹配节点数并减少成本和资源的浪费。同时EYou会根据日常支持的客户情况,不停的改进上述模型,调整其阈值和策略。
在节点层面,会去诊断节点间的数据负载是否一致。ES自身的平衡策略主要从磁盘空间,主副shard分布,全局shard个数,分配意识等维度去决定shard的分布,这个策略在大部分情况已经可以做到很好了。但是它并没有意识到不同索引不同shard的实际请求流量和计算资源的消耗是不同的,那么势必会出现节点间负载不同的情况,尤其是索引较多的集群中。当数据节点负载偏差较大时,一方面会影响到集群的稳定性,另一方面会极大的浪费集群资源。EYou在发现集群数据节点负载偏差较大时,会通过索引QPS、query/fetch/index/refresh/flush等指标计算出资源消耗最大和最小的shard,然后使用ES 的_cluster/reroute 去调整shard分布。当然这里后续可以继续改进的是从全局层面上使用ES平衡策略来改造装箱算法,从而在整个集群层面更大范围和精细的调整优化。

3. 存储资源诊断
存储资源是否充足是影响ES集群的重要因素之一。由于ES的自动平衡策略,各个节点上的数据分布大体是均匀的,这意味着当一个节点空间不足时很难有其它空闲节点供其选择。所以提前发现容量问题及时扩容是可以大大降低分片丢失风险的。
EYou会根据当前集群中索引的主shard大小,并利用容量管理模型计算出集群安全的磁盘容量。容量管理模型是通过对线上集群的统计分析以及实际经验构建的,在后面EYou会引入索引的分词方式,编码压缩方式,mapping设置等因子进行更精确的计算。
事实上扩磁盘时可以选择加节点,也可以在单节点上扩容,那么如何抉择成为了需要考虑的事情。EYou会通过对集群规格,使用场景,集群负载,磁盘大小等指标的计算,给出最终扩容建议,包括单节点扩容,增加新节点,同时增加节点和单节点容量等3种方案。在上面的一些计算环节,EYou会简化某些因素,这样在大大降低我们的决策和计算成本的同时也可以保证至少会得到一个次优结果。

  其实可以看到,不同的诊断项之间是存在一定的关联性的,比如集群颜色诊断是可以和存储资源诊断建立联系的。最初我们也尝试去寻找一种办法去建立诊断项之间的DAG,但事实上这张图会很复杂,毕竟任何一个系统内部的指标,配置等都不是孤立的。所以后面我们改变了思路,诊断项之间相互独立,并不试图去作为其它项的输入因子,而是在最上层通过具体的问题去建立关系,这也是我们后面设计调整的主要思想之一。

实际案例

  目前EYou已经提供给技术支持和值班同学使用,并即将产品化提供给更多的用户使用。它通过报告的方式将结果告知用户,可以通过控制台和钉钉机器人接入。


1537430738861-2ad7d95e-4c7a-4c98-b9dd-71 1537430826954-7c35605d-c8ea-416a-8029-b7

  上述报告截图是一个实际的值班问题。用户集群异常变成红色,那么通过EYou值班同学可以很直接的看到,是因为磁盘容量不足导致了数据分片丢失,并且建议用户增加集群的磁盘总容量到9000G,具体的扩容策略是增加数据节点到5个,并且单机扩容到1.8T。下面的这组截图是在用户的集群负载较高时EYou得出的结论,发现了其频繁变更状态,shard不合理,负载不均衡等问题,并分别给出了修改建议。

image.png

总结&展望

  EYou目前已经解决了用户的一部分问题,尤其是在容量管理方面取得了一个不错的开端。但可以看到对于整个ES运维来说也只是刚刚起步,在未来有更多的事情要做。ES作为一个分布式的搜索系统,从硬件(磁盘性能,网络开销,计算资源)到软件(搜索引擎),从架构(分布式系统)到使用方式(参数调优)等很多方面都会影响到其使用,而持续不断的探索优化ES集群,帮助用户更高效的解决问题正是EYou的本能。在未来我们将会做以下方面的尝试:

  • 首先我们会持续优化每一个诊断策略,使结果更精确,引入更多的输入因子,做到集群的“千人千面”。
  • 其次我们会重点解决查询优化这类问题,这是我们目前在支持大客户时投入较多精力也是比较棘手的问题。
  • 然后我们希望可以将诊断结果赋能给其它更多的系统和场景,比如集群调度和生命周期的管理。
  • 最后一点也是我们正在规划中的事情,除了从内部技术支持同学获取EYou的使用反馈外,还要从用户侧直接得到效果评测数据。一个系统的,闭环的效果反馈机制可以帮助我们查漏补缺和持续优化演进EYou自身

阿里云Elasticsearch技术钉钉交流群
0ad8278ceab790e06a9edfb2453ac405e67e8f8a

2017年9月,阿里云基于开源Elasticsearch及商业版X-Pack插件,提供云上ELK服务,同时阿里云ES技术人员会分享解决云上业务痛点的案例实践,敬请期待!了解产品更多详情 https://data.aliyun.com/product/elasticsearch

阿里云Elasticsearch 1核2G首月免费试用,开始云上实践吧

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
26天前
|
SQL 存储 API
阿里云实时计算Flink的产品化思考与实践【下】
本文整理自阿里云高级产品专家黄鹏程和阿里云技术专家陈婧敏在 FFA 2023 平台建设专场中的分享。
110549 47
阿里云实时计算Flink的产品化思考与实践【下】
|
29天前
|
运维 监控 持续交付
构建高效自动化运维体系:策略与实践
在数字化时代,企业IT基础设施的管理和维护变得日益复杂。为了提高效率、降低错误率并快速响应市场变化,构建一个高效的自动化运维体系至关重要。本文将探讨自动化运维的核心策略,并通过实际案例分析展示如何将这些策略应用于日常管理中,以实现IT运维的优化。
17 0
|
8天前
|
运维 Kubernetes Devops
构建高效自动化运维体系:DevOps与容器技术融合实践
【4月更文挑战第15天】 在当今快速发展的信息技术时代,传统的IT运维模式已难以满足业务敏捷性的需求。本文旨在探讨如何通过整合DevOps理念和容器技术来构建一个高效的自动化运维体系。文章将详细阐述DevOps的核心原则、容器技术的基础知识,以及两者结合的优势。此外,文中还将分享一系列实践经验,包括持续集成/持续部署(CI/CD)流程的搭建、微服务架构的应用,以及监控和日志管理策略的优化,以期帮助企业实现快速、可靠且安全的软件交付过程。
|
9天前
|
人工智能 运维 监控
构建高效自动化运维体系的实践与思考
【4月更文挑战第14天】在数字化转型的浪潮中,自动化运维作为提升系统稳定性和效率的关键手段,受到了企业的广泛关注。本文将深入探讨如何构建一个高效的自动化运维体系,涵盖从基础设施的搭建到流程的优化等多个方面。通过分析当前自动化运维的挑战及解决方案,文章旨在为读者提供一套实用的策略框架,帮助企业实现运维工作的高效化、标准化和智能化。
|
14天前
|
运维 监控 Kubernetes
构建高效自动化运维体系的实践与思考
【4月更文挑战第8天】在数字化时代,IT基础设施的复杂性日益增加,传统的手工运维模式已经难以满足快速响应和高效率的需求。本文将探讨如何通过自动化工具和策略构建一个高效的自动化运维体系,旨在提高系统的稳定性、减少人为错误以及优化资源分配。文章首先分析了自动化运维的必要性,接着介绍了实现自动化的关键技术和工具,并通过案例分析展示自动化运维体系的实际效果。最后,对自动化运维的未来发展趋势进行了展望。
|
17天前
|
机器学习/深度学习 传感器 运维
提升数据中心效能:智能运维策略与实践
【4月更文挑战第6天】在数字化时代,数据中心作为企业信息架构的核心,其稳定性和效率直接影响到业务连续性和客户满意度。随着技术的进步,传统的数据中心运维模式已经不能满足现代高效、智能化的需求。本文将探讨如何通过智能运维(AIOps)策略,结合大数据分析和机器学习技术,实现数据中心的自动化管理、故障预测及快速响应,以提升整体效能并降低运营成本。
|
27天前
|
运维 监控 数据可视化
现代化运维管理系统的关键特性及实践应用
随着信息技术的迅猛发展,现代企业对于运维管理系统的需求日益增长。本文将探讨现代化运维管理系统的关键特性,以及在实际应用中的重要性和优势所在,帮助企业更好地理解和应用现代化运维管理系统。
15 2
|
29天前
|
运维 Prometheus 监控
构建高效稳定的云基础设施:自动化运维策略与实践
在动态的云计算环境中,自动化运维(AIOps)已成为确保服务稳定性和效率的关键。本文将深入探讨构建高效稳定云基础设施的策略,重点关注自动化工具的选择、配置管理的最佳实践、持续集成与持续部署(CI/CD)流程的优化,以及监控和日志分析的重要性。通过这些策略的实施,企业能够减少人为错误,提高响应速度,并最终实现运维效率的显著提升。
|
1月前
|
运维 监控 Devops
构建高效自动化运维体系:基于容器技术的持续集成与持续部署实践
在数字化转型的浪潮中,企业的IT基础设施和软件交付模式正经历着深刻的变革。传统的运维方式已难以满足快速迭代、灵活扩展的现代业务需求。本文将探讨如何通过容器技术实现高效的自动化运维体系,重点分析持续集成(CI)与持续部署(CD)的实践方法及其对企业运维效率的影响。通过引入微服务架构、容器编排、DevOps文化等概念,我们旨在为读者提供一套全面的自动化运维解决方案,以支持业务的敏捷性和可扩展性。
|
1月前
|
弹性计算 网络协议 关系型数据库
网络技术基础阿里云实验——企业级云上网络构建实践
实验地址:<https://developer.aliyun.com/adc/scenario/65e54c7876324bbe9e1fb18665719179> 本文档指导在阿里云上构建跨地域的网络环境,涉及杭州和北京两个地域。任务包括创建VPC、交换机、ECS实例,配置VPC对等连接,以及设置安全组和网络ACL规则以实现特定服务间的互访。例如,允许北京的研发服务器ECS-DEV访问杭州的文件服务器ECS-FS的SSH服务,ECS-FS访问ECS-WEB01的SSH服务,ECS-WEB01访问ECS-DB01的MySQL服务,并确保ECS-WEB03对外提供HTTP服务。

相关产品

  • 检索分析服务 Elasticsearch版