Elasticsearch集羣監控

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有可能從主分片拉取數據,也有可能從副本拉取數據。若是隻統計主分片的數據會丟失數據。線程

相關文章
相關標籤/搜索