この記事は更新から24ヶ月以上経過しているため、最新の情報を別途確認することを推奨いたします。
初めに
こんにちは、パーソルプロセス&テクノロジーの下谷です。
Logstashとは、Elastic社によって作られたオープンソースのデータ収集ツールで、Elasticsearchにデータを取り込む際によく登場してきます。
実はAzure Sentinelでカスタムコネクタを作成する際に、このLogstashを使用する場合があり、私もAzure Sentinelを検証する過程で触りました。
今回はLogstashの特徴と、その構築方法について説明したいと思います。
Logstashの特徴
Logstashは色々な形式のデータの取り込みから、整形、そして、様々なサービスに対して出力することが可能です。
データの取り込み(input)、整形(filter)、出力(output)を1つのパイプラインとして、パイプラインを定義するファイルでそれぞれの設定を記載し、
実行することで、input、filter、output のそれぞれがが定義された内容で順に実行されます。
input、filter、outputはそれぞれ複数のプラグインを持ち、それらをインストールして、パイプラインファイルで使用することで、
様々なサービスからデータを取り込み、また出力することが可能となります。
プラグインの詳細は以下の公式ページを参照してください。
(※個人で作成されたプラグインもありますので、必要に応じてGitHubで検索するのも1つの手段です。)
inputプラグイン:https://www.elastic.co/guide/en/logstash/current/input-plugins.html
filterプラグイン:https://www.elastic.co/guide/en/logstash/current/filter-plugins.html
outputプラグイン:https://www.elastic.co/guide/en/logstash/current/output-plugins.html
Logstashサーバーの構築
1)事前準備(javaのインストール)
logstashを使用するためには、Java8、Java11、Java15のいずれかが必要です。
また、ここでは記載ませんが、Java15については、別途設定が必要となります。
今回はOpenJDK 11 を使用します。(OSはUbuntu 20.04を使います。)
OpenJDK 11は以下のコマンドを使って、インストールします。
sudo apt install openjdk-11-jdk |
2)Logstashのインストール
初めにlogstashをインストール可能なリポジトリを持ってくる必要があるので、以下コマンドを実行します。
wget –qO – https://artifacts.elastic.co/GPG–KEY–elasticsearch | sudo apt–key add – sudo apt–get install apt–transport–https echo “deb https://artifacts.elastic.co/packages/7.x/apt stable main” | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list |
後は以下コマンドを実行すれば、インストールが完了します。
sudo apt-get update && sudo apt-get install logstah |
※Cent OSの場合は以下コマンドを実行します。
vi /etc/yum.repos.d/logstash.repo
#以下内容を/etc/yum.repos.d/logstash.repo ファイルの中に記載して、:wqで保存。
sudo yum install logstashsudo rpm –import https://artifacts.elastic.co/GPG-KEY-elasticsearc |
3)Logstashの確認
インストールが完了したので、最後に少し触ってみます。
logstashは/usr/share/logstash ディレクトリ配下に諸々が格納され、コマンドは/usr/share/logstash/bin ディレクトリ配下に格納されます。
従って、まずは以下コマンドでそのディレクトリに移動します。
cd /usr/share/logstash |
続いて、Logstashが正常に動くかを以下コマンドを実行して確認します。
bin/logstash -e ‘input { stdin { } } output { stdout {} }’ |
上記コマンドを実行すると、以下の図のような文が表示され、①が表示されたら、パイプラインの準備が完了となります。
今回はデータの取り込みを標準入力、出力が標準出力としていますので、②のように「Hello」と打ってEnterを押すと、③が表示されます。
※Logstashを起動した際に、以下図の①のようなエラーが出る場合があります。こちらのエラーは権限回りのエラーとなりますので、
bin/logstah コマンドをsudoを使ってスーパーユーザーで実行するか、以下コマンドを実行して一般ユーザーで使えるようにする必要があります。
(exportコマンド等を使って、PATHを通す場合は一般ユーザーを使うことになるので、以下コマンドを実行する必要があります。)
sudo chmod -R 777 /usr/share/ |
【エラー内容】
[FATAL] 2021-05-28 02:42:56.926 [main] runner – An unexpected error occurred! {:error=>#<ArgumentError: Path “/usr/share/logstash/data” must be a writable directory. It is not writable.>, :backtrace=>[“/usr/share/logstash/logstash-core/lib/logstash/settings.rb:530:in `validate'”, “/usr/share/logstash/logstash-core/lib/logstash/settings.rb:290:in `validate_value'”, “/usr/share/logstash/logstash-core/lib/logstash/settings.rb:201:in `block in validate_all'”, “org/jruby/RubyHash.java:1415:in `each'”, “/usr/share/logstash/logstash-core/lib/logstash/settings.rb:200:in `validate_all'”, “/usr/share/logstash/logstash-core/lib/logstash/runner.rb:326:in `execute'”, “/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/clamp-0.6.5/lib/clamp/command.rb:67:in `run'”, “/usr/share/logstash/logstash-core/lib/logstash/runner.rb:274:in `run'”, “/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/clamp-0.6.5/lib/clamp/command.rb:132:in `run'”, “/usr/share/logstash/lib/bootstrap/environment.rb:88:in `<main>'”]} |
最後に
Logstashのサーバーの構築としては以上となります。実際にLogstashを使っていく場合、input、filter、outputを定義するためのパイプラインファイルを作成して、それをベースにLogstashを起動していくのですが、こちらについては、また別の機会で紹介できたらと思います。