はじめに
日頃、AWSで構築したシステムやAWSサービスのログをElasticsearchに取り込んで監視や分析をしています。
Elasticsearchへのログ取り込み方法は、多くのやり方がありますが
自分はLogstashが好きなので使い続けています。
Logstash 6.7以降では、Amazon Linux2に対応しています。
また、同様に6.7以降では、OpenJDK11に対応しています。
そこで、Amazon Linux2でOpenJDK11を使ってLogstashを構築する手順を備忘録的に書きました。
【参考】
・ Product and Operating System
・ Logstash and JVM
利用環境
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
に出力されます。
[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
・ logstash-oss download
実施手順
- 以下の手順で検証を実施します。
1. OpenJDK11のインストール
2. OSS版Logstashのインストール
3. 追加プラグインのインストール
4. サービス登録とサービス起動
1. OpenJDK11のインストール
-
yum
コマンドでAmazon Corretto 11をインストールします。
$ sudo yum install java-11-amazon-corretto
- インストールが完了するとデフォルトでインストールしたOpenJDK11がセットされます。
$ 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公式サイトのダウンロードページからリンクをコピーします。
-
wget
コマンドでコピーしたリンク先からRPMパッケージをダウンロードします。 - ダウンロードしたRPMパッケージを
rpm
コマンドでインストールします。
$ 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
コマンドで確認します。
$ yum list installed | grep logstash
logstash-oss.noarch 1:7.5.2-1 installed
3. 追加プラグインのインストール
- logstashの追加プラグインをインストールしてみます。(今回は、
logstash-input-cloudwatch_logs
を入れます)
$ 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です。
$ sudo /usr/share/logstash/bin/logstash-plugin list 'logstash-input-cloudwatch_logs'
logstash-input-cloudwatch_logs
- 以下のような警告メッセージが表示されます。Java9以上を利用する場合に警告されます。無視しても動作には影響は出ません。
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をサービス登録します。
$ 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
コマンドで起動します。
$ sudo systemctl start logstash
-
systemctl status logstash
コマンドの結果、**active (running)**となっていればOKです。
$ 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を構築する場合は、ぜひ参考にしてみてください!