elasticのサブスクリプションを入れる

# 概要

elasticのサブスクリプションを投入しようとした際に、なんだか引っかかったので、要点をまとめる。

# 対象

ElasticStack 6.5を想定している。

- elasticsearch 6.5.4
- kibana 6.5.4
- logstash 6.5.4

# ライセンスの投入

## 概要

ライセンスを購入すると、サポートサイトで「ライセンスのjson」をダウンロードできる。これを投入すれば良い。

但し、ElasticStackを入れた直後では、ライセンス投入はできない。X-Pack securityの設定がされていないと、ライセンスを受け付けないようだ。

- 以下の設定をすることが想定されている
    - 全体
        - `30day-trial`ライセンスが有効になっていること
    - elasticsearch.yml
        - セキュリティが有効になっている
        - built-in usersのパスワードを設定する
        - TLSを利用する設定になっている
    - kibana.yml
        - kibanaユーザのパスワード変更をしている(built-in usersのパスワード変更があるため)

「30日間のトライアルライセンス」を有効にしないと、GOLD等のサブスクリプションは入れられない。

- 「サブスクリプション入れて設定を有効にする」思想ではなく、「設定した各種追加機能の"有効期間を拡張する"」という思想なのかも。

## 設定

### トライアルの有効化

- Kibanaで[Management][License]を選択し、"Start a 30-day trial"を有効にする

### セキュリティ設定の有効化
#### セキュリティの有効化

- elasticsearchの停止
    - `# systemctl stop elasticsearch`
- elasticsearch.ymlの編集
    - `xpack.security.enabled: true` を追加
- elasticsearchの起動
    - `# systemctl restart elasticsearch` でサービス再起動し、反映

ここで、起動後しばらくしてelasticsearchが落ちるようなら、以下を確認する。

- 今まで、きちんとelasticsearchは動いてた？
    - 動いてないなら、それは動かないよね
- trial licenseを有効にしていない
    - 有効にしないと `xpack.security.enabled: ture` できない
- `xpack.security.enabled: true` のtypo
    - あるんだな、これが。

### built-in usersパスワード変更
#### パスワードの変更

前述 xpack.security.enabled を有効にすると、パスワード変更できるようになる。

- elasticsearchが起動していること
    - `# systemctl status elasticsearch` などで確認
- 対話的に、built-in usersのパスワード変更する
    - `/usr/share/elasticsearch/bin/elasticsearch-setup-password interactive`
    - 複数のbuilt-in userのパスワードを変更する
        - elastic, apm_system, kibana, logstash_system, beat_system, remote_monitoring_user のパスワードを変更する。

#### Kibanaの設定変更

Kibanaが使うbuild-in user "kibana" を指定する

- kibana.ymlの変更
    - `elasticsearch.username: "kibana"`
    - `elasticsearch.password: "先程のパスワード"`

直接設定ファイルにアカウントを書きたくない場合は、kibana-keystoreを使う

-  `# /usr/share/kibana/bin/kibana-keystore create`
-  `# /usr/share/kibana/bin/kibana-keystore add elasticsearch.username`
-  `# /usr/share/kibana/bin/kibana-keystore add elasticsearch.password`

### TLSの有効化

#### Node Certificatesの作成

- CAを作る
    - `# /usr/share/elasticsearch/bin/elasticsearch-certutil ca`
    - デフォルトで `elastic-stack-ca.p12` が作られる
- 証明書と秘密鍵を作る
    - `# /usr/share/elasticsearch/bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12`
    - デフォルトで `elastic-certificates.p12` が作られる
- elasticsearchの場所に置く
    - `/etc/elasticsearch/cert/` などに elastic-certificates.p12 ファイルを配置する

#### 設定の有効化

elasticsearchに設定を追加する

```elasticsearch.yml:
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12
```

elasticsearchの再起動をする

- 再起動後しばらくして落ちる場合は、設定が間違っている
    - /var/log/elasticsearch/*.log を見る
    - 追加したコンフィグで typo がないかを確認する

### サブスクリプションの投入

ここまでくれば、Kibanaからライセンス更新ができる。

- [Management][Elasticsearch][License Management]の "Update your license" に、サポートサイトからダウンロードした json を投入する。


# まとめ

- trialライセンスを有効にして、securityの設定をした後で、ライセンスを入れる
    - ライセンス入れてから設定しよう、は、できない
- typoひどいよtypo!
    - elasticsearch.ymlに書く内容をtypoしないように。

以上。