9. Logstashの導入¶
この章では、Senju/QA 全文検索サーバーの稼働に必要なソフトウェアである、Logstashを導入するための手順について説明します。
9.1. Logstashの概要¶
Logstashは、サーバー間のデータを処理するための軽量パイプラインツールです。 商用利用可能なオープンソースライセンスであるApache 2.0 licenseで提供されています。
Senju/QAではLogstashを利用して、DBサーバーおよび全文検索サーバー間のデータの同期を行います。
9.2. 対象バージョン¶
Senju/QA 全文検索サーバーではLogstash 7.16.2 を使用します。 ここでは、Logstash 7.16.2を例として導入手順を説明します。
注釈
サポート対象となるLogstashのバージョンについては リリースノート を参照してください。
9.3. Logstashのインストール¶
Windows
Logstashのインストール用zipファイルを入手して、インストールするサーバーの任意のフォルダに格納します。
ダウンロードURL:対象ファイル:logstash-7.16.2-windows-x86_64.zip
(ここでは
logstash-7.16.2-windows-x86_64.zipをC:\Temp配下に格納した場合の手順を例として説明します。ほかのフォルダに格納した場合は適宜各コマンドで指定するパスを変更してください。)Logstashのサービス化に使用するNSSMのインストール用zipファイルを入手して、インストールするサーバーの任意のフォルダに格納します。
ダウンロードURL:対象ファイル:nssm-2.24.zip
(ここでは
nssm-2.24.zipをC:\Temp配下に格納した場合の手順を例として説明します。ほかのフォルダに格納した場合は適宜各コマンドで指定するパスを変更してください。)インストールするサーバーに管理者権限のアカウントでログインします。
- zipファイルをCドライブ直下に展開します。
PS C:\> Expand-Archive -Path C:\Temp\logstash-7.16.2-windows-x86_64.zip -Destination C:\
注釈
C:\logstash-7.16.2フォルダが作成されます。
- Logstash サービスを登録します。
PS C:\> Expand-Archive -Path C:\Temp\nssm-2.24.zip -Destination C:\Temp\ PS C:\> Copy-Item -Path C:\Temp\nssm-2.24\win64\nssm.exe -Destination C:\logstash-7.16.2\bin\ PS C:\> C:\logstash-7.16.2\bin\nssm.exe install logstash C:\logstash-7.16.2\bin\logstash.bat PS C:\> C:\logstash-7.16.2\bin\nssm.exe set logstash AppDirectory C:\logstash-7.16.2\bin PS C:\> C:\logstash-7.16.2\bin\nssm.exe set logstash AppParameters "-f C:\logstash-7.16.2\config\logstash-definitions" PS C:\> C:\logstash-7.16.2\bin\nssm.exe set logstash DisplayName logstash PS C:\> Get-Service -Name 'logstash' | select -property status,name,starttype Status Name StartType ------ ---- --------- Stopped logstash Automatic
JDBC用のdriverを入手して、インストールするサーバーの任意のディレクトリに格納します。
ダウンロードURL:対象ファイル:postgresql-42.3.1.jar
(ここでは
postgresql-42.3.1.jarをC:Temp配下に格納した場合の手順を例として説明します。ほかのフォルダに格納した場合は適宜各コマンドで指定するパスを変更してください。)- JDBC用のdriver格納用フォルダを作成します。
PS C:\> New-Item C:\logstash-senjuqa\lib -ItemType Directory
- JDBC用のdriverを所定のフォルダ配下に格納します。
PS C:\> Copy-Item -Path C:\Temp\postgresql-*.jar -Destination C:\logstash-senjuqa\lib\
- 設定ファイル
C:\logstash-7.16.2\config\logstash.ymlを以下の通り更新します。 queue.typeをmemoryからpersistedに変更します。#queue.type: memory queue.type: persisted
注釈
この設定を変更しないと、異常発生時にLogstashのデータ登録イベントが抜けてしまう恐れがあります。
- 設定ファイル
- Logstashのログ設定ファイルを編集します。
- 対象ファイル:
C:\logstash-7.16.2\config\log4j2.properties
- 以下のように設定を変更します。
#appender.rolling.strategy.max = 30 appender.rolling.strategy.action.type = Delete appender.rolling.strategy.action.basepath = ${sys:ls.logs} appender.rolling.strategy.action.condition.type = IfFileName appender.rolling.strategy.action.condition.glob = logstash-${sys:ls.log.format}-* appender.rolling.strategy.action.condition.nested_condition.type = IfLastModified appender.rolling.strategy.action.condition.nested_condition.age = 7D
注釈
この設定を追加することで、7日間変更がない古いログを削除するようになります。ログ削除の設定を追加しない場合、デフォルトでは古いログファイルが残り続けるため C:logstash-7.16-1logs フォルダのディスク容量を圧迫してしまう可能性があります。
Linux
- インストール用のrpmファイルを入手して、インストールするサーバーの任意のディレクトリに格納します。
- 対象ファイル:
logstash-7.16.2.rpm
(ここでは
logstash-7.16.2.rpmを/tmp/配下に格納した場合の手順を例として説明します。ほかのディレクトリに格納した場合は適宜各コマンドで指定するパスを変更してください。)
インストールするサーバーに管理者権限のアカウントでログインします。
- rpmコマンドを実行してパッケージをインストールします。
# rpm -ivh /tmp/logstash-[0-9]*.rpm
- 自動起動の設定を行います。
# systemctl daemon-reload # systemctl enable logstash
- Senju/QAのインストールメディアから、JDBC用のdriverを入手して、インストールするサーバーの任意のディレクトリに格納します。
- 対象ファイル:
postgresql-42.3.1.jar
(ここでは
postgresql-42.3.1.jarを/tmp/配下に格納した場合の手順を例として説明します。ほかのディレクトリに格納した場合は適宜各コマンドで指定するパスを変更してください。)
- JDBC用のdriver格納用ディレクトリーを作成します。
# mkdir -p /opt/logstash/lib
- JDBC用のdriverを所定のディレクトリー配下に格納し、所有者およびグループをlogstashユーザーに変更します。
# \cp -f /tmp/postgresql-*.jar /opt/logstash/lib/ # chown -R logstash:logstash /opt/logstash
- 設定ファイル
/etc/logstash/logstash.ymlを以下の通り更新します。 queue.typeをmemoryからpersistedに変更します。# sed -i 's/^queue.type:.*//g' /etc/logstash/logstash.yml # echo 'queue.type: persisted' >> /etc/logstash/logstash.yml
注釈
この設定を変更しないと、異常発生時にLogstashのデータ登録イベントが抜けてしまう恐れがあります。
- 設定ファイル
- Logstashのログ設定ファイルを編集します。
- 対象ファイル:
/etc/logstash/log4j2.properties
- 以下のように設定を変更します。
#appender.rolling.strategy.max = 30 appender.rolling.strategy.action.type = Delete appender.rolling.strategy.action.basepath = ${sys:ls.logs} appender.rolling.strategy.action.condition.type = IfFileName appender.rolling.strategy.action.condition.glob = logstash-${sys:ls.log.format}-* appender.rolling.strategy.action.condition.nested_condition.type = IfLastModified appender.rolling.strategy.action.condition.nested_condition.age = 7D(コマンド例)
# sed -i 's/^\(appender\.rolling\.strategy\.max\s*=.*\)/#\1\ appender.rolling.strategy.action.type = Delete\ appender.rolling.strategy.action.basepath = ${sys:ls.logs}\ appender.rolling.strategy.action.condition.type = IfFileName\ appender.rolling.strategy.action.condition.glob = logstash-${sys:ls.log.format}-*\ appender.rolling.strategy.action.condition.nested_condition.type = IfLastModified\ appender.rolling.strategy.action.condition.nested_condition.age = 7D/g' /etc/logstash/log4j2.properties
注釈
この設定を追加することで、7日間変更がない古いログを削除するようになります。ログ削除の設定を追加しない場合、デフォルトでは古いログファイルが残り続けるため /var/log/logstash ディレクトリのディスク容量を圧迫してしまう可能性があります。
9.4. データ収集用sqlファイルの導入¶
Windows
- データ収集用sqlファイル格納用フォルダを作成します。
PS C:\> New-Item C:\logstash-senjuqa\sql -ItemType Directory
- データ収集用sqlファイルを所定のフォルダ配下に格納します。
PS C:\> Copy-Item -Path C:\Temp\Senju_Quick_Assistant\conf\logstash\*.sql -Destination C:\logstash-senjuqa\sql\
Linux
- データ収集用sqlファイル格納用ディレクトリーを作成します。
# mkdir -p /opt/logstash/sql
- データ収集用sqlファイルを所定のディレクトリー配下に格納し、所有者およびグループをlogstashユーザーに変更します。
# \cp -f /tmp/Senju_Quick_Assistant/conf/logstash/*.sql /opt/logstash/sql/ # chown -R logstash:logstash /opt/logstash
9.5. パイプライン定義ファイルの導入¶
各種サーバー間のデータを同期するためのパイプライン定義ファイルの導入手順を説明します。
インストールするサーバーに管理者権限のアカウントでログインします。
Logstashパイプライン定義ファイルを格納します。
Windows
PS C:\> New-Item C:\logstash-7.16.2\config\logstash-definitions -ItemType Directory PS C:\> Copy-Item -Path C:\Temp\Senju_Quick_Assistant\conf\logstash\senjuqa_pages.conf.template -Destination C:\logstash-7.16.2\config\logstash-definitions\senjuqa_pages.conf
Linux
# \cp -f /tmp/Senju_Quick_Assistant/conf/logstash/senjuqa_pages.conf.template /etc/logstash/conf.d/senjuqa_pages.conf # chown -R logstash:logstash /etc/logstash/conf.d
- Logstashパイプライン定義ファイルを以下の通り更新します。
- 対象ファイル:
Windows
C:\logstash-7.16.2\config\logstash-definitions\senjuqa_pages.conf
Linux
/etc/logstash/conf.d/senjuqa_pages.conf
jdbc_connection_stringに記載されているPostgreSQLへの接続情報について、[hostname]:[port]/[dbname]から、Senju/QA DBサーバーホスト名:Senju/QA DBサーバーポート番号/Senju/QAデータベース名に変更します。(Senju/QA DBサーバーホスト名を
sdb00001に、Senju/QA DBサーバーポート番号を5432に、Senju/QAデータベース名senjuqaに変更する場合の例)jdbc_connection_string => "jdbc:postgresql://sdb00001:5432/senjuqa"
jdbc_driver_libraryに記載されているJDBCライブラリファイルのパスについて、[jdbc_driver_library_path]から、 実際にC:\logstash-senjuqa\lib(Windows) あるいは/opt/logstash/lib(Linux) 配下に格納されているpostgresql-*.jarファイルのパスに変更します。Windows
jdbc_driver_library => "C:\logstash-senjuqa\lib\postgresql-42.3.1.jar"
Linux
jdbc_driver_library => "/opt/logstash/lib/postgresql-42.3.1.jar"
注釈
利用するjdbcライブラリのバージョンが異なるバージョンは実際のものに合わせてパスを指定してください。
jdbc_userに記載されているSenju/QAデータベースユーザー名について、[username]から、正しいユーザー名に変更します。(Senju/QAデータベースユーザー名を
senjuqaに変更する場合の例)jdbc_user => "senjuqa"
jdbc_passwordに記載されているSenju/QAデータベースパスワードについて、[password]から、正しいパスワードに変更します。(Senju/QAデータベースパスワードを
qapassに変更する場合の例)jdbc_password => "qapass"
last_run_metadata_pathに記載されているJDBCライブラリファイルのパスについて、[last_run_metadata_path]から、 実際にC:\logstash-senjuqa\.senjuqa_pages_last_run_fil(Windows) あるいは/opt/logstash/.senjuqa_pages_last_run_fil(Linux) に変更します。Windows
last_run_metadata_path => "C:\logstash-senjuqa\.senjuqa_pages_last_run_fil"
Linux
last_run_metadata_path => "/opt/logstash/.senjuqa_pages_last_run_fil"
statement_filepathに記載されているJDBCライブラリファイルのパスについて、[statement_filepath]から、 実際にC:\logstash-senjuqa\sql(Windows) あるいは/opt/logstash/sql(Linux) 配下に格納されているsenjuqa_pages.sqlファイルのパスに変更します。Windows
statement_filepath => "C:\logstash-senjuqa\sql\senjuqa_pages.sql"
Linux
statement_filepath => "/opt/logstash/sql/senjuqa_pages.sql"
hostsに記載されているElasticsearchへの接続情報について、[hostname]:[port]から、Senju/QA 全文検索サーバーのホスト名:ElasticsearchのREST APIポート番号に変更します。(Senju/QA 全文検索サーバーのホスト名を
srec00001に、ElasticsearchのREST APIポート番号を9200に変更する場合の例)hosts => [ "srec00001:9200" ]
注釈
ElasticsearchのREST APIポート番号のデフォルト値は9200です。
Logstashを起動します。
Windows
PS C:\> Start-Service -Name 'logstash'
注釈
Windows管理ツール[サービス]から開始することもできます。logstashを右クリックし、コンテキストメニューの[開始]をクリックします。Linux
# systemctl start logstash
以下のコマンドを実行して、logstashサービスが正常に動作していることを確認します。
Windows
PS C:\> Invoke-RestMethod -Method Get -Uri 'http://localhost:9600/?pretty' | ConvertTO-JSON { "host": "senjuqa01", "version": "7.16.2", "http_address": "127.0.0.1:9600", "id": "7abbf9d9-c94c-4b95-abc2-ffbf6ba89ee0", "name": "senjuqa01", "ephemeral_id": "106da6ac-d44b-41fa-b2cf-471f0d67be5e", "status": "green", "snapshot": false, "pipeline": { "workers": 2, "batch_size": 125, "batch_delay": 50 }, "build_date": "2021-12-11T00:29:08Z", "build_sha": "b2d1d11381460fce1fed2f88d8f5eef44a29306a", "build_snapshot": false }Linux
# curl -XGET 'http://localhost:9600/?pretty' { "host" : "sdb00001", "version" : "7.16.2", "http_address" : "127.0.0.1:9600", "id" : "2f157c48-8f02-41ab-995e-50c1d0440336", "name" : "sqaaio07", "ephemeral_id" : "a7647914-af98-4d62-bd70-0aeafc697ef7", "status" : "green", "snapshot" : false, "pipeline" : { "workers" : 1, "batch_size" : 125, "batch_delay" : 50 }, "build_date" : "2020-09-01T23:34:13+00:00", "build_sha" : "ffb96ff994a3669e94619451440add1514aa3391", "build_snapshot" : false }注釈
レスポンスが確認できなかった場合はしばらく待ってから再度試してください。