ElasticSearch的REST APIs 之 索引的監控(monitoring)

基於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)的,包含primariestotal聚合。 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_fieldsfielddata_fields中指定了字段列表。

completion_fields

  (可選, string) fielddatasuggest 統計中要包含的字段,支持逗號分割的字段列表或通配符表達式。

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. 獲取指標searchgroups的統計信息

# 獲取索引`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來按健康狀態過濾索引。

比如, 我們只查詢主分片和副本分片都分配了的索引, 設置參數statusgreen

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章