最近在做 ElasticSearch 的信息(集群和节点)监控,特此稍微整理下学到的东西。这篇文章主要介绍集群的监控。

要监控哪些 ElasticSearch metrics

Elasticsearch 提供了大量的 Metric,可以帮助您检测到问题的迹象,在遇到节点不可用、out-of-memory、long garbage collection times 的时候采取相应措施。但是指标太多了,有时我们并不需要这么多,这就需要我们进行筛选。

集群健康

一个 Elasticsearch 集群至少包括一个节点和一个索引。或者它 可能有一百个数据节点、三个单独的主节点,以及一小打客户端节点——这些共同操作一千个索引(以及上万个分片)。

不管集群扩展到多大规模,你都会想要一个快速获取集群状态的途径。Cluster Health API 充当的就是这个角色。你可以把它想象成是在一万英尺的高度鸟瞰集群。它可以告诉你安心吧一切都好,或者警告你集群某个地方有问题。

让我们执行一下 cluster-health API 然后看看响应体是什么样子的:

GET _cluster/health

和 Elasticsearch 里其他 API 一样,cluster-health 会返回一个 JSON 响应。这对自动化和告警系统来说,非常便于解析。响应中包含了和你集群有关的一些关键信息:

{"cluster_name": "elasticsearch_zach","status": "green","timed_out": false,"number_of_nodes": 1,"number_of_data_nodes": 1,"active_primary_shards": 10,"active_shards": 10,"relocating_shards": 0,"initializing_shards": 0,"unassigned_shards": 0
}

响应信息中最重要的一块就是 status 字段。状态可能是下列三个值之一 :

status 含义
green 所有的主分片和副本分片都已分配。你的集群是 100% 可用的。
yellow 所有的主分片已经分片了,但至少还有一个副本是缺失的。不会有数据丢失,所以搜索结果依然是完整的。不过,你的高可用性在某种程度上被弱化。如果 更多的 分片消失,你就会丢数据了。把 yellow 想象成一个需要及时调查的警告。
red 至少一个主分片(以及它的全部副本)都在缺失中。这意味着你在缺少数据:搜索只能返回部分数据,而分配到这个分片上的写入请求会返回一个异常。
  • number_of_nodesnumber_of_data_nodes 这个命名完全是自描述的。
  • active_primary_shards 指出你集群中的主分片数量。这是涵盖了所有索引的汇总值。
  • active_shards 是涵盖了所有索引的所有分片的汇总值,即包括副本分片。
  • relocating_shards 显示当前正在从一个节点迁往其他节点的分片的数量。通常来说应该是 0,不过在 Elasticsearch 发现集群不太均衡时,该值会上涨。比如说:添加了一个新节点,或者下线了一个节点。
  • initializing_shards 是刚刚创建的分片的个数。比如,当你刚创建第一个索引,分片都会短暂的处于 initializing 状态。这通常会是一个临时事件,分片不应该长期停留在 initializing状态。你还可能在节点刚重启的时候看到 initializing 分片:当分片从磁盘上加载后,它们会从initializing 状态开始。
  • unassigned_shards 是已经在集群状态中存在的分片,但是实际在集群里又找不着。通常未分配分片的来源是未分配的副本。比如,一个有 5 分片和 1 副本的索引,在单节点集群上,就会有 5 个未分配副本分片。如果你的集群是 red 状态,也会长期保有未分配分片(因为缺少主分片)。

集群统计

集群统计信息包含 集群的分片数,文档数,存储空间,缓存信息,内存作用率,插件内容,文件系统内容,JVM 作用状况,系统 CPU,OS 信息,段信息。

查看全部统计信息命令:

curl -XGET 'http://localhost:9200/_cluster/stats?human&pretty'

返回 JSON 结果:

