Elasticsearch _cat API を試していく

#### 目的
Elasticsearch の稼働状況を確認するためのAPIが多数提供されている中で、簡易チェックによく使われる _cat API を使ってリスポンスを確認していきます。
ここでは 計17個 のエンドポイントを試します。

#### 方法
Dockerで構築したElasticsearch および Kinaba を使います。
APIは Kinaba のConsoleから実行します。
バージョンは 7.8.1 です。

#### 実践
##### health エンドポイント
クラスタの状態をチェックするのに使う。
よく使いそう。
v を付けることで、カラムヘッダも含めて表示できます。

```:入力
GET _cat/health?v
```
```:出力
epoch      timestamp cluster           status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1612869853 11:24:13  es-docker-cluster green           3         3     14   7    0    0        0             0                  -                100.0%
```

<b>status について</b>
green: インデックスのすべてのプライマリシャード、レプリカシャードが配置されている状態
yellow: プライマリシャードはすべて配置されているが、配置できていないレプリカシャードがある状態
red: 配置できていないプライマリシャードがある状態
※red の状態の場合、クラスタは部分的に機能するが、利用可能なシャードに対してのみ検索が可能な状態（基本的に使いものにならない）

##### indices エンドポイント
各インデックスの状態をチェックするのに使う。
よく使いそう。
&bytes=kb のように指定することで、出力する単位を指定できます。

```:入力
GET _cat/indices?v&bytes=kb
```
```:出力
health status index                          uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   .apm-custom-link               93A-2XM_RICumCTXwnApxg   1   1          0            0          0              0
green  open   .kibana_task_manager_1         C8-C_saeQuOTjJW3KGGhoA   1   1          5            4        103             48
green  open   my_index                       44PEsk44QrOjcKRcCh6F3Q   1   1          0            0          0              0
```

##### aliases エンドポイント
各インデックスエイリアスの状態をチェックするのに使う。
あまり使わない？

```:入力
GET _cat/aliases?v
```
```:出力
alias                   index                          filter routing.index routing.search is_write_index
.kibana_task_manager    .kibana_task_manager_1         -      -             -              -
.kibana                 .kibana_1                      -      -             -              -
ilm-history-2           ilm-history-2-000001           -      -             -              true
.kibana-event-log-7.8.1 .kibana-event-log-7.8.1-000001 -      -             -              true
```

##### allocation エンドポイント
シャードの割り当て状況をチェックする。
よく使いそう。

```:入力
GET _cat/allocation?v
```
```:出力
shards disk.indices disk.used disk.avail disk.total disk.percent host        ip          node
     4      106.7kb    24.4gb     37.3gb     61.7gb           39 172.30.10.3 172.30.10.3 es03
     5      141.3kb    24.4gb     37.3gb     61.7gb           39 172.30.10.1 172.30.10.1 es01
     5       92.8kb    24.4gb     37.3gb     61.7gb           39 172.30.10.2 172.30.10.2 es02
```

##### count エンドポイント
クラスタ内のドキュメント数をチェックする。インデックス別でチェック可能。
よく使いそう。

```:入力
GET _cat/count?v
```
```:出力
epoch      timestamp count
1612873952 12:32:32  37
```

または、インデックス指定の場合

```:入力
GET _cat/count/my_index?v
```

##### fielddata エンドポイント
fielddata 用に使用されているヒープメモリ量をチェックする。
メモリ不足の調査に使用する？

```:入力
GET _cat/fielddata?v
```
```:出力
id                     host        ip          node field size
eUJQohRmTzK_SyFavIGaVQ 172.30.10.1 172.30.10.1 es01 type    0b
```

##### master エンドポイント
現マスターノードの情報を取得する。
どのノードがマスターであるかをチェック。

```:入力
GET _cat/master?v
```
```:出力
id                     host        ip          node
eUJQohRmTzK_SyFavIGaVQ 172.30.10.1 172.30.10.1 es01
```

##### nodes エンドポイント
ノードの状態を取得する。このコマンドからもどれがマスターノードであるかわかる。
よく使いそう。

```:入力
GET _cat/nodes?v
```
```:出力
ip          heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
172.30.10.2           35          86   4    0.60    0.31     0.18 dilmrt    -      es02
172.30.10.3           67          93   4    0.60    0.31     0.18 dilmrt    -      es03
172.30.10.1           23          92   4    0.60    0.31     0.18 dilmrt    *      es01
```

##### nodeattrs エンドポイント
ノード属性を取得する。
あまり使わない？属性がより多様になっていくのかもしれないが。

```:入力
GET _cat/nodeattrs?v
```
```:出力
node host        ip          attr              value
es02 172.30.10.2 172.30.10.2 ml.machine_memory 1073741824
es02 172.30.10.2 172.30.10.2 ml.max_open_jobs  20
es02 172.30.10.2 172.30.10.2 xpack.installed   true
es02 172.30.10.2 172.30.10.2 transform.node    true
es03 172.30.10.3 172.30.10.3 ml.machine_memory 1073741824
es03 172.30.10.3 172.30.10.3 ml.max_open_jobs  20
es03 172.30.10.3 172.30.10.3 xpack.installed   true
es03 172.30.10.3 172.30.10.3 transform.node    true
es01 172.30.10.1 172.30.10.1 ml.machine_memory 1073741824
es01 172.30.10.1 172.30.10.1 xpack.installed   true
es01 172.30.10.1 172.30.10.1 transform.node    true
es01 172.30.10.1 172.30.10.1 ml.max_open_jobs  20
```

