基於ES7.7 官方文檔
內容包括:
- 索引的統計信息 (Index stats)
- 索引的段 (Index segments)
- 索引的恢復信息 (Index recovery)
- 索引分片的存儲 (Index shard stores)
索引的統計信息 (Index stats API)
獲取索引的統計信息。官方文檔
GET /<index>/_stats
GET /<index>/_stats/<index-metric>
GET /_stats
使用索引的統計API來獲取索引的高級聚合和統計信息。
默認情況下,返回的統計信息是索引級別(index-level)的,包含primaries
和total
聚合。 primaries
只是主分片(primary shards)的信息,total
是主分片和副本分片(replica shards)的累加。
要獲取分片級(shard-level)的統計信息,請將level
參數設置爲shards
。
當移動到另一個節點時,該分片的分片級統計信息將從原節點清除。 儘管該分片不再是原節點的一部分,但該原節點仍保留了這個分片的所有節點級(node-level)統計信息。
路徑參數
<index>
(可選, string) 索引名稱,支持多個索引名稱的英文逗號分割、通配符表達式。如果要獲取所有索引的統計信息,使用all
或*
或乾脆直接忽略這個參數。
<index-metric>
(可選, string) 索引的指標,支持多個索引名稱的英文逗號分割。可選的指標包括:
all
返回所有統計信息completion
自動完成建議(Completion suggester) 的統計信息。是有關自動完成(auto-complete)、即時搜索(search-as-you-type)的統計信息docs
文檔及已刪除但尚未合併的文檔的數量。 索引刷新(index refreshes)會影響這個統計數據。fielddata
字段數據(fielddata)的統計信息。flush
刷數據到磁盤(flush)統計信息get
et的統計信息, 包括丟失的(missing)統計信息。indexing
索引(indexing)統計信息merge
合併(merge)統計信息query_cache
: 查詢緩存(query cache) 統計信息refresh
刷緩存數據到操作系統緩存(refresh)統計信息request_cache
分片請求緩存(shard request cache)統計信息search
搜索的統計信息包括建議(suggest)的統計。可以通過添加額外的參數groups
(搜索操作可以與一個或多個組關聯)來包含自定義組的統計信息。 參數groups
接受逗號分割的組名稱列表。 使用_all
返回所有組的統計信息。segments
所有打開的段(segments)使用的內存。 如果參數include_segment_file_sizes
設置爲true
,該指標會包括每個Lucene索引文件的磁盤佔用的總和。store
索引的大小(size), 使用字節單位(byte unit)suggest
[自動補全(suggester)]統計translog
translog統計warmer
warmer統計. 注: warmers已被移除,有更好的方法替代之。
查詢參數
expand_wildcards
(可選, string) 通配符查詢時可以匹配的索引的條件, 多個值之間以英文逗號分割, 比如"open,hidden"。
默認open
,可用的值有:
all
: 匹配所有open和closed的索引, 包括隱藏的(hidden).open
: 表示只匹配開放中的索引closed
: 只匹配關閉的(closed)的索引hidden
: 匹配隱藏的(hidden)的索引, 必須和open/closed聯合使用. (官方文檔說open和closed可以一起用, WAF??)none
: 不接受通配符.
fields
(可選, string) 逗號分割的字段列表或者通配符表達式。
作爲默認列表使用,除非參數completion_fields
或fielddata_fields
中指定了字段列表。
completion_fields
(可選, string) fielddata
和 suggest
統計中要包含的字段,支持逗號分割的字段列表或通配符表達式。
fielddata_fields
(可選, string) fielddata
統計中包含的字段,支持逗號分割的字段列表或通配符表達式。
forbid_closed_indices
(可選, bool) 如果爲true
, 則統計信息不會收集已關閉的索引。默認true
。
groups
(可選, string) search
統計中包含的搜索羣組,支持逗號分割的組名。
level
(可選, string) 規定統計信息在哪個級別聚合,級別包括: cluster, indices, shards
include_segment_file_sizes
(可選,, bool) 如果爲true
,將返回每個Lucene索引文件的磁盤使用情況的聚合信息(僅在請求段統計數據時應用)。 默認值爲false
。
include_unloaded_segments
(可選, bool) 如果爲true
,則響應包含未加載到內存中的段(segment)的信息。 默認false
。
幾個栗子
1. 獲取多個索引的統計信息
# 獲取索引index1和index2的統計信息
GET /index1,index2/_stats
# 獲取所有以index爲前綴的索引的統計信息
GET /index*/_stats
2. 獲取所有索引的統計信息
# 最簡單的寫法
GET /_stats
# 完整的寫法
GET /_all/_stats
GET /*/_stats
3. 返回指定的指標的統計信息
# 所有索引: 只返回指標`merge`和`refresh`的統計信息
GET /_stats/merge,refresh
# 索引`index`: 只返回指標`search``的統計信息
GET /index1/_stats/search
4. 獲取指標search
的groups
的統計信息
# 獲取索引`index1`的指標`search`的`groups`中的group1和group2的信息
GET /index1/_stats/search?groups=group1,group2
索引的段 (Index segments API)
返回索引分片中的Lucene
段(segments)的接近底層的(low-level)信息。官方文檔
GET /<index>/_segments
GET /_segments
路徑參數
<index>
(可選, string) 支持英文逗號分割的列表或通配符表達式。
查詢參數
allow_no_indices
(可選, bool) 默認true
。如果設置爲true
, 則當全部使用通配符*
、_all
只檢索不存在(missing)或者已關閉(closed)的索引(或索引別名)時,不會拋出錯誤。
expand_wildcards
(可選, string) 通配符查詢時的範圍限制。支持多個條件的逗號分割。默認open
。
all
: 匹配open和closed的索引, 包括隱藏的.open
: 默認, 表示只查詢開放中的索引closed
: 只匹配closed的索引hidden
: 隱藏的(hidden)索引, 必須和open/closed聯合使用.none
: 不接受通配符.
ignore_unavailable
(可選, bool) 如果設置爲true
,則 返回數據中不會包含missing或closed的索引。
默認false
, 查詢時只要有一個索引不存在,就會返回404並拋出錯誤信息。
verbose
(可選, bool) [實驗中的參數,可能會改變會取消] 如果設置爲true
, 返回的信息中會包含Lucene內存使用的詳細信息。默認false
。
返回信息的主體(response body)
<segment>
(string) 段的名稱,比如_0
,是Lucene在分片目錄中創建段的文件時的文件名。
generation
(integer) 版本號的數字(generation number), 比如0
。es會在每次段文件寫入後增加版本號。ES使用這個版本號作爲新的段名。(這個與mysql的binlog文件名的生成類似)
num_docs
(integer) 段中未被刪除的文檔的數量, 比如25
。這個值基於Lucene文檔,可能包含nested
字段生成的文檔。
ES 7.15版本文檔中的內容卻是這樣的: 不包含
nested
字段生成的文檔, 以及剛剛被索引但是還不屬於任何一個segment的文檔。
deleted_docs
(integer) 段中被刪除的文件數量,比如0
。該數值基於Lucene文檔。當一個段被合併時,ES會回收已刪除的Lucene文檔的磁盤空間。
ES 7.15版本文檔中的內容: 不包括剛剛被刪除的文檔以及還不屬於任何一個segment的文檔。被刪除的文檔會由"自動合併進程(automatic merge process)"去清理(如果這個進程覺得有必要)。同時,ES會創建額外的刪除文檔,以便內部去跟蹤一個分片上的最近的操作記錄。
size_in_bytes
(integer) 段文件佔用的磁盤空間,比如50kb
。
memory_in_bytes
(integer) 爲了提高搜索效率而緩存在內存中的段的數據的字節數,比如1264
。如果無法計算字節數則會顯示爲-1
。
search
(bool) 如果是true
,則說明該段是可搜索的。如果是false
,則該段很有可能是已經寫入磁盤但是需要refresh
後纔可被搜索。
version
(string) 寫入段的Lucene的版本號。
compound
(bool) 如果是true
,Luncene合併了所有segment文件到一個文件中,以節約文件描述符(file descriptor)
文件描述符: Linux 系統中,把一切都看做是文件,當進程打開現有文件或創建新文件時,內核向進程返回一個文件描述符,文件描述符就是內核爲了高效管理已被打開的文件所創建的索引,用來指向被打開的文件,所有執行I/O操作的系統調用都會通過文件描述符。
attributes
(object) 包含了是否啓用高壓縮率的信息。
幾個栗子
1. 從一個數據流或索引中獲取段信息
GET /info/_segments
返回數據示例:
{
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"indices" : {
"info" : {
"shards" : {
"0" : [
{
"routing" : {
"state" : "STARTED",
"primary" : true,
"node" : "Yoi-NgOOT2irA04JY79nxA"
},
"num_committed_segments" : 18,
"num_search_segments" : 18,
"segments" : {
"_0" : {
"generation" : 12,
"num_docs" : 185425,
"deleted_docs" : 0,
"size_in_bytes" : 49858547,
"memory_in_bytes" : 2476,
"committed" : true,
"search" : true,
"version" : "8.5.1",
"compound" : true,
"attributes" : {
"Lucene50StoredFieldsFormat.mode" : "BEST_SPEED"
}
},
#其他的segment的信息, 段名後面部分可能是0-9,a-z, 比如: "_a", "_b","_r"
}
}
]
}
}
}
}
2. 從多個數據流或索引中獲取信息
GET /info,info2/_segments
3. 獲取集羣中所有的數據流和索引的段信息
GET /_segments
# 下面兩種不常用
GET /_all/_segments
GET /*/_segments
詳細模式(verbose mode)
如果想要返回可用於調試(debugging)的附加信息,可以在請求參數中使用參數verbose
(設置爲true),返回的數據會在segments下面的segment節點數據中增加ram_tree
(object):
GET /info/_segments?verbose=true
索引的恢復信息 (Index recovery API)
返回有關正在進行中和已完成的分片恢復(shard recovery)的信息。官方文檔
GET /<target>/_recovery
GET /_recovery
分片恢復是從主分片同步數據到副本分片的過程。 同步過程一旦完成,該副本分片即可用來搜索。
以下過程中會自動啓動恢復進程:
- 節點啓動(startup)時或節點發生故障(failure)。 這種類型的恢復稱爲本地存儲恢復(local store recovery)。
- 主分片複製(primary shard replication), 比如新增了一個主分片?。
- 將一個分片重定位到同一集羣中的另外一個節點(Relocation of a shard to a different node in the same cluster)。
- 快照恢復(Snapshot restoration)。
路徑參數
<target>
(可選, string) 支持多個數據流/索引/索引別名的英文逗號分割、通配符表達式。如果要獲取集羣中所有的數據流和索引,使用all
或*
或乾脆直接忽略這個參數。
查詢參數
active_only
(可選, bool) 如果設置爲true
,則只返回分片正在恢復中的數據流和索引。默認false
。
detailed
(可選, bool) 如果設置爲true
,則返回信息中會包含分片恢復的詳細信息。默認false
。
index
(可選, string) 指定索引名稱,支持逗號分割、通配符表達式。
返回信息的主體(response body)
id
(integer) 分片的id
type
(string) 恢復的類型。可能的值包括:
STORAGE
在節點啓動(startup)或節點發生故障(failure)的情況下導致的恢復。這種類型的恢復又叫本地存儲恢復(local store recovery)。SNAPSHOT
與快照恢復(Snapshot restoration)有關。REPLICA
與主分片複製有關。RELOCATING
將一個分片重定位到同一集羣中的另外一個節點(the relocation of a shard to a different node in the same cluster)時。
STAGE
(string) 恢復所處的階段。返回值包括:
INIT
初始化中, 恢復任務尚未開始INDEX
正在讀取索引的元數據(meta data),從來源向目標複製字節(bytes, 數據)VERIFY_INDEX
正在驗證索引的完整性(integrity)TRANSLOG
正在重放事務日誌(replay transaction log)FINALIZE
正在清理(cleanup)DONE
已完成(complete)
primary
(bool) 是否是主分片
start_time
(string) 恢復開始時的時間戳
stop_time
(string) 恢復過程完成時的時間戳
total_time_in_millis
(string) 恢復分片所花費的時間(單位: 毫秒)
source
(object) 恢復的來源。可能包括:
- 從快照恢復時的倉庫(repository)的描述。
在能使用從快照恢復之前, 必須先註冊快照倉庫(snapshot repository)
- 源節點的描述
target
(object) 目標節點
index
(object) 關於物理索引恢復的統計
translog
(object) 關於事務日誌(translog)恢復(重放)的統計
start
(object)關於索引的打開(open)和開始(start)的時間的統計
幾個栗子
1. 獲取多個數據流/索引的恢復信息
GET /info,info2/_recovery?human
查詢參數
human
可以把時間/字節單位等格式化,以方便我們閱讀,比如:
2. 獲取所有索引的恢復信息
GET /_recovery?human
# 下面兩種不常用
GET /_all/_recovery?human
GET /*/_recovery?human
3. 獲取恢復的詳細信息
如果要獲取恢復的物理文件的列表,可以添加查詢參數detailed
並設置爲true
:
GET /users_new/_recovery?human&detailed=true
執行結果:
{
"users_new" : {
"shards" : [
{
"id" : 0,
"type" : "EXISTING_STORE",
"stage" : "DONE",
"primary" : true,
"start_time" : "2021-11-04T00:35:55.767Z",# human參數添加的
"start_time_in_millis" : 1635986155767,
"stop_time" : "2021-11-04T00:35:56.140Z",# human參數添加的
"stop_time_in_millis" : 1635986156140,
"total_time" : "372ms",# human參數添加的
"total_time_in_millis" : 372,
"source" : {
"bootstrap_new_history_uuid" : false
},
"target" : {
"id" : "Yoi-NgOOT2irA04JY79nxA",
"host" : "192.168.0.200",
"transport_address" : "192.168.0.200:9300",
"ip" : "192.168.0.200",
"name" : "eslocal"
},
"index" : {
"size" : {
"total" : "3.1kb",# human參數添加的
"total_in_bytes" : 3220,
"reused" : "3.1kb",# human參數添加的
"reused_in_bytes" : 3220,
"recovered" : "0b",# human參數添加的
"recovered_in_bytes" : 0,
"percent" : "100.0%"
},
"files" : {
"total" : 4,
"reused" : 4,
"recovered" : 0,
"percent" : "100.0%",
"details" : [
{
"name" : "_0.cfe",
"length" : "352b",# human參數添加的
"length_in_bytes" : 352,
"reused" : true,
"recovered" : "0b",# human參數添加的
"recovered_in_bytes" : 0
},
{
"name" : "_0.si",
"length" : "356b",# human參數添加的
"length_in_bytes" : 356,
"reused" : true,
"recovered" : "0b",# human參數添加的
"recovered_in_bytes" : 0
},
{
"name" : "_0.cfs",
"length" : "2.1kb",# human參數添加的
"length_in_bytes" : 2216,
"reused" : true,
"recovered" : "0b",# human參數添加的
"recovered_in_bytes" : 0
},
{
"name" : "segments_3",
"length" : "296b",# human參數添加的
"length_in_bytes" : 296,
"reused" : true,
"recovered" : "0b",# human參數添加的
"recovered_in_bytes" : 0
}
]
},
"total_time" : "4ms",# human參數添加的
"total_time_in_millis" : 4,
"source_throttle_time" : "-1",# human參數添加的
"source_throttle_time_in_millis" : 0,
"target_throttle_time" : "-1",# human參數添加的
"target_throttle_time_in_millis" : 0
},
"translog" : {
"recovered" : 0,
"total" : 0,
"percent" : "100.0%",
"total_on_start" : 0,
"total_time" : "320ms",# human參數添加的
"total_time_in_millis" : 320
},
"verify_index" : {
"check_index_time" : "0s",# human參數添加的
"check_index_time_in_millis" : 0,
"total_time" : "0s",# human參數添加的
"total_time_in_millis" : 0
}
}
]
}
}
返回數據中包括了任何從物理文件中恢復的列表及其文件大小。
還包括恢復的以下階段的以毫秒爲單位的執行時間:
- 獲取索引 (index retrieval)
- 事務日誌的重放(translog replay)
- 索引開始時間
上面的返回結果中的stage
值是DONE
, 表示恢復已經完成(done)。所有的恢復任務,不管是正在進行中(ongoing)還是已完成(complete)的, 都會保存在集羣狀態中,且可能在任何時間上報。
如果僅僅想獲取正在進行中的恢復的信息,可以把查詢參數active_only
設置爲true
。
GET /users_new/_recovery?human&active_only=true&detailed=true
索引分片的存儲 (Index shard stores API)
返回一個或多個索引的副本分片的存儲信息。官方文檔
ES7.15文檔補充: 對於數據流, 會返回流的後備索引(backing indices)的存儲信息。
GET /<index>/_shard_stores
GET /_shard_stores
返回的信息包括:
- 每個副本分片所在的節點
- 每個副本分片的定位id (Allocation ID)
- 每個副本分片的唯一id
- 打開分片索引時的錯誤,或更早的錯誤
默認只返回主分片未分配,或至少有一個副本分片未分配的存儲信息。
文檔原文: By default, the API only returns store information for primary shards that are unassigned or have one or more unassigned replica shards.
路徑參數
<index>
(可選, string) 支持多個索引的英文逗號分割、通配符表達式。如果要獲取集羣中所有的索引,使用all
或*
或乾脆直接忽略這個參數。
查詢參數
allow_no_indices
(可選, bool) 默認true
。如果設置爲true
, 則當全部使用通配符*
、_all
只檢索不存在(missing)或者已關閉(closed)的索引(或索引別名)時,不會拋出錯誤。
expand_wildcards
(可選, string) 通配符查詢時可以匹配的索引的條件, 多個值之間以英文逗號分割, 比如"open,hidden"。
默認open
,可用的值有:
all
: 匹配所有open和closed的索引, 包括隱藏的(hidden).open
: 默認,表示只匹配開放中的索引closed
: 只匹配關閉的(closed)的索引hidden
: 匹配隱藏的(hidden)的索引, 必須和open/closed聯合使用. (官方文檔說open和closed可以一起用, WAF??)none
: 不接受通配符.
ignore_unavailable
(可選, bool) 如果有索引不存在時是否忽略。
默認false
,就是返回404並拋出錯誤信息。查詢時只要有一個索引不存在,則都拋出錯誤。
官方文檔說"If true, missing or closed indices are not included in the response." 這個與實測不同
status
(可選, string) 支持英文逗號分割的分片健康狀態代碼。狀態代碼包括:
- green 主分片和副本分片都已分配
- yellow 至少有一個副本分片未分配
- red 主分片未分配
- all 返回所有分片, 不管健康狀態如何
默認是yellow,red
幾個栗子
1. 獲取指定素銀的分片存儲信息
GET /twitter/_shard_stores
如果索引沒有副本分片, 則返回空對象;
如果索引不存在,則返回404狀態, 拋出錯誤信息。
2. 同時獲取多個索引的分片存儲信息
GET /twitter,catalog/_shard_stores
默認不會返回沒有副本的索引的信息。
如果有一個索引不存在,就會返回404狀態,拋出錯誤信息。
3. 獲取所有索引的分片存儲信息
GET /_shard_stores
# 下面兩種不常用
GET /_all/_shard_stores
GET /*/_shard_stores
4. 按集羣健康狀態獲取分片存儲信息
通過添加查詢參數status
來按健康狀態過濾索引。
比如, 我們只查詢主分片和副本分片都分配了的索引, 設置參數status
爲green
:
GET /_shard_stores?status=green
也包括主分片已分配,但是沒有副本分片的索引。
返回數據示例:
{
"indices" : {
"kibana_sample_data_logs" : {
"shards" : {
"0" : { # 分片id
"stores" : [ #所有分片副本的存儲信息
{
"k7M9dNEARce3SKuHqNqcFA" : { #存儲副本的節點id, 是一個唯一id
"name" : "ABEN_PC",
"ephemeral_id" : "OWhPg97KQiGcNJ-68gjwlQ",
"transport_address" : "127.0.0.1:9300",
"attributes" : {
"ml.machine_memory" : "16977100800",
"xpack.installed" : "true",
"transform.node" : "true",
"ml.max_open_jobs" : "20"
}
},
"allocation_id" : "oo41W9unTHqcvpJQ4T-N6Q",# 副本存儲的定位id
"allocation" : "primary" #存儲副本的狀態: primary|replica|unused
"store_exception": .... # 開啓分片時或之前有引擎錯誤, 會顯示在這裏
}
]
}
}
},
# 其他的索引信息結構一樣, 省略....
}
}
last updated at 2021/11/4 21:45