Amazon Corretto 11で構築するLogstash

## はじめに
日頃、AWSで構築したシステムやAWSサービスのログをElasticsearchに取り込んで監視や分析をしています。

Elasticsearchへのログ取り込み方法は、多くのやり方がありますが
自分はLogstashが好きなので使い続けています。

Logstash 6.7以降では、Amazon Linux2に対応しています。
また、同様に6.7以降では、OpenJDK11に対応しています。

そこで、Amazon Linux2でOpenJDK11を使ってLogstashを構築する手順を備忘録的に書きました。

**【参考】**
・ [Product and Operating System][00]
・ [Logstash and JVM][01]

## 利用環境
| product | version |
|---------|---------|
| logstash | 7.5.2 |
| Java | 11.0.6 |
| OS(EC2) | Amazon Linux2 (t3.small) |
| AMI ID | ami-011facbea5ec0363b |
| Region | ap-noutheast-1 |
※投稿時点における最新版を採用しています。

## 前提として
OpenJDK11には、AWSが開発した独自OpenJDKとして
JavaSE標準と互換認定されている**Amazon Corretto 11**を採用しています。

また、LogstashはElasticラインセス版ではなく、Apache2.0ライセンス版を採用しています。

その理由は、次期メジャーバージョンの8系では
**OSS版Elasticsearch**には**LogstashもOSS版でないとデータを投入できなくなる**からです。

現行バージョン7系のElasticライセンス版Logstashを使って、Amazon ESにデータ投入しようとすると
以下のようなエラーがLogstashの`logstash-plain.log`に出力されます。

```text:logstash-plain.log
[2020-02-04T03:42:38,051][WARN ][logstash.outputs.elasticsearch][XXX] DEPRECATION WARNING: Connecting to an OSS distribution of Elasticsearch using the default distribution of Logstash will stop working in Logstash 8.0.0. Please upgrade to the default distribution of Elasticsearch, or use the OSS distribution of Logstash {:url=>"https:// search-test-hoge.ap-northeast-1.es.amazonaws.com:443/"}
```

**【参考】**
・ [Amazon Corretto][02]
・ [logstash-oss download][03]

## 実施手順
- 以下の手順で検証を実施します。

　1. OpenJDK11のインストール
　2. OSS版Logstashのインストール
　3. 追加プラグインのインストール
　4. サービス登録とサービス起動

### 1. OpenJDK11のインストール
- `yum`コマンドでAmazon Corretto 11をインストールします。

```text:AmazonCorretto11_Install
$ sudo yum install java-11-amazon-corretto
```

- インストールが完了するとデフォルトでインストールしたOpenJDK11がセットされます。 

```test:Javaバージョン確認
$ java -version
openjdk version "11.0.6" 2020-01-14 LTS
OpenJDK Runtime Environment Corretto-11.0.6.10.1 (build 11.0.6+10-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.6.10.1 (build 11.0.6+10-LTS, mixed mode)
```

### 2. OSS版Logstashのインストール
- Elastic公式サイトの[ダウンロードページ][03]からリンクをコピーします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/1cdad699-ed62-ef91-2f9a-d0653e588304.png)

- `wget`コマンドでコピーしたリンク先からRPMパッケージをダウンロードします。
- ダウンロードしたRPMパッケージを`rpm`コマンドでインストールします。

```text:logstash-oss_install
$ sudo wget https://artifacts.elastic.co/downloads/logstash/logstash-oss-7.5.2.rpm
$ sudo rpm -ivh logstash-oss-7.5.2.rpm
```

- インストール完了後、`yum list installed`コマンドで確認します。

```test:logstashインストール確認
$ yum list installed | grep logstash
logstash-oss.noarch                   1:7.5.2-1                      installed  
```

### 3. 追加プラグインのインストール
- logstashの追加プラグインをインストールしてみます。(今回は、`logstash-input-cloudwatch_logs`を入れます)

```text:plugin_install
$ sudo /usr/share/logstash/bin/logstash-plugin install logstash-input-cloudwatch_logs
Validating logstash-input-cloudwatch_logs
Installing logstash-input-cloudwatch_logs
Installation successful
```

- `logstash-plugin list`コマンドで導入したプラグイン名を指定します。表示されればOKです。

```text:pluginインストール確認
$ sudo /usr/share/logstash/bin/logstash-plugin list 'logstash-input-cloudwatch_logs'
logstash-input-cloudwatch_logs
```

- 以下のような警告メッセージが表示されます。Java9以上を利用する場合に警告されます。無視しても動作には影響は出ません。

```text:警告メッセージ
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.headius.backport9.modules.Modules to method java.lang.Object.finalize()
WARNING: Please consider reporting this to the maintainers of com.headius.backport9.modules.Modules
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
```

### 4. サービス登録とサービス起動
- `systemctl enable`コマンドでlogstashをサービス登録します。

```text:サービス登録
$ sudo systemctl daemon-reload
$ sudo systemctl enable logstash
Created symlink from /etc/systemd/system/multi-user.target.wants/logstash.service to /etc/systemd/system/logstash.service.
```

- `systemctl start logstash`コマンドで起動します。

```text:Logstash起動
$ sudo systemctl start logstash
```

- `systemctl status logstash`コマンドの結果、**active (running)**となっていればOKです。

```text:Logtashステータス確認
$ sudo systemctl status logstash
● logstash.service - logstash
   Loaded: loaded (/etc/systemd/system/logstash.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2020-02-09 07:24:51 UTC; 4s ago
 Main PID: 32207 (java)
   CGroup: /system.slice/logstash.service
           └─32207 /bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djruby.compile.invokedynamic=true -Djruby.jit.threshold=0 -Djruby.regexp.interruptible=...

Feb 09 07:24:51 ip-172-31-93-30.ec2.internal systemd[1]: Started logstash.
Feb 09 07:24:51 ip-172-31-93-30.ec2.internal systemd[1]: Starting logstash...
Feb 09 07:24:51 ip-172-31-93-30.ec2.internal logstash[32207]: OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
Feb 09 07:24:53 ip-172-31-93-30.ec2.internal logstash[32207]: WARNING: An illegal reflective access operation has occurred
Feb 09 07:24:53 ip-172-31-93-30.ec2.internal logstash[32207]: WARNING: Illegal reflective access by com.headius.backport9.modules.Modules (file:/usr/share/logstash/logstash-core/lib/jars/jruby-complete-9.2.8.0.jar) to field java.io.FileDescriptor.fd
Feb 09 07:24:53 ip-172-31-93-30.ec2.internal logstash[32207]: WARNING: Please consider reporting this to the maintainers of com.headius.backport9.modules.Modules
Feb 09 07:24:53 ip-172-31-93-30.ec2.internal logstash[32207]: WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
Feb 09 07:24:53 ip-172-31-93-30.ec2.internal logstash[32207]: WARNING: All illegal access operations will be denied in a future release
```

## まとめ
Amazon Corretto 11でもちゃんとLogstashが起動しましたね。
最近は、本記事の方法でLogstashを構築し、特に問題なく順調に利用出来ています^^v

これからAWS環境でLogstashを構築する場合は、ぜひ参考にしてみてください！

[00]:https://www.elastic.co/support/matrix#matrix_os "Product and Operating System"
[01]:https://www.elastic.co/support/matrix#matrix_jvm "Logstash and JVM"
[02]:https://aws.amazon.com/jp/corretto/ "Amazon Corretto"
[03]:https://www.elastic.co/downloads/logstash-oss "logstash-oss download"