Elastic Cloud + GCP 事始め③　～Logstashからのデータの投入～

# ゴール

ローカルディレクトリに配置したCSVファイルを、Elastic Cloud 上のKibanaで閲覧できるようにする。

# 公式マニュアル

https://www.elastic.co/guide/en/logstash/current/getting-started-with-logstash.html

# 1. rootの設定

WSL に rootパスワードを設定し、rootに昇格できるようにする
以下は全てUbuntuコンソールで作業する

```
sudo passwd root
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254327/043a75f7-f143-54dd-066e-3a83e740ba50.png)

root に昇格する

```
su -
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254327/840bb546-ca6d-36bc-d768-d146caa2992b.png)

# 2. Javaの導入

環境を更新

```
apt-get update
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254327/840facd1-65f7-bb9a-72f8-a28654fbfe1a.png)

インストール実行

```
apt install openjdk-11-jre-headless
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254327/d664a015-29c9-42be-0b41-4543db82cea4.png)

Java のバージョン確認

```
java --version
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254327/3b2db740-d556-6e57-55dc-0d89d73756ab.png)

# 3. Logstashの導入

アプリケーションファイルを取得する

```
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.10.1-linux-x86_64.tar.gz
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254327/5fb06eb1-dca8-eafb-a641-472a7058a63e.png)

解凍する（解凍ログ付き）

```
tar -xzvf logstash-7.10.1-linux-x86_64.tar.gz
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254327/da7333f6-e299-3abf-d191-c0b2b649ba86.png)

# 4. Logstash の設定

## 4.1. logstash.ymd の変更

```
# 設定ディレクトリに移動
cd logstash-7.10.1/config/

# 設定ファイルをバックアップ
cp -ip logstash.yml logstash.yml.20210106
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254327/46ee17e7-326a-ef8d-c731-6358f0ab566c.png)

viコマンドで、logstash.yml内の先頭に下記を追加する。

```
# Elastic Cloud
xpack.management.elasticsearch.cloud_id: '<cloud_id>'
xpack.management.elasticsearch.cloud_auth: elastic:<password>

```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254327/c0984046-25f5-2ba0-1258-5f9c9dee67bb.png)

**cloud.idの確認方法**

Elastic cloud のdeploymentsメインページ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254327/645833bf-7c3f-fea5-b41b-98bead1cd8d6.png)

**cloud.authの記法**

事始め①でDLしておいた`elastic`ユーザーのユーザー名とパスワードをコロンで繋げる

## 4.2. 日付フォーマッタフィルタのインストール

```
./logstash-7.10.1/bin/logstash-plugin install logstash-filter-date_formatter
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254327/1ee59e88-483f-1390-2df2-9a764aa90980.png)

インストールの確認

```
./logstash-7.10.1/bin/logstash-plugin list
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254327/d85ad0da-ff4c-a282-e307-a07da73db5fa.png)

## 4.3. config ファイルの作成

下記定義を、Windows上で作成し、Ubuntuとの共有ディレクトリ以下に任意のファイル名（例: sample-9.conf）で保存
※文字コードは `utf-8` にする事。

```
# 入力ファイル
input {
    file {
        path => "/mnt/d/Development/elastic/sample/0105/*.csv"
        # 常に最初から読み込む
        start_position => "beginning"
        # 開始地点の記録は不要
        sincedb_path => "/dev/null"
        # 実データに合わせて要変更
        codec => plain { 
            charset => "SJIS"
        }
    }
}
# フィールド設定
filter {
    csv {
        columns => ["now","user","goodsid","code","quantity","price","get_updated_at","ref_updated_at","lowest_price","availability"]
        # ヘッダを飛ばす
        skip_header => true
        # カンマ区切り
        separator => ","
        # 数値変換はここで行う(boolはkeyword相当)
        convert => { 
            'quantity' => 'integer'
            'price' => 'integer'
            'lowest_price' => 'integer'
        }
    }
    # 日付変換
    date {
        # 実データに合わせて要変更(checkforLoginではハイフンつなぎ)
        match => ['now', 'yyyy/MM/dd hh:mm:ss']
        target => '@timestamp'
    }
    date {
        match => ['get_updated_at', 'yyyy/MM/dd hh:mm:ss']
        target => 'get_updated_at'
    }
    date {
        match => ['ref_updated_at', 'yyyy/MM/dd hh:mm:ss']
        target => 'ref_updated_at'
    }
    date_formatter {
        source => "@timestamp"
        target => "[@metadata][index_now]"
        pattern => "YYYY.MM.dd"
    }
}
## Elastic cloudに出力
output {
    # Elastic Cloud に出力する
    elasticsearch {
        hosts => ['<Elasticsearch の endpoint>']
        user => 'elastic'
        password => '<elastic の password>'
        index => "sample-9-%{[user]}-%{[@metadata][index_now]}"
    }
    # デバッグ用にコマンドプロンプトにも取り込み結果を表示する
    stdout {
        codec => rubydebug
    }
}
```

**hosts の確認方法**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254327/b94e1f12-6009-78ce-de56-56478a302d9c.png)

Elastic Cloud コンソールの 「Copy endpoint」

# 5. Logstash の実行

```
./logstash-7.10.1/bin/logstash -f sample0104/sample-9.conf
```

インポートにはそれなりに時間がかかる。

# 6. Kibana Index Patterns の登録

Discover や Dashboard に表示するため、Index Patterns を登録する

Kibana コンソール の 「Stack Management」＞「Index Patterns」＞「Create index pattern」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254327/36e0aae8-b52c-45ee-f3d8-c7a11ad04dc8.png)

## Step1. Index Patter 名の指定

プレフィックスを指定して、ユーザー名や日付は「*」でワイルドカード指定する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254327/5124b769-dead-9708-142a-91efc81f5869.png)

Time field には、「@timestamp」を指定する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254327/6608046d-518d-3575-e8f4-6e123a44eaae.png)

Discover で見れるようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254327/4a2711c4-885e-8db6-6962-083b626202b2.png)

次回予定：
ロール作成＋ユーザー作成の自動化（指定期間ロールの作成）
https://qiita.com/miu200521358/items/c8795565343a3c5d8058