{"timestamp": 1459427693515,"cluster_name": "elasticsearch","status": "green","indices": {"count": 2,"shards": {"total": 10,"primaries": 10,"replication": 0,"index": {"shards": {"min": 5,"max": 5,"avg": 5},"primaries": {"min": 5,"max": 5,"avg": 5},"replication": {"min": 0,"max": 0,"avg": 0}}},"docs": {"count": 10,"deleted": 0},"store": {"size": "16.2kb","size_in_bytes": 16684,"throttle_time": "0s","throttle_time_in_millis": 0},"fielddata": {"memory_size": "0b","memory_size_in_bytes": 0,"evictions": 0},"query_cache": {"memory_size": "0b","memory_size_in_bytes": 0,"total_count": 0,"hit_count": 0,"miss_count": 0,"cache_size": 0,"cache_count": 0,"evictions": 0},"completion": {"size": "0b","size_in_bytes": 0},"segments": {"count": 4,"memory": "8.6kb","memory_in_bytes": 8898,"terms_memory": "6.3kb","terms_memory_in_bytes": 6522,"stored_fields_memory": "1.2kb","stored_fields_memory_in_bytes": 1248,"term_vectors_memory": "0b","term_vectors_memory_in_bytes": 0,"norms_memory": "384b","norms_memory_in_bytes": 384,"doc_values_memory": "744b","doc_values_memory_in_bytes": 744,"index_writer_memory": "0b","index_writer_memory_in_bytes": 0,"version_map_memory": "0b","version_map_memory_in_bytes": 0,"fixed_bit_set": "0b","fixed_bit_set_memory_in_bytes": 0,"file_sizes": {}},"percolator": {"num_queries": 0}},"nodes": {"count": {"total": 1,"data": 1,"coordinating_only": 0,"master": 1,"ingest": 1},"versions": ["5.6.3"],"os": {"available_processors": 8,"allocated_processors": 8,"names": [{"name": "Mac OS X","count": 1}],"mem" : {"total" : "16gb","total_in_bytes" : 17179869184,"free" : "78.1mb","free_in_bytes" : 81960960,"used" : "15.9gb","used_in_bytes" : 17097908224,"free_percent" : 0,"used_percent" : 100}},"process": {"cpu": {"percent": 9},"open_file_descriptors": {"min": 268,"max": 268,"avg": 268}},"jvm": {"max_uptime": "13.7s","max_uptime_in_millis": 13737,"versions": [{"version": "1.8.0_74","vm_name": "Java HotSpot(TM) 64-Bit Server VM","vm_version": "25.74-b02","vm_vendor": "Oracle Corporation","count": 1}],"mem": {"heap_used": "57.5mb","heap_used_in_bytes": 60312664,"heap_max": "989.8mb","heap_max_in_bytes": 1037959168},"threads": 90},"fs": {"total": "200.6gb","total_in_bytes": 215429193728,"free": "32.6gb","free_in_bytes": 35064553472,"available": "32.4gb","available_in_bytes": 34802409472},"plugins": [{"name": "analysis-icu","version": "5.6.3","description": "The ICU Analysis plugin integrates Lucene ICU module into elasticsearch, adding ICU relates analysis components.","classname": "org.elasticsearch.plugin.analysis.icu.AnalysisICUPlugin","has_native_controller": false},{"name": "ingest-geoip","version": "5.6.3","description": "Ingest processor that uses looksup geo data based on ip adresses using the Maxmind geo database","classname": "org.elasticsearch.ingest.geoip.IngestGeoIpPlugin","has_native_controller": false},{"name": "ingest-user-agent","version": "5.6.3","description": "Ingest processor that extracts information from a user agent","classname": "org.elasticsearch.ingest.useragent.IngestUserAgentPlugin","has_native_controller": false}]}
}

内存使用和 GC 指标

在运行 Elasticsearch 时,内存是您要密切监控的关键资源之一。 Elasticsearch 和 Lucene 以两种方式利用节点上的所有可用 RAM:JVM heap 和文件系统缓存。 Elasticsearch 运行在Java虚拟机(JVM)中,这意味着JVM垃圾回收的持续时间和频率将成为其他重要的监控领域。

上面返回的 JSON监控的指标有我个人觉得有这些:

  • nodes.successful
  • nodes.failed
  • nodes.total
  • nodes.mem.used_percent
  • nodes.process.cpu.percent
  • nodes.jvm.mem.heap_used

可以看到 JSON 文件是很复杂的,如果从这复杂的 JSON 中获取到对应的指标(key)的值呢,这里请看文章 :JsonPath —— JSON 解析神器

最后

这里主要讲下 ES 集群的一些监控信息,有些监控指标是个人觉得需要监控的,但是具体情况还是得看需求了。下篇文章主要讲节点的监控信息。转载请注明地址:http://www.54tianzhisheng.cn/2017/10/15/ElasticSearch-cluster-health-metrics/

参考资料

1、How to monitor Elasticsearch performance

2、ElasticSearch 性能监控

3、cluster-health

4、cluster-stats

相关阅读

1、Elasticsearch 默认分词器和中分分词器之间的比较及使用方法

2、全文搜索引擎 Elasticsearch 集群搭建入门教程

ElasticSearch 集群监控相关推荐

  1. 对K8s集群外部ElasticSearch集群监控实战

    一.监控ElasticSearch集群 实际使用中仅使用资源监控和异常报警是远远不够的,还需要监控各类基础组件,如ElasticSearch.RabbitMQ等,并根据实际使用情况,对资源监控进行分类 ...

  2. Elasticsearch集群监控指标学习

    学习Elasticsearch有一段时间了,参考网上的一些资料,对于Elasticsearch集群状态一些重要监控指标数据在此进行小结,以加深理解. Elasticsearch集群监控状态指标分三个级 ...

  3. 使用容器和Elasticsearch集群对Twitter进行监控

    介绍 Elasticsearch是ELK(Elasticsearch/Logstash/Kibana)的基石.在这篇文章中,我们将使用Rancher Catalog来部署stack,并将它用于追踪Tw ...

  4. 发布一个免费的 Elasticsearch 多集群监控和管理平台 - 极限数据平台

    随着单个 Elasticsearch 集群规模的越来越大,大家要么在拆集群的路上,要么是已经是多套集群了, 据路边社消息,一个公司超过5个集群的情况已经变得非常普遍,而管理多个集群着实是有点痛苦,比如 ...

  5. Elasticsearch 用Monitoring和Alerting监控Elasticsearch集群

    文章目录 1. X-Pack Monitoring 2. 配置 Monitoring 3. Overall 4. Nodes 5. Watcher for Alerting 5.1 创建阈值告警 5. ...

  6. ELK教程1:ElasticSearch集群的部署

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 在分布式系统中,应用数量众多,应用调用链复杂,常常使用ELK作为日志收集.分析和展示的组件.本 ...

  7. 升腾威讯怎么恢复集群_PB级大规模Elasticsearch集群运维与调优实践

    导语 | 腾讯云Elasticsearch 被广泛应用于日志实时分析.结构化数据分析.全文检索等场景中,本文将以情景植入的方式,向大家介绍与腾讯云客户合作过程中遇到的各种典型问题,以及相应的解决思路与 ...

  8. 【Elastic Stack学习】ELK日志分析平台(一)ELK简介、ElasticSearch集群

    * ELK简介: ELK是Elasticsearch . Logstash.Kibana三个开源软件的缩写.ELK Stack 5.0版本之后新增Beats工具,因此,ELK Stack也改名为Ela ...

  9. 六,搭建elasticsearch集群搭建

    @Author : By Runsen @Date : 2020/6/12 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘 ...

最新文章

  1. 2022-2028年中国微藻行业市场调查研究及前瞻分析报告
  2. SpringBoot (三) :SpringBoot使用Freemarker模板引擎渲染web视图
  3. [TJOI2016][HEOI2016]排序
  4. 学python最好的方式-你们都是怎么学 Python 的?
  5. 中小企业ERP快速实施的八大准则
  6. java源码生成jar可执行文件
  7. loss=nan解决办法
  8. k8s之pod管理(控制器)
  9. 量子力学问题matlab求解,一个关于量子力学中的matlab的问题
  10. forager有多少个机器人_诠视科技:VSLAM技术进展让移动机器人自主行驶有了更广阔的空间...
  11. 计算机的新技术未来发展趋势论文,计算机最新技术发展趋势毕业论文
  12. 用银行卡号查相应的归属银行,卡种类
  13. 列表解析式,生成表达式
  14. java无法验证证书_java – 如何解决“证书无效且无法用于验证此网站的身份”错误?...
  15. [C/C++11]_[初级]_[如何转换带井号的#十六进制颜色字符串到数值]
  16. 风影ASP.NET基础教学 6用户控件
  17. python math ceil_python中math.ceil什么意思
  18. 【东方博宜】【基础】1878--哥德巴赫猜想
  19. ubuntu18.04 mercury 水晶无线网卡驱动安装以及ap模式开启(开机自动启动)
  20. LeetCode 71~75

热门文章

  1. lua io.read()
  2. [转载]Windows 2012 R2安装SharePoint 2013 手动安装工具软件
  3. (林雷看来13):功能优先,发展和重建同步,业绩后
  4. Cass环境下光标无显示
  5. PHP多次调用Mysql存储过程报错解决办法
  6. BroadcastReceiver广播
  7. H3C 路由器 与 CISCO 路由器在配置上的差别
  8. QEMU, KVM, QEMU-KVM 和 Goldfish
  9. Android-- SharedPreferences数据存储XML文件的方法
  10. docker之快速部署gogs git