1、简述
ES监控的最主要做用是用于监控ES的服务是否正常运行,以及在出现问题时为提供解决问题提供依据。目前ES监控主要针对三个级别分别是:集群级别、节点级别和索引级别。
集群级别的监控主要是针对整个ES集群来讲,包括集群的健康情况、集群的状态等。
节点级别的监控主要是针对每一个ES实例的监控,其中包括每一个实例的查询索引指标和物理资源使用指标。
索引级别的监控主要是针对每一个索引来讲,主要包括每一个索引的性能指标,因为是针对每一个索引的监控,所以通常含有多个索引的ES集群其索引级别的监控数据是很是多的。node
针对这三类指标,首先集群级别的指标其性能指标较少,可是其每一个指标都很是重要,能够查看集群级别指标获取ES集群的运行状态。其次,节点级别的指标更多的用于问题的排查,当发现集群出现问题时更可能多的时候会直接定位到具体的ES实例,经过查看单台实例的资源使用状况或者其余指标进行问题排查。最后,索引级别的监控的应用场景主要是为应用提供监控,例如某个应用使用到的索引其查询速度变慢就能够经过索引级别的监控判断是不是因为索引建立时一些不合理设置引发的。api
2、集群的监控
集群的监控包括二个方面:集群的健康情况和集群的运行情况
一、集群的健康状态,经过api获取:GET _cluster/health?prettyjvm
GET _cluster/health?pretty { "cluster_name" : "lqbyz-es", "status" : "green", "timed_out" : false, "number_of_nodes" : 8, "number_of_data_nodes" : 4, "active_primary_shards" : 120, "active_shards" : 240, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 0, "delayed_unassigned_shards" : 0, "number_of_pending_tasks" : 0, "number_of_in_flight_fetch" : 0, "task_max_waiting_in_queue_millis" : 0, "active_shards_percent_as_number" : 100.0 } 关键指标说明: status:集群状态,分为green、yellow和red。 number_of_nodes/number_of_data_nodes:集群的节点数和数据节点数。 active_primary_shards:集群中全部活跃的主分片数。 active_shards:集群中全部活跃的分片数。 relocating_shards:当前节点迁往其余节点的分片数量,一般为0,当有节点加入或者退出时该值会增长。 initializing_shards:正在初始化的分片。 unassigned_shards:未分配的分片数,一般为0,当有某个节点的副本分片丢失该值就会增长。 number_of_pending_tasks:是指主节点建立索引并分配shards等任务,若是该指标数值一直未减少表明集群存在不稳定因素 active_shards_percent_as_number:集群分片健康度,活跃分片数占总分片数比例。 number_of_pending_tasks:pending task只能由主节点来进行处理,这些任务包括建立索引并将shards分配给节点
二、集群的情况信息
集群状态信息主要包含整个集群的一些统计信息,例如文档数、分片数、资源使用状况等。集群状态信息能够由如下api获取:GET _cluster/stats?prettyide
GET _cluster/stats?pretty { "_nodes" : { "total" : 8, "successful" : 8, "failed" : 0 }, "cluster_name" : "lqbyz-es", "cluster_uuid" : "nRAbFt8eS9m0VYO6YKEo4w", "timestamp" : 1601217640020, "status" : "green", "indices" : { "count" : 33, "shards" : { "total" : 240, "primaries" : 120, "replication" : 1.0, "index" : { "shards" : { "min" : 2, "max" : 44, "avg" : 7.2727272727272725 }, "primaries" : { "min" : 1, "max" : 22, "avg" : 3.6363636363636362 }, "replication" : { "min" : 1.0, "max" : 1.0, "avg" : 1.0 } } }, "docs" : { "count" : 12509216, "deleted" : 791784 }, "store" : { "size_in_bytes" : 11514579278 }, "fielddata" : { "memory_size_in_bytes" : 13464, "evictions" : 0 }, "query_cache" : { "memory_size_in_bytes" : 92728, "total_count" : 19768667, "hit_count" : 9227143, "miss_count" : 10541524, "cache_size" : 10, "cache_count" : 1509487, "evictions" : 1509477 }, "completion" : { "size_in_bytes" : 0 }, "segments" : { "count" : 986, "memory_in_bytes" : 48584598, "terms_memory_in_bytes" : 40039845, "stored_fields_memory_in_bytes" : 4349408, "term_vectors_memory_in_bytes" : 0, "norms_memory_in_bytes" : 1975936, "points_memory_in_bytes" : 1458889, "doc_values_memory_in_bytes" : 760520, "index_writer_memory_in_bytes" : 115607304, "version_map_memory_in_bytes" : 5522714, "fixed_bit_set_memory_in_bytes" : 744936, "max_unsafe_auto_id_timestamp" : 1601164805126, "file_sizes" : { } } }, "nodes" : { "count" : { "total" : 8, "data" : 4, "coordinating_only" : 1, "master" : 3, "ingest" : 1 }, "versions" : [ "7.2.1" ], "os" : { "available_processors" : 32, "allocated_processors" : 32, "names" : [ { "name" : "Linux", "count" : 8 } ], "pretty_names" : [ { "pretty_name" : "CentOS Linux 7 (Core)", "count" : 8 } ], "mem" : { "total_in_bytes" : 64806584320, "free_in_bytes" : 1384660992, "used_in_bytes" : 63421923328, "free_percent" : 2, "used_percent" : 98 } }, "process" : { "cpu" : { "percent" : 0 }, "open_file_descriptors" : { "min" : 393, "max" : 1069, "avg" : 608 } }, "jvm" : { "max_uptime_in_millis" : 7668445988, "versions" : [ { "version" : "12.0.1", "vm_name" : "OpenJDK 64-Bit Server VM", "vm_version" : "12.0.1+12", "vm_vendor" : "Oracle Corporation", "bundled_jdk" : true, "using_bundled_jdk" : true, "count" : 8 } ], "mem" : { "heap_used_in_bytes" : 8168965296, "heap_max_in_bytes" : 34080817152 }, "threads" : 447 }, "fs" : { "total_in_bytes" : 429287014400, "free_in_bytes" : 371347718144, "available_in_bytes" : 371347718144 }, "plugins" : [ ], "network_types" : { "transport_types" : { "security4" : 8 }, "http_types" : { "security4" : 8 } }, "discovery_types" : { "zen" : 8 }, "packaging_types" : [ { "flavor" : "default", "type" : "rpm", "count" : 8 } ] } } 关键指标说明: indices.count:索引总数。 indices.shards.total:分片总数。 indices.shards.primaries:主分片数量。 docs.count:文档总数。 store.size_in_bytes:数据总存储容量。 segments.count:段总数。 nodes.count.total:总节点数。 nodes.count.data:数据节点数。 nodes. process. cpu.percent:节点CPU使用率。 fs.total_in_bytes:文件系统使用总容量。 fs.free_in_bytes:文件系统剩余总容量。
3、节点监控
节点监控主要针对各个节点,有不少指标对于保证ES集群的稳定运行很是重要。下面对节点监控指标进行介绍。节点指标能够经过如下api获取:GET /_nodes/stats?prettyoop
GET /_nodes/stats?pretty { "_nodes" : { "total" : 8, "successful" : 8, "failed" : 0 }, "cluster_name" : "lqbyz-es", "nodes" : { } } 关键指标说明: name:节点名。 roles:节点角色。 indices.docs.count:索引文档数。 segments.count:段总数。 jvm.heap_used_percent:内存使用百分比。 thread_pool.{bulk, index, get, search}.{active, queue, rejected}:线程池的一些信息,包括bulk、index、get和search线程池,主要指标有active(激活)线程数,线程queue(队列)数和rejected(拒绝)线程数量。 如下一些指标是一个累加值,当节点重启以后会清零。 indices.indexing.index_total:索引文档数。 indices.indexing.index_time_in_millis:索引总耗时。 indices.get.total:get请求数。 indices.get.time_in_millis:get请求总耗时。 indices.search.query_total:search总请求数。 indices.search.query_time_in_millis:search请求总耗时。indices.search.fetch_total:fetch操做总数量。 indices.search.fetch_time_in_millis:fetch请求总耗时。 jvm.gc.collectors.young.collection_count:年轻代垃圾回收次数。 jvm.gc.collectors.young.collection_time_in_millis:年轻代垃圾回收总耗时。 jvm.gc.collectors.old.collection_count:老年代垃圾回收次数。 jvm.gc.collectors.old.collection_time_in_millis:老年代垃圾回收总耗时。
备注:须要计算的指标分为两类,分别为请求速率指标和请求处理延迟指标。
一、index_per_min:每分钟索引请求数量。计算公式以下:索引请求率=(index_total两次采集差值)/(系统时间差值(ms))×60000 (公式1)
二、indexAverge_per_min:索引请求处理延迟。计算公式以下:索引延迟=(index_time_in_millis两次采集差值)/(index_total两次采集差值) (公式2)
性能
get_per_min:每分钟get请求数量,计算公式如(公式1),更改相应参数。 getAverage_per_min:get请求处理延迟,计算公式如(公式2) ,更改相应参数。 merge_per_min:每分钟merge请求数量,计算公式如(公式1),更改相应参数。 mergeAverage_per_min:merge请求处理延迟,计算公式如(公式2) ,更改相应参数。 searchQuery_per_min:每分钟query请求数量,计算公式如(公式1),更改相应参数。 searchQueryAverage_per_min:query请求延迟,计算公式如(公式2) ,更改相应参数。 searchFetch_per_min:每分钟fetch请求数量,计算公式如(公式1),更改相应参数。 searchFetchAverage_per_min:fetch请求延迟,计算公式如(公式2) ,更改相应参数。 youngGc_per_min:每分钟young gc数量,计算公式如(公式1),更改相应参数。 youngGcAverage_per_min:young gc请求延迟,计算公式如(公式2) ,更改相应参数。 oldGc_per_min:每分钟old gc数量,计算公式如(公式1),更改相应参数。 oldGcAverage_per_min:old gc请求延迟,计算公式如(公式2) ,更改相应参数。
4、索引监控
索引监控指标注意针对单个索引,不过也能够经过"_all"对集群种全部索引进行监控,节点指标能够经过如下api获取:GET /_stats?prettyfetch
GET /_stats?pretty { "_shards" : { "total" : 240, "successful" : 240, "failed" : 0 }, "_all" : { "primaries" : { "docs" : { "count" : 12509216, "deleted" : 791784 }, "store" : { "size_in_bytes" : 5757248526 }, "indexing" : { "index_total" : 30588566, "index_time_in_millis" : 5143570, "index_current" : 0, "index_failed" : 0, "delete_total" : 12, "delete_time_in_millis" : 45, "delete_current" : 0, "noop_update_total" : 0, "is_throttled" : false, "throttle_time_in_millis" : 0 }, "get" : { "total" : 3243159, "time_in_millis" : 183757, "exists_total" : 3242977, "exists_time_in_millis" : 183751, "missing_total" : 182, "missing_time_in_millis" : 6, "current" : 0 }, "search" : { "open_contexts" : 0, "query_total" : 5597307, "query_time_in_millis" : 2410418, "query_current" : 0, "fetch_total" : 5596851, "fetch_time_in_millis" : 174601, "fetch_current" : 0, "scroll_total" : 473136, "scroll_time_in_millis" : 622565, "scroll_current" : 0, "suggest_total" : 0, "suggest_time_in_millis" : 0, "suggest_current" : 0 }, "merges" : { "current" : 0, "current_docs" : 0, "current_size_in_bytes" : 0, "total" : 373794, "total_time_in_millis" : 21892509, "total_docs" : 3054500557, "total_size_in_bytes" : 256727351490, "total_stopped_time_in_millis" : 0, "total_throttled_time_in_millis" : 130284, "total_auto_throttle_in_bytes" : 2465217352 }, "refresh" : { "total" : 3568062, "total_time_in_millis" : 42011140, "external_total" : 3567653, "external_total_time_in_millis" : 45420312, "listeners" : 0 }, "flush" : { "total" : 330, "periodic" : 35, "total_time_in_millis" : 303046 }, "warmer" : { "current" : 0, "total" : 3565888, "total_time_in_millis" : 109062 }, "query_cache" : { "memory_size_in_bytes" : 73942, "total_count" : 9882484, "hit_count" : 4610437, "miss_count" : 5272047, "cache_size" : 6, "cache_count" : 754539, "evictions" : 754533 }, "fielddata" : { "memory_size_in_bytes" : 6708, "evictions" : 0 }, "completion" : { "size_in_bytes" : 0 }, "segments" : { "count" : 490, "memory_in_bytes" : 24181791, "terms_memory_in_bytes" : 19931435, "stored_fields_memory_in_bytes" : 2162808, "term_vectors_memory_in_bytes" : 0, "norms_memory_in_bytes" : 981376, "points_memory_in_bytes" : 727948, "doc_values_memory_in_bytes" : 378224, "index_writer_memory_in_bytes" : 85756016, "version_map_memory_in_bytes" : 4231529, "fixed_bit_set_memory_in_bytes" : 367488, "max_unsafe_auto_id_timestamp" : -1, "file_sizes" : { } }, "translog" : { "operations" : 1137857, "size_in_bytes" : 1020867543, "uncommitted_operations" : 212059, "uncommitted_size_in_bytes" : 191463796, "earliest_last_modified_age" : 0 }, "request_cache" : { "memory_size_in_bytes" : 27059, "evictions" : 0, "hit_count" : 1469699, "miss_count" : 129 }, "recovery" : { "current_as_source" : 0, "current_as_target" : 0, "throttle_time_in_millis" : 161 } }, "total" : { "docs" : { "count" : 25020996, "deleted" : 1662102 }, "store" : { "size_in_bytes" : 11526213319 }, "indexing" : { "index_total" : 61246128, "index_time_in_millis" : 10347974, "index_current" : 0, "index_failed" : 0, "delete_total" : 30, "delete_time_in_millis" : 87, "delete_current" : 0, "noop_update_total" : 0, "is_throttled" : false, "throttle_time_in_millis" : 0 }, "get" : { "total" : 3695973, "time_in_millis" : 224666, "exists_total" : 3695608, "exists_time_in_millis" : 224652, "missing_total" : 365, "missing_time_in_millis" : 14, "current" : 0 }, "search" : { "open_contexts" : 0, "query_total" : 11235854, "query_time_in_millis" : 4807875, "query_current" : 0, "fetch_total" : 11234938, "fetch_time_in_millis" : 354414, "fetch_current" : 0, "scroll_total" : 946306, "scroll_time_in_millis" : 1219776, "scroll_current" : 0, "suggest_total" : 0, "suggest_time_in_millis" : 0, "suggest_current" : 0 }, "merges" : { "current" : 0, "current_docs" : 0, "current_size_in_bytes" : 0, "total" : 749454, "total_time_in_millis" : 42373556, "total_docs" : 6120472237, "total_size_in_bytes" : 514338185876, "total_stopped_time_in_millis" : 0, "total_throttled_time_in_millis" : 258535, "total_auto_throttle_in_bytes" : 4930765585 }, "refresh" : { "total" : 7151040, "total_time_in_millis" : 81040105, "external_total" : 7150190, "external_total_time_in_millis" : 87847532, "listeners" : 0 }, "flush" : { "total" : 693, "periodic" : 70, "total_time_in_millis" : 588990 }, "warmer" : { "current" : 0, "total" : 7146843, "total_time_in_millis" : 220830 }, "query_cache" : { "memory_size_in_bytes" : 92728, "total_count" : 19774666, "hit_count" : 9229714, "miss_count" : 10544952, "cache_size" : 10, "cache_count" : 1509487, "evictions" : 1509477 }, "fielddata" : { "memory_size_in_bytes" : 13464, "evictions" : 0 }, "completion" : { "size_in_bytes" : 0 }, "segments" : { "count" : 986, "memory_in_bytes" : 48584598, "terms_memory_in_bytes" : 40039845, "stored_fields_memory_in_bytes" : 4349408, "term_vectors_memory_in_bytes" : 0, "norms_memory_in_bytes" : 1975936, "points_memory_in_bytes" : 1458889, "doc_values_memory_in_bytes" : 760520, "index_writer_memory_in_bytes" : 170601028, "version_map_memory_in_bytes" : 8463058, "fixed_bit_set_memory_in_bytes" : 744936, "max_unsafe_auto_id_timestamp" : 1601164805126, "file_sizes" : { } }, "translog" : { "operations" : 2275712, "size_in_bytes" : 2041733134, "uncommitted_operations" : 424117, "uncommitted_size_in_bytes" : 382926616, "earliest_last_modified_age" : 0 }, "request_cache" : { "memory_size_in_bytes" : 47574, "evictions" : 0, "hit_count" : 2939404, "miss_count" : 256 }, "recovery" : { "current_as_source" : 0, "current_as_target" : 0, "throttle_time_in_millis" : 244 } } } 关键指标说明(indexname泛指索引名称): indexname.primaries.docs.count:索引文档数量。 如下一些指标是一个累加值,当节点重启以后会清零。 indexname.primaries.indexing.index_total:索引文档数。 indexname.primaries.indexing.index_time_in_millis:索引总耗时。 indexname.primaries.get.total:get请求数。 indexname.primaries.get.time_in_millis:get请求总耗时。 indexname.primaries.search.query_total:search总请求数。 indexname.primaries.search.query_time_in_millis:search请求总耗时。indices.search.fetch_total:fetch操做总数量。 indexname.primaries.search.fetch_time_in_millis:fetch请求总耗时。 indexname.primaries.refresh.total:refresh请求总量。 indexname.primaries.refresh.total_time_in_millis:refresh请求总耗时。 indexname.primaries.flush.total:flush请求总量。 indexname.primaries.flush.total_time_in_millis:flush请求总耗时。 计算指标: 索引计算指标和节点监控的计算指标同样分为两类,分别为请求速率指标和请求处理延迟指标而且计算方式同样
备注
在节点监控和索引监控时能够获取到一些操做数据,例如index、search、get等。对于这些指标参数有一些须要注意的地方:ui
search.query
query_total:查询总数,指的每一个分片上的查询次数,通常若是有五个分片的话进行一次查询query_total = 5。注意在统计指标的时候应该统计的是total分片的,不该该只统计主分片的值,由于查询请求不必定所有分发到主分片。
get
total:get请求数,通常get都须要指定文档id。一样get也应该统计total分片的值,若是只统计主分片会形成数据变少,由于有时候的get请求不是从主分片取的数据。
indexing
index_total和index_time_in_millis指标是根据索引的文档数来记录,一样须要统计total分片的数据,total分片包括副本的索引请求,通常1个副本的话index_total会乘以2。
search.fetch
一个查询分为两个阶段,一是query另外一个是fetch,fetch的状况与get类似,fetch.total指fetch请求数,fetch有可能从主分片拉取数据,也有可能从副本拉取数据。若是只统计主分片的数据会丢失数据。线程