##### pending_tasks エンドポイント
未処理のタスク情報を取得する。
何らかのパフォーマンス問題を抱えている時に調査で使用できそう。

```:入力
GET _cat/pending_tasks?v
```
```:出力
insertOrder timeInQueue priority source
xxx xxx xxx xxx
```

##### recovery エンドポイント
シャードリカバリの状況を取得する。
シャードに問題があった際はよく使う。

```:入力
GET _cat/recovery?v
```
```:出力
index                          shard time  type           stage source_host source_node target_host target_node repository snapshot files files_recovered files_percent files_total bytes bytes_recovered bytes_percent bytes_total translog_ops translog_ops_recovered translog_ops_percent
.apm-custom-link               0     506ms existing_store done  n/a         n/a         172.30.10.1 es01        n/a        n/a      0     0               100.0%        1           0     0               100.0%        208         0            0                      100.0%
.apm-custom-link               0     881ms peer           done  172.30.10.1 es01        172.30.10.2 es02        n/a        n/a      0     0               0.0%          0           0     0               0.0%          0           0            0                      100.0%
.kibana_task_manager_1         0     1s    existing_store done  n/a         n/a         172.30.10.1 es01        n/a        n/a      0     0               100.0%        25          0     0               100.0%        26961       0            0                      100.0%
.kibana_task_manager_1         0     1.8s  peer           done  172.30.10.1 es01        172.30.10.3 es03        n/a        n/a      0     0               0.0%          0           0     0               0.0%          0           0            0                      100.0%
```

##### repositries エンドポイント
スナップショットリポジトリの配置先を取得する。
スナップショットを使う際は重宝する。

```:入力
GET _cat/repositories?v
```
```:出力
id type
xxx xxx
```

##### thread_pool エンドポイント
スレッドプールの状態を取得する。
パフォーマンスに問題がある際に、どこがボトルネックになっているのか調査に使えるかもしれない。

```:入力
GET _cat/thread_pool?v
```
```:出力
node_name name                active queue rejected
es02      analyze                  0     0        0
es02      ccr                      0     0        0
es02      fetch_shard_started      0     0        0
es02      fetch_shard_store        0     0        0
es02      flush                    0     0        0
es02      force_merge              0     0        0
es02      generic                  0     0        0
es02      get                      0     0        0
es02      listener                 0     0        0
es02      management               1     0        0
```

##### shards エンドポイント
シャードの状態を取得する。
よく使いそう。

```:入力
GET _cat/shards?v
```
```:出力
index                          shard prirep state   docs  store ip          node
.kibana_1                      0     r      STARTED   35 80.5kb 172.30.10.1 es01
.kibana_1                      0     p      STARTED   35 80.6kb 172.30.10.2 es02
.apm-custom-link               0     p      STARTED    0   208b 172.30.10.1 es01
.apm-custom-link               0     r      STARTED    0   208b 172.30.10.2 es02
.apm-agent-configuration       0     p      STARTED    0   208b 172.30.10.2 es02
.apm-agent-configuration       0     r      STARTED    0   208b 172.30.10.3 es03
my_index                       0     p      STARTED    0   208b 172.30.10.1 es01
my_index                       0     r      STARTED    0   208b 172.30.10.2 es02
.kibana_task_manager_1         0     p      STARTED    5 48.5kb 172.30.10.1 es01
.kibana_task_manager_1         0     r      STARTED    5 54.8kb 172.30.10.3 es03
```

##### segments エンドポイント
Lucene セグメントレベルでの情報を取得する。
理解するために、Lucene の知識が欲しい。

```:入力
GET _cat/segments?v
```
```:出力
index                          shard prirep ip          segment generation docs.count docs.deleted   size size.memory committed searchable version compound
.kibana_task_manager_1         0     p      172.30.10.1 _19             45          1            4 12.8kb        3708 true      true       8.5.1   false
.kibana_task_manager_1         0     p      172.30.10.1 _1a             46          0            1 10.5kb           0 true      false      8.5.1   true
.kibana_task_manager_1         0     p      172.30.10.1 _1b             47          0            3 10.5kb           0 true      false      8.5.1   true
.kibana_task_manager_1         0     p      172.30.10.1 _1c             48          1            0  6.2kb        2500 true      true       8.5.1   true
.kibana_task_manager_1         0     p      172.30.10.1 _1d             49          3            0  7.6kb        3020 true      true       8.5.1   true
```

##### snapshots エンドポイント
スナップショットの状態を取得する。
一覧として取得するのに便利。

```:入力
GET _cat/snapshots?v
```

##### templates エンドポイント
テンプレートの状態を取得する。
一覧として取得するのに便利。

```:入力
GET _cat/templates?v
```
```:出力
name                             index_patterns               order      version composed_of
.ml-config                       [.ml-config]                 0          7080199 
.transform-notifications-000002  [.transform-notifications-*] 0          7080199 
ilm-history                      [ilm-history-2*]             2147483647 2       
.ml-notifications-000001         [.ml-notifications-000001]   0          7080199 
.kibana-event-log-7.8.1-template [.kibana-event-log-7.8.1-*]  0                  
```

さすがElasticsearch全ての操作をAPIで提供するという哲学もあって、たくさんのAPIが提供されていて、とても便利（そう）に使えるAPIも多い。
すべてを理解するのは大変だが、何か調べる必要がある際に一つの手段として取り出せるようにしておきたい。