Elasticdumpを使ってElasticsearchで収集しているログをjsonファイルにする

Elasticsearchで収集しているログをElasticdumpを使ってjsonファイルにする際の基本的な使い方を書きます．

公式↓
https://github.com/elasticsearch-dump/elasticsearch-dump/blob/master/README.md

## 事前作業
①Elasticdumpに必要なnpmコマンドとnode環境のインストール
↓のコマンドでどちらもインストールできます
```
sudo apt install npm
```
インストールできたか確認
```
node -v
```
```
npm -v
```

②dumpコマンドのインストール

```
sudo apt install dump
```
③Elasticdumpのインストール
インストールコマンドが2種類あるので好きな方でインストールしてください

ダウンロードしたディレクトリ内でしかelasticdumpが使えない（ローカル）
```
sudo npm install elasticdump
```
そのサーバー内だったらどこでもelasticdumpが使える（グローバル）
```
sudo npm install -g elasticdump
```

## 使ってみよう
送信元（elasticsearchがあるサーバー）
送信先（dumpをインストールしたサーバー）　とします

ログをjsonファイルにするコマンド

```
elasticdump --input=http://送信元のIP:送信元のElasticsearchのport番号/送信元のElasticsearchのindex --output=$HOME/dump/logstash_data.json --type=data --limit=10000
```
・送信元のIPの見方（送信元のサーバーで実行）
```
hostname -I
```
```
XXX.XXX.XXX.XXX YY.YY.Y.Y YY.YY.Y.Y #結果例 Xのところを使う　
```
・送信元のElasticsearchのport番の見方（送信元のサーバーで実行）
```
kubectl get svc -n ネームスペース名
```
```
#結果例↓のelasticsearch-masterのところを使う（31338）
NAME                                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                         AGE
service/elasticsearch-master            NodePort    10.43.230.156   <none>        9200:31338/TCP,9300:30876/TCP   16m
service/elasticsearch-master-headless   ClusterIP   None            <none>        9200/TCP,9300/TCP               16m
service/kb-kibana                       NodePort    10.43.227.225   <none>        5601:30110/TCP                  65s
service/ls-logstash                     NodePort    10.43.185.167   <none>        5044:30714/TCP                  13m
service/ls-logstash-headless            ClusterIP   None            <none>        9600/TCP                        13m 
```
・indexの見方
```
curl -X GET "http://cdsl@ls-master:31338/_cat/indices?v"
```
```
#結果例↓testとlogstashがindex名
health status index    uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   test     W_frXrGaRpSDU580TMtDEg   1   1    9595981            0      2.2gb          1.1gb
green  open   logstash EYO-xaECQaKUOk2p3zDYwg   1   1  123693625       698836    159.1gb         79.6gb
```

・--output=$HOME/dump/logstash_data.jsonはこの場所にlogstash_data.jsonという名前で保存する
・--limit=10000は一回に送られてくるログの件数→数字を大きくするほど速く終わるが，処理が追い付かなくなってElasticsearchが落ちる可能性があるので気を付けてください

これで，ログが取得できます．

## 収集したログをElasticsearchに入れたい場合
```
elasticdump --input=logstash_data.json --output=http://送信元のIP:送信元のElasticsearchのport番号/送信元のElasticsearchのindex --limit=10000
```

## 実行結果例
```
Wed, 20 Nov 2024 07:20:02 GMT | starting dump
Wed, 20 Nov 2024 07:20:02 GMT | got 10000 objects from source elasticsearch (offset: 0)
Wed, 20 Nov 2024 07:20:02 GMT | sent 10000 objects to destination file, wrote 10000
Wed, 20 Nov 2024 07:20:02 GMT | got 10000 objects from source elasticsearch (offset: 10000)
Wed, 20 Nov 2024 07:20:03 GMT | sent 10000 objects to destination file, wrote 10000
Wed, 20 Nov 2024 07:20:03 GMT | got 10000 objects from source elasticsearch (offset: 20000)
Wed, 20 Nov 2024 07:20:03 GMT | sent 10000 objects to destination file, wrote 10000
Wed, 20 Nov 2024 07:20:03 GMT | got 10000 objects from source elasticsearch (offset: 30000)
Wed, 20 Nov 2024 07:20:03 GMT | sent 10000 objects to destination file, wrote 10000
Wed, 20 Nov 2024 07:20:03 GMT | got 10000 objects from source elasticsearch (offset: 40000)
Wed, 20 Nov 2024 07:20:03 GMT | sent 10000 objects to destination file, wrote 10000
                              ・
                              ・省略
                              ・
Wed, 20 Nov 2024 07:35:59 GMT | got 5981 objects from source elasticsearch (offset: 9590000)
Wed, 20 Nov 2024 07:35:59 GMT | sent 5981 objects to destination file, wrote 5981
Wed, 20 Nov 2024 07:35:59 GMT | got 0 objects from source elasticsearch (offset: 9595981)
Wed, 20 Nov 2024 07:35:59 GMT | Total Writes: 9595981
Wed, 20 Nov 2024 07:35:59 GMT | dump complete
```