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
インストール用のzipファイルを入手して、インストールするサーバーの任意のフォルダに格納します。
ダウンロードURL:対象ファイル:logstash-7.16.2-windows-x86_64.zip
(ここでは
logstash-7.16.2-windows-x86_64.zip
をC:\Temp
配下に格納した場合の手順を例として説明します。ほかのフォルダに格納した場合は適宜各コマンドで指定するパスを変更してください。)インストールするサーバーに管理者権限のアカウントでログインします。
- zipファイルをCドライブ直下に展開します。
PS C:\> Expand-Archive -Path C:\Temp\logstash-7.16.2-windows-x86_64.zip -Destination C:\ PS C:\> Rename-Item C:\logstash-7.16.2 C:\logstash
注釈
C:\logstash
フォルダが作成されます。
- タスクスケジューラに Logstash タスクを登録します。
PS C:\> $action = New-ScheduledTaskAction -Execute "C:\logstash\bin\logstash.bat" -Argument "-f C:\logstash-senjuqa\conf\senjuqa_pages.conf" PS C:\> $user = "NT AUTHORITY\SYSTEM" PS C:\> $trigger = New-ScheduledTaskTrigger -AtStartup PS C:\> Register-ScheduledTask -TaskName Logstash -Action $action -Trigger $trigger -User $user TaskPath TaskName State -------- -------- ----- \ Logstash Ready
¶ パラメーター説明指定値-TaskName <taskname>タスクの名前を指定します。-TaskName Logstash-Action <action>実行するコマンドを指定します。-Action $action-Trigger <trigger>スケジュールの種類を指定します。-Trigger $trigger-User <user>指定したアカウントのアクセス許可でタスクを実行します。-User $user注釈
Windows管理ツール[タスクスケジューラ]から登録することもできます。1. [操作]-[タスクの作成]をクリックします。2. [タスクの作成]ダイアログが表示されます。3. [全般]タブで以下の内容を入力します。[名前(M):]Logstash
4. [全般]タブで[ユーザーまたはグループの変更(U)]ボタンをクリックし、以下の内容を入力します。[選択するオブジェクト名を選択してください(E):]system
[名前の確認(C)]ボタンをクリックします。[OK]ボタンをクリックします。5. [トリガー]タブで[新規(N)]ボタンをクリックし、以下の内容を入力します。[タスクの開始(G):]スタートアップ時
6. [操作]タブで[新規(N)]ボタンをクリックし、以下の内容を入力します。[プログラム/スクリプト(P):]C:\logstash\bin\logstash.bat
[引数の追加(オプション)(A):]-f C:\logstash-senjuqa\conf\senjuqa_pages.conf
JDBC用のdriverを入手して、インストールするサーバーの任意のディレクトリに格納します。
ダウンロードURL:対象ファイル:postgresql-42.3.1.jar
(ここでは
postgresql-42.3.1.jar
をC:Temp
配下に格納した場合の手順を例として説明します。ほかのフォルダに格納した場合は適宜各コマンドで指定するパスを変更してください。)- Logstashパイプライン定義ファイル格納用フォルダを作成します。
PS C:\> New-Item C:\logstash-senjuqa\conf -ItemType Directory
- 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\config\logstash.yml
を以下の通り更新します。 queue.type
をmemory
からpersisted
に変更します。#queue.type: memory queue.type: persisted
注釈
この設定を変更しないと、異常発生時にLogstashのデータ登録イベントが抜けてしまう恐れがあります。
- 設定ファイル
- Logstashのログ設定ファイルを編集します。
- 対象ファイル:
C:\logstash\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:\> Copy-Item -Path C:\Temp\Senju_Quick_Assistant\conf\logstash\senjuqa_pages.conf.template -Destination C:\logstash-senjuqa\conf\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-senjuqa\conf\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
statement_filepath => "C:\logstash-senjuqa\.senjuqa_pages_last_run_fil"
Linux
statement_filepath => "/opt/logstash/.senjuqa_pages_last_run_fil"
statement_filepath
に記載されているJDBCライブラリファイルのパスについて、[statement_filepath]
から、 実際にC:\logstash\sql
(Windows) あるいは/opt/logstash/sql
(Linux) 配下に格納されているsenjuqa_pages.sql
ファイルのパスに変更します。Windows
statement_filepath => "C:\logstash\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-ScheduledTask -TaskName "Logstash"
Linux
# systemctl start logstash
以下のコマンドを実行して、logstashサービスが正常に動作していることを確認します。
Windows
PS C:\> $r = Invoke-RestMethod -Method Get -Uri 'http://localhost:9600/?pretty' PS C:\> $r | 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 }
注釈
レスポンスが確認できなかった場合はしばらく待ってから再度試してください。