[v8.5版] ElasticsearchとKibanaとElastic Agentの最速インストール手順 (試用環境として）

# はじめに
現時点(2022年12月）最新のversion 8.5.3を使って最速で自分のマシンにお試し用途のElasticsearch, Kibana, Elastic Agentをインストールする手順をご紹介します。Elastic Agentはインストールした上でログファイルを収集するところまでを実施します。

参考にしたElasticのインストールドキュメントは最後に掲載しますが、本記事ではそこから必要最小限の手順で実践したものです。

---
[重要]今回は試用環境や勉強用環境という目的で、一つのマシンで手順が完結するようにしています。実際のシステムとして使う際は正しく複数台構成等にして設計ください。以下のドキュメントが参考になります。
https://www.elastic.co/guide/en/elasticsearch/reference/current/high-availability.html

また、実際にシステムとして導入する際は、どちらかというとクラウド版のElastic Cloudを使えば上記のような設計が大分楽になるので、そちらの方がお勧めです。

---


# 今回の試用環境の構成について
Elastic Agentを使う場合、Fleet Serverを別途立てて、そこからElastic Agentに何の情報を収集するかを指示してもらうのが通常の構成です。以下Elasticのドキュメンテーションからの引用です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109197/38087ab6-22c6-80af-16f1-4e02e013c0e1.png)
出典：https://www.elastic.co/guide/en/fleet/8.5/fleet-server.html

ログ収集のためのElastic Agentは通常はElasticsearchとは別のサーバにインストールします。下のような感じです。(Elastic AgentがFilebeatを内部で起動してログ収集しています）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109197/3bd84ff7-f252-9345-7dde-86f8d2ddfc31.png)

ただ、本手順は一つのマシンで全て試せるように、下のような構成で実施します。（本格的に利用する際はこのような構成はおすすめではありません）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109197/d54c074b-18b8-ded2-b627-a218f6f11b61.png)

# 今回使用するマシン環境
AWSのEC2を使いまして、Amazon Linux 2 Kernel 5.10のAMIを使いました。ただ、CentosやRHELでも同様の手順でできるはずです。
スペックはt2.medium (2 vCPU, 4GB Mem )にしています。

手順で利用するツールを事前にインストールしておきます　
`sudo yum install perl-Digest-SHA -y`
`sudo yum install wget -y`

# Elasticsearchのインストール

以下のコマンドでRPMにてElasticsearchをインストールしてください。
```shell:
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.5.3-x86_64.rpm
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.5.3-x86_64.rpm.sha512
shasum -a 512 -c elasticsearch-8.5.3-x86_64.rpm.sha512 
sudo rpm --install elasticsearch-8.5.3-x86_64.rpm
```

上記最後のコマンドの出力として色々表示されますが、今回の手順として最低限見ておくのは以下の２箇所です。

パスワードが生成されているので、メモしてください。後でKibanaにログインする際に使用します。
```text:出力
The generated password for the elastic built-in superuser is : <password>
```

以下のコマンドでsystemdに登録し、Elasticsearchを起動します。
```shell
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service
```

起動後、Elasticsearchインストールベース内の以下のコマンドを実行して後ほどKibanaがElasticsearchにアクセスするためのトークンを発行します。出力されるトークン文字列は後ほど使用しますので、メモしておいてください。
```sh:
sudo /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
```

# Kibanaのインストール
KibanaもRPMをダウンロードして、インストールしてください。
```
wget https://artifacts.elastic.co/downloads/kibana/kibana-8.5.3-x86_64.rpm
shasum -a 512 kibana-8.5.3-x86_64.rpm 
sudo rpm --install kibana-8.5.3-x86_64.rpm
```

以下でsystemd登録し、そしてKibanaを起動します。
```
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable kibana.service
```

Kibanaをスタートさせる前に、バインドさせるネットワークインターフェースについての設定変更を行います。
```shell: sudo vi /etc/kibana/kibana.yml
# =================== System: Kibana Server ===================
# Kibana is served by a back end server. This setting specifies the port to use.
#server.port: 5601

# Specifies the address to which the Kibana server will bind. IP addresses and host names are both valid values.
# The default is 'localhost', which usually means remote machines will not be able to connect.
# To allow connections from remote users, set this parameter to a non-loopback address.
#server.host: "localhost"

```
上記 `#server.host: "localhost"` を `server.host: "0.0.0.0"`に変更し、リモートからKibanaにアクセスできるようにしてください。
その後、下のコマンドでKibanaをスタートさせます。

```
sudo systemctl start kibana.service
```

Kibana起動後、`http://<マシンのip>:5601/`にブラウザでアクセスし、以下の画面では前の手順でメモしておいたトークンをペーストしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109197/9f4c12a5-f7ba-81d5-5637-a1b93d2f69c9.png)

次の画面でVerification Codeの入力を求められます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109197/97c8bfc9-c852-93f7-f76a-416ba2aeaf06.png)
このコードは以下のコマンドを実行して取得し、数字をWeb画面に入力してください。
```
sudo /usr/share/kibana/bin/kibana-verification-code
```

次にログイン画面に遷移されるので、ここでは`username: elastic` , ` password: Elasticsearchインストール時出力されてメモしたパスワード` を使ってログインしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109197/9cbeb43a-13b3-cb58-14fd-b8be33e9770f.png)

ログイン後、以下の画面が表示されたら、今回は`Explore on my own`を押してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109197/6dde57e0-50c8-4f0e-8678-13509e98939f.png)

# Fleet Serverのインストール
左のメニューを開き、下の方のManagement配下のFleetを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109197/6adbaaf9-784c-6414-9691-6f5ba403faca.png)

Add Fleet Serverボタンをクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109197/722446d9-fd5d-29ea-b8a3-b0448bae9f37.png)

Fleet Server hostには、`https://<ホストのIP>:8220`　という形式で入力してください。（IPはElastic AgentがFleet ServerにアクセスできるIPを設定します）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109197/a76d3d9c-4a4c-ec0b-4d8f-dc3c0a409ba0.png)

Fleet Serverをインストールするコマンドが表示されるので、コピーしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109197/14a1e5f4-402c-84cd-f9b3-628625dc3727.png)

サーバー上でコマンドをペーストして、実行してください。Elastic Agentがダウンロードされ、その中でFleet Serverが起動します。
```sh:サンプル（上で自分のコピーしたものを使ってください）
curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.5.3-linux-x86_64.tar.gz
tar xzvf elastic-agent-8.5.3-linux-x86_64.tar.gz
cd elastic-agent-8.5.3-linux-x86_64
sudo ./elastic-agent install \
  --fleet-server-es=https://172.31.6.148:9200 \
  --fleet-server-service-token=AAEAAWVsYXN0aWMvZmxlZXQtc2VydmVyL3Rva2VuLTE2NzIyMDQyOTc3NzQ6QkFKUDhoLWRSemVxT0hhQ2dVSlpMZw \
  --fleet-server-policy=fleet-server-policy \
  --fleet-server-es-ca-trusted-fingerprint=ec2529ac3379673f4c5c964ae69c37fa27fbf2a7f594c357915882ed88154d79
```

```text:出力
Successfully enrolled the Elastic Agent.
Elastic Agent has been successfully installed.
```
Tips:上記見て分かる通り、Fleet Server自身はElastic Agentの一部としてインストールされています。

コマンド実行後、以下のように表示されればFleet ServerからElasticsearchへの接続が成功しました。**Continue enrolling ボタンを今回は押さないでください。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109197/383a4a48-2c48-c4eb-689f-76a3767fa2ca.png)

# ログ収集のためのIntegrationsを追加
図の通り、Agent policiesタブを選択し、Fleet Server Policyができているので、それをクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109197/e12b2816-97e0-adaa-7674-b105092718b6.png)

Add integrationsボタンをクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109197/b08b6ce1-0395-ba11-aa10-1ec3c15cfa21.png)

Integrationsの画面では、custom logsで検索し、Custom Logsのボックスをクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109197/fd75bb84-e094-59a9-4f9b-3409419fb6a9.png)

`Add Custom Logs`のボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109197/6f85ef85-fc5b-a439-1494-4cddca8be136.png)

Log file pathに、ログ収集したいファイルパスを指定します。（本手順では後ほど、このログファイルを作成します。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109197/ef7e1366-2eb1-facd-7070-99ea89c94bb3.png)

ここではそのままDeployを進めます。これでログ収集の設定がElastic Agentに反映されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109197/1a48d873-a5c7-afbd-e5f3-bf92f1cc30a5.png)

# ログ収集を試す
マシンのターミナルで、以下のようにして先ほど指定したログのファイルパスにログを出すようにします。5秒おきに日付をログしてます。
```shell:terminal
while true
do
date >> mylog.log
sleep 5
done
```

```text:出力
Wed Dec 28 06:36:56 AM UTC 2022
Wed Dec 28 06:37:01 AM UTC 2022
...
```
左メニューからKibanaのDiscoverを開いてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109197/dae50bd6-35bf-a0a7-048c-f37d8972233f.png)

上のサーチバーに`log.file.path : "/home/ec2-user/mylog.log"　のようにログのパスを入力すると、収集されたログデータが出てきます。ただ、見ての通りログメッセージはこのままだとまだ確認できません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109197/8fa8dd01-5534-1d6f-f2f9-0fb506035743.png)

ログメッセージはmessageフィールドに格納されているので、左側でmessageのプラスボタンを押し、これだけ表示するようにしましょう。

結果、このようにログが随時収集されていることが確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109197/15b6c708-de41-ba2d-0b45-3d2ca276c169.png)

# 参考にしたドキュメント

参考にした製品ドキュメントは以下の通りです。

Elasticsearchのインストール
https://www.elastic.co/guide/en/elasticsearch/reference/8.5/rpm.html#install-rpm

Kibanaのインストール
https://www.elastic.co/guide/en/kibana/8.5/rpm.html#install-rpm

#　終わり
うまくできましたでしょうか？ 同じようなOSのマシンさえ用意できれば、ステップ通り簡単に試せたはずです。Elastic Agentのところは、慣れが必要なところなので、この環境を参考にぜひ色々触ってみてください。