Data Nodeの設定

この文書では、Data Nodeでパッケージのインストールを終えた後に実行する作業について説明します。この作業はControl Node設定を終えた後に進めることができます。

フェデレーション通信アカウント設定

Logpressoシェル接続

Data Node AとBでそれぞれLogpressoシェルに接続し、初期パスワードを変更する必要があります。パスワード紛失に備えてSSHキーを登録しておくことを推奨します。

基本パスワードの変更
  1. ターミナルで次のコマンドを実行し、Logpressoシェルに接続してください。ポート番号はlogpresso.confファイルのSSH_PORT設定により異なる場合があります(デフォルト値: 7022)。

    ssh -p 7022 root@localhost
    
  2. パスワードを求めるプロンプトが表示されたら、Logpressoシェル初期パスワードを入力してください。

  3. 新しいパスワード入力プロンプトが表示されたら、新しいパスワードを入力し、Enterキーを押してください。Logpressoシェルアカウントは各ノードのSSH接続にのみ使用されるため、ノードごとに異なるパスワードを設定しても問題ありません。

    Please change the default password.
    New password:    # 新しいパスワードを入力後Enter
    Retype password: # 新しいパスワードを再入力後Enter
    Password changed successfully.
    
    Logpresso SNR-4.0.2511.1 (build 20250805) on Araqne Core 4.0.5
    logpresso> # Logpressoシェルプロンプト
    
    Caution
    Logpressoシェルは基本パスワードの再使用を拒否します。どのアカウントでも絶対に基本パスワードを再使用しないでください。基本パスワードを使用して問題が発生した場合、Logpressoはこれについて責任を負いません。

オペレーティングシステムによっては、Logpressoシェルに接続する際にSSHキー交換および暗号化アルゴリズムのネゴシエーションで接続できない場合があります。Data Node A、Bの~/.ssh/configファイルに次の内容を追加し、ssh sonarコマンドで接続してください。

Host sonar
    HostName 127.0.0.1
    Port 7022
    User root
    HostKeyAlgorithms +ssh-rsa
    PubkeyAcceptedAlgorithms +ssh-rsa
    KexAlgorithms +diffie-hellman-group14-sha1
    Ciphers +aes256-cbc
    PreferredAuthentications publickey # SSHキーログイン
    IdentityOnly yes                   # SSHキーログイン
    IdentityFile ~/.ssh/logpresso_rsa  # SSHキーログイン
SSHキー登録(オプション)

SSHキー認証でLogpressoシェルに接続できます。パスワード紛失時にも接続できるため、SSHキー登録を推奨します。

  1. RSAキーがない場合は、次のコマンドを実行してキーペアを生成してください。

    ssh-keygen -t rsa -b 2048 -f ~/.ssh/logpresso_rsa
    
    Note
    Logpressoシェルはssh-rsaキーのみをサポートします。
  2. Logpressoシェルで次のコマンドを実行し、SSH公開鍵を登録してください。

    account.addSshKey root
    
  3. プロンプトが表示されたら、SSH公開鍵を入力してください。公開鍵は~/.ssh/logpresso_rsa.pubファイルにあります。

    SSH public key? ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQ... # 公開鍵全体を入力
    root password: # 現在のパスワードを入力
    added
    
    Tip
    公開鍵ファイルの絶対パスを直接指定することもできます: account.addSshKey root /home/logpresso/.ssh/logpresso_rsa.pub
  4. 次のコマンドを実行し、登録されたSSHキーの一覧を確認してください。

    account.sshKeys root
    

    コマンドを実行すると、次のように登録されたSSHキーを確認できます。

    Authorized SSH keys
    ---------------------
     1: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQ...
    
  5. これで、パスワードなしでSSHキーでLogpressoシェルに接続できます。

    ssh -p 7022 -i ~/.ssh/logpresso_rsa root@localhost
    
フェデレーションアカウントパスワードの設定

フェデレーションアカウントは、クラスターを構成するすべてのノード間の通信に使用するアカウントで、すでにControl Nodeペアに指定されたフェデレーションアカウントパスワードをそのまま使用します。

  1. Data Node A、BのLogpressoシェルで次のコマンドを実行し、フェデレーションアカウントのパスワードを変更してください。

    dom.resetPassword localhost root
    
  2. 新しいパスワード入力プロンプトが表示されたら、Control Nodeペアで指定したフェデレーションアカウントパスワードを同一に入力し、Enterキーを押してください。

    New Password: # パスワードを入力後Enter
    
    • パスワードは一度だけ入力できます。パスワードを誤って入力した場合は、dom.resetPassword localhost rootコマンドを再実行すればよいです。
    Note
    フェデレーションアカウントrootは、Logpressoシェルアカウントrootと名前が同じでも、互いに異なる認証ドメインに属します。フェデレーションパスワード変更の過程でaraqne.logに一時的にERRORログが記録される場合がありますが、変更を終えた後に解決されます。
  3. この文書を参考にして、フェデレーションアカウントのPassword ExpirationUnlimitedに変更してください。

    1. ウェブブラウザを開き、https://<Data Node A IPアドレス>:8443に接続してから、フェデレーションアカウントでログインしてください。
    2. ウェブコンソール左側メニューでSystem > Users画面に移動してください。
    3. フェデレーションアカウント一覧でrootをクリックしてください。
    4. Passwd. ExpirationフィールドでUnlimitedを選択し、Saveボタンをクリックしてください。
    5. ノードBでも同一の作業を実行してください。

Data Nodeペア設定

Data Nodeペア登録

ウェブコンソールSystem > Clusters > Node画面でData Nodeペアを登録します。

  1. クラスターノード一覧の右上でAddボタンをクリックし、Data Nodeペアを設定してください。各プロパティに対する説明はユーザー説明書でノードペアの追加を参照してください。

    Data Nodeペア設定画面

    • Type: Data Nodeを選択
    • Name: Data Nodeペア識別子を入力(例: d1)
      • Saveボタンをクリックした後は変更できません。
    • Description: ノードペアに対する説明(省略可能)。
    • TLS: 選択
    • Certification Verification: 選択しない
    • Connection Timeout: デフォルト値を使用
    • Read Timeout: デフォルト値を使用
    • Use HA Mode: 選択
    • Virtual IP: 選択しない
    • Node A Settings
      • Node ID: ノードA識別子を入力(例: d1a)
      • Address: ノードAの実際のIPアドレスと通信ポート(例: 203.0.113.129:8443)
        • Data Nodeのポート番号は8443です。
      • Login Name: rootを入力
      • Password: フェデレーションアカウントパスワードを入力
    • Node B Settings
  2. 入力を完了した後、Saveボタンをクリックしてください。次のようにData Nodeペアが追加されたことを確認してください。

    クラスターノード一覧で新しく登録されたData Nodeペアの確認

  3. 追加されたData NodeのNameをクリックしてプロパティを確認し、修正できます。NameNode IDを誤って指定した場合は、ノードペアを削除して再構成する必要があります。

    Data NodeのGUID確認

    ノードAとノードBのGUIDを安全な場所に記録してください。この値はノードGUID設定で使用されます。

キー暗号化キーの複製

Control Nodeのキー暗号化キー(KEK、Key Encryption Key)をData Node A、Bに同一に複製します。

Caution
この設定を終えた後は、キー暗号化キーを絶対に変更しないでください。クラスターを構成するすべてのノードは、同一のキー暗号化キーを使用する必要があります。それぞれ異なるキーを使用すると、暗号化されたデータを復号できず、ノード間の同期を実行できません。
  1. Control Node AまたはBのLogpressoシェルで次のコマンドを実行し、暗号化キー文字列を安全な場所に記録してください。

    sonar.cipherKey
    
  2. Data Node A、BのLogpressoシェルでそれぞれ次のコマンドを実行し、同一の暗号化キーを構成してください。KEY_STRINGはControl Nodeの暗号化キー文字列です。

    sonar.setCipherKey KEY_STRING
    
ノードGUID設定

Data Nodeペア登録の段階で確認したData Node A、BのGUIDを、各ノードのLogpressoシェルで同一に設定します。

  1. Data Node AとBのLogpressoシェルで次のコマンドを実行し、各ノードのポリシー同期用GUIDをLogpressoエンジンに設定してください。GUID_STRINGは各ノードのGUID文字列です。

    sonar.setGuid GUID_STRING # 各ノードに合ったGUIDを入力
    
  2. 各ノードのポリシー同期用GUIDは、次のコマンドで確認できます。

    sonar.nodeConfig
    
マスターノード接続設定

Data NodeはControl Nodeの制御を受けます。Data NodeがControl Nodeに接続する方式で通信が行われるため、ポリシーマスターノード接続のための情報を設定する必要があります。

  1. ノードAとノードBのLogpressoシェルで次のコマンドを実行してください。

    sonar.setMaster
    

    次は、コマンド実行後に出力されるプロンプトと入力する値に対する説明です。ここで使用するアカウントはフェデレーションアカウントです。

    host? 203.0.113.193    # Control Nodeペアの代表IPアドレス
    port? 443              # 443を入力
    account? root          # フェデレーションアカウントであるrootを入力
    password?              # フェデレーションアカウントパスワードを入力
    connect timeout? 10000 # Enterキーを押すとデフォルト値を使用
    read timeout? 10000    # Enterキーを押すとデフォルト値を使用
    secure? true           # trueを入力(デフォルト値はfalse)
    skip cert check? true  # trueを入力(デフォルト値はfalse)
    
    オプション説明
    hostControl Nodeペアの代表IPアドレス203.0.113.193
    portControl Nodeのフェデレーション通信ポート443
    accountフェデレーションアカウントroot
    passwordフェデレーションアカウントパスワード
    connect timeoutサーバー接続待機時間10000 (ms)
    read timeout応答待機時間10000 (ms)
    secureTLS通信の適用可否true
    skip cert checkTLS証明書の有効性検査の省略可否true
  2. 次のコマンドを実行し、ノード設定が適用されたか確認してください。

    sonar.nodeConfig
    

    次は、コマンド実行後に正常に設定されたときに確認できる出力例です。

    guid: ffe0c23a-31b6-4227-8ebb-7922aa5e86e7
    host=203.0.113.193, port=443, account=root, connectTimeout=10000, readTimeout=10000, secure=true, skipCertCheck=true
    crypto_file_path: null
    
データ複製モード設定

ノードペアを構成すると、2つのノード間でテーブルデータを複製できます。ここでいう「テーブル」とは、データベーステーブルではなく、Logpressoエンジンがデータを保存するファイルベースのテーブルを意味します。

2つのノードに同一のデータが存在すると、分散クエリ実行時に重複検索が発生する場合があります。これを防ぐために、各ノードにアクティブ(ACTIVE)またはスタンバイ(STANDBY)のいずれかのデータ複製モードを設定する必要があります。

  • アクティブノード: ログテーブルの原本を保存し、分散クエリ時に検索対象になります。
  • スタンバイノード: アクティブノードのログテーブルデータをリアルタイムで複製されます。複製されたテーブルは原本と同一のテーブルIDを使用し、分散クエリ時に検索から除外されるため、重複検索が発生しません。
Note
logpresso.setStandbyNodeコマンドは、相手ノードをスタンバイに指定して自身をアクティブに設定します。
logpresso.setActiveNodeコマンドは、相手ノードをアクティブに指定して自身をスタンバイに設定します。
ノードA設定(アクティブ)
  1. ノードAのLogpressoシェルで次のコマンドを実行し、ペアノード(ノードB)の名前を確認してください。

    logpresso.nodeStatuses
    

    次は出力例です。Federation Nodesセクションで[d1b]がノードBの名前です。

    Local
    ------------------
    Node GUID: b6b014f9-88c2-48c1-96c8-e23d8bdb65bc
    Instance GUID: af43a33f-7985-41cb-9c7b-31224e47c35a
    
    Federation Nodes
    ------------------
    [d1b] node_guid=44494d5a-40c7-4e02-93bb-71adb50f3aec, instance_guid=3189e170-dae7-465a-a713-21e3da40cbb7, repl_mode=null, pair_guid=null, invalid_guid=false, alive=true, paired=true, failure=false, last connect=2025-06-09 13:39:20, last alive=2025-06-10 14:08:08, created=2025-06-09 13:39:20
    
    Note
    logpresso.nodeStatusesコマンドの出力に表示されるNode GUIDとInstance GUIDは、Logpressoエンジンがログテーブル複製と分散クエリのために使用する識別子です。Node GUIDはデータベースの識別に使用され、DB_GUIDファイルに記録して永続的に保管します。Instance GUIDは現在実行中のプロセス識別子で、ノードプロセスを開始するたびに変更されます。
  2. 次のコマンドを実行し、ノードBをスタンバイノードに指定すると、ノードAはアクティブノードになります。コマンド例でd1bは上で確認したノードBの名前です。

    logpresso.setStandbyNode d1b
    
  3. logpresso.nodeStatusesコマンドを再度実行すると、LocalセクションでReplication ModeACTIVEに設定されたことがわかります。

    ------------------
    Node GUID: b6b014f9-88c2-48c1-96c8-e23d8bdb65bc
    Instance GUID: af43a33f-7985-41cb-9c7b-31224e47c35a
    Replication Mode: ACTIVE
    Pair Node: d1b
    
    Federation Nodes
    ------------------
    [d1b] node_guid=44494d5a-40c7-4e02-93bb-71adb50f3aec, instance_guid=3189e170-dae7-465a-a713-21e3da40cbb7, repl_mode=null, pair_guid=null, invalid_guid=false, alive=true, paired=true, failure=false, last connect=2025-06-09 13:49:36, last alive=2025-06-10 14:08:08, created=2025-06-09 13:49:36
    
ノードB設定(スタンバイ)
  1. ノードBのLogpressoシェルで次のコマンドを実行し、ノードAをアクティブに指定すると、ノードBはスタンバイノードになります。d1alogpresso.nodeStatusesコマンドの実行結果で確認したノードAの名前です。

    logpresso.setActiveNode d1a
    
  2. logpresso.nodeStatusesコマンドを実行すると、LocalセクションでReplication ModeSTANDBYに設定されたことがわかります。

    Local
    ------------------
    Node GUID: 44494d5a-40c7-4e02-93bb-71adb50f3aec
    Instance GUID: 3189e170-dae7-465a-a713-21e3da40cbb7
    Replication Mode: STANDBY
    Pair Node: d1a
    
    Federation Nodes
    ------------------
    [d1a] node_guid=6b6b014f9-88c2-48c1-96c8-e23d8bdb65bc, instance_guid=af43a33f-7985-41cb-9c7b-31224e47c35a, repl_mode=ACTIVE, pair_guid=44494d5a-40c7-4e02-93bb-71adb50f3aec, invalid_guid=false, alive=true, paired=true, failure=false, last connect=2025-03-26 17:03:11, last alive=2025-03-27 13:40:55, created=2025-03-26 17:03:11
    
システムログ転送設定

Data NodeのCPU、メモリなどの性能情報を収集するように設定します。収集されたデータは、ウェブコンソールSystem > Performance Monitor画面で確認できます。

  1. Data Node A、BのLogpressoシェルでそれぞれsentry.setGuidコマンドを実行し、Sentry GUIDを設定してください。ここでGUIDはノードIDを意味します。たとえば、Data Node AのノードIDがd1aの場合は、次のように設定してください。

    sentry.setGuid d1a
    
  2. Data Node A、Bで次のコマンドを実行し、ログを転送するControl Nodeを設定してください。

    # sentry.addBase BASE_NAME IP_ADDR PORT SENTRY_CERT CA_CERT SWAP_SIZE
    sentry.addBase c1 203.0.113.193 7140 logpresso-sentry logpresso-ca 1073741824
    
    • BASE_NAME: Control Nodeペアの名前(例: c1)
    • IP_ADDR: Control Nodeペアの代表IPアドレス(例: 203.0.113.193)
    • PORT: Sentryポート(例: 7140)
    • SENTRY_CERT: Sentry証明書(例: logpresso-sentry)
    • CA_CERT: Logpresso CA証明書(例: logpresso-ca)
    • SWAP_SIZE: スワップサイズ(例: 1073741824(=1GB)、単位: バイト)
  3. 次のコマンドを実行し、接続を確認してください。

    sentry.connections
    

    次は、コマンド実行後に正常に設定されたときに確認できる出力例です。

    Connections
    --------------------
    [c1] id=2035698886, peer=(1b3fcc3f-61ce-41ae-9c45-d0096b8b7fff, /203.0.113.193:7140), trusted level=Low, ssl=true, props={phase=post_hello, type=command}
    
ノード間ライセンス共有設定

クラスター環境で、すべてのノードが同一のライセンスの適用を受けるように設定します。Control Nodeに登録したライセンスは、Data Node、Forwarder Nodeにも適用されます。ここでは、Control NodeのライセンスをData Nodeに適用する方法について説明します。

  1. ノードAとノードBのLogpressoシェルで次のコマンドを実行し、ライセンス共有を有効にしてください。

    logpresso.setLicenseMode slave
    
  2. 次のコマンドを実行し、ライセンスマスターの状態を確認してください。

    logpresso.licenseMode
    

    正常に設定されると、次のように出力されます。

    SLAVE
    
  3. (Control Node A、B) この文書を参考にして、Data Nodeをライセンススレーブとして登録してください。

    1. ウェブブラウザを開き、https://<Control Node A IPアドレス>:8443に接続してください。
    2. フェデレーションアカウントでログイン後、Settings > License Managementに移動してください。
    3. All Node ListRegister Nodeをクリックしてください。
    4. ライセンススレーブノードの情報を入力し、生成をクリックしてください。
      • Name: Data Node識別用の名前(例: d1ad1b)
      • ホストアドレス: Data NodeのIPアドレス
      • Port: Data Nodeのフェデレーション通信ポート。8443を入力してください。
      • User: フェデレーションアカウントID(root)
      • Password: フェデレーションアカウントのパスワード
      • Secure: Enableを選択してください。
      • Verify Certification: Enableにチェックされている場合は選択を解除してください。
      • Connection Timeout: デフォルト値を使用してください。
      • Read Timeout: デフォルト値を使用してください。
    5. Control Node Bでも同一の作業を実行してください。
分散クエリの有効化

分散クエリ(Distributed Query)は、複数のノードに分散保存されたテーブルデータを1つのクエリで統合照会する機能です。分散クエリの実行時に重複検索を防止し、正常なクエリ結果を得るには、すべてのノードで分散クエリを有効にする必要があります。

  1. ノードAとノードBのLogpressoシェルでそれぞれ次のコマンドを実行し、分散クエリを有効にしてください。

    logpresso.enablePlanner
    
  2. 次のコマンドを実行し、分散クエリの状態を確認してください。

    logpresso.plannerStatus
    

    正常に有効化されると、次のように出力されます。

    Running: true
    
ウェブサーバー設定

パッケージのインストール後に開いているウェブサービスポートがあります。不要なポートを閉じ、Data Nodeの運用に必要なポートのみを開放します。

  1. Logpressoシェルで次のコマンドを実行し、開いているウェブサービスポートを確認してください。

    httpd.bindings
    

    次は、コマンド実行後に確認できる出力例です。

    /0.0.0.0:8443 (ssl: key logpresso-web, trust null), opened, default context: webconsole, idle timeout: 0seconds, log file prefix: null, access log: false, error log: false
    /0.0.0.0:18443 (ssl: key logpresso-web, trust null), opened, default context: sonar-explanation, idle timeout: 0seconds, log file prefix: null, access log: false, error log: false
    /0.0.0.0:443 (ssl: key logpresso-web, trust null), opened, default context: sonar, idle timeout: 0seconds, log file prefix: null, access log: false, error log: false
    /0.0.0.0:44300 (ssl: key logpresso-web, trust null), opened, default context: deploy, idle timeout: 0seconds, log file prefix: null, access log: false, error log: false
    
  2. 次のコマンドを実行し、開いているウェブポートをすべて閉じ、証明書の変更を反映してフェデレーション通信に使用するポートのみを開放してください。

    httpd.close 8443
    httpd.close 18443
    httpd.close 443
    httpd.close 44300   
    httpd.openSsl 8443 webconsole logpresso-web
    
Note
コマンドで言及されるhttpdは、Apacheウェブサーバーではなく、Logpresso Sonarのウェブサービスを意味します。
WebSocketフレーム設定(オプション)

フェデレーション通信はWebSocketを使用するため、分散クエリの結果が大きかったり、転送するデータが多かったりすると、デフォルトのWebSocketフレームサイズでは転送が失敗する場合があります。大容量データを円滑に処理するには、フレームサイズを増やす必要があります。

  1. ノードAとノードBのLogpressoシェルで次のコマンドを実行し、現在の設定値を確認してください。

    webconsole.maxFrameSize
    

    デフォルト値は8MBで、コマンドの実行結果は次のとおりです。

    8,388,608 bytes
    
  2. 次のコマンドを実行し、フレームサイズを変更してください。例で設定した値は84MBです。

    webconsole.setMaxFrameSize 83886080
    
  3. 再度webconsole.maxFrameSizeコマンドを実行し、変更された値を確認してください。

    83,886,080 bytes
    
クエリキャッシュ設定

クエリ性能の最適化のため、テーブルメタデータ、逆インデックス、ブルームフィルタをメモリにキャッシュします。各キャッシュの役割は次のとおりです。

  • テーブルキャッシュ: クエリ時にディスクから読み込んだログデータをキャッシュし、同一データの再照会時にディスクI/Oなしでメモリからすぐに返します。
  • 逆インデックスキャッシュ: フルテキスト検索のために、特定の検索語(term)が含まれる文書IDの一覧をキャッシュします。
  • ブルームフィルタ0/1キャッシュ: ブルームフィルタは、特定の検索語が該当するセグメントに存在するかを高速に判別する確率的データ構造です。ブルームフィルタ0は高速な判別に、ブルームフィルタ1は精密な判別に使用されます。
Note
検索クエリを実行すると、ブルームフィルタ0、ブルームフィルタ1、逆インデックスキャッシュ、テーブルキャッシュの順にキャッシュを照会します。キャッシュから目的のデータを照会できない場合は、ディスクから照会します。

ノードAとノードBのLogpressoシェルで次のコマンドを実行し、キャッシュサイズを設定してください。

logpresso.tableCacheConfig max_weight CACHE_SIZE               # テーブルキャッシュ
logpresso.indexCacheConfig inverted max_weight CACHE_SIZE      # 逆インデックスキャッシュ
logpresso.indexCacheConfig bloomfilter0 max_weight CACHE_SIZE  # ブルームフィルタ0キャッシュ
logpresso.indexCacheConfig bloomfilter1 max_weight CACHE_SIZE  # ブルームフィルタ1キャッシュ

CACHE_SIZEは、日処理量とメモリ容量を考慮して次の表の値を入力してください。キャッシュサイズの入力単位はバイトです。

日処理量RAMHEAPDMmax_weightinvertedbloomfilter0bloomfilter1
500GB/日128GB26GB76GB4,294,967,29653,687,091,20012,884,901,8881,073,741,824
  • max_weight: テーブルキャッシュ
  • inverted: 逆インデックス(inverted index)キャッシュ
  • bloomfilter0: ブルームフィルタ0キャッシュ
  • bloomfilter1: ブルームフィルタ1キャッシュ
  • カンマ(,)は入力しないでください。カンマは読みやすくするために単位を区切って表示しています。

キャッシュをGB単位に換算すると、次の表のとおりです。

日処理量RAMHEAPDMmax_weightinvertedbloomfilter0bloomfilter1
500GB/日128GB26GB76GB4GB50GB12GB1GB
サービス再起動

変更した設定を適用するには、Logpressoサービスを再起動する必要があります。作業の順序は次のとおりです。

  1. 停止順序: スタンバイ → アクティブ
  2. 開始順序: アクティブ → スタンバイ

デフォルトでは、ノードAがアクティブ、ノードBがスタンバイです。システム運用中にアクティブノードを先に開始すると、原本データサービスを迅速に復旧し、スタンバイノードが開始時にすぐに複製接続を結ぶことができます。

ノードを停止するには、

  1. スタンバイノード(ノードB)で次のコマンドを実行し、Logpressoサービスを停止してください。

    sudo systemctl stop logpresso
    
  2. ノードBが停止したら、アクティブノードAで同一のコマンドを実行し、サービスを停止してください。

ノードを開始するには、

  1. ノードAで次のコマンドを実行し、Logpressoサービスを開始してください。

    sudo systemctl start logpresso
    
  2. ノードAが正常に開始されたら、ノードBで同一のコマンドを実行し、Logpressoサービスを開始してください。

  3. ノードAのウェブコンソールにログインした後、System > Performance Monitor画面で各Data Nodeの状態が緑色で表示されるか確認してください。

Note
Data Nodeの状態が緑色でない場合は、/opt/logpresso/log/araqne.logファイルで原因を確認できます。

Control Nodeとのストリームクエリ接続

Data Nodeでリアルタイム探知規則が生成したイベントデータをControl Nodeに転送し、最終的なイベント処理(alert)が実行されるようにパイプラインを構成します。各構成要素の役割は次のとおりです。

  • sonar_event_logger (Data Node): Data Nodeのsonar_eventストリームクエリの出力を収集するストリーム収集器
  • sonar_event_data (Control Node): Data Nodeのsonar_event_loggerからデータを読み込むストリームクエリ
  • sonar_event (Control Node): sonar_event_dataを入力として受け取り、alertコマンドを実行してイベントを処理し、保存するストリームクエリ

最終的に、次のようなデータフローが構成されます: (Data Node A、B) sonar_event_logger → (Control Node A、B) sonar_event_data → (Control Node A、B) sonar_event

sonar_event_logger収集器の作成
  1. (Data Node A、B) Logpressoシェルで次のコマンドを実行し、sonar_event_logger収集器を作成してください。

    # logapi.createLogger LOGGER_FACTORY_NAME NAMESPACE LOGGER_NAME
    logapi.createLogger stream local sonar_event_logger
    
    • LOGGER_FACTORY_NAME: 収集器ファクトリ名。streamを入力してください。
    • NAMESPACE: 収集器ネームスペース。localを入力してください。
    • LOGGER_NAME: 作成する収集器の名前。sonar_event_loggerを入力してください。

    次は、コマンド実行後に出力されるプロンプトと入力する値に対する説明です。

    Stream query name (required)? sonar_event # sonar_eventを入力
    transformer (optional, enter to skip)?    # Enterキーを押して入力を省略
    
    • Stream query name: 収集されたログを受け取るデータストリームクエリの名前。sonar_eventを入力してください。
    • transformer: 何も入力せずにEnterキーを押してください。

    プロンプトにすべての値を入力すると、次のように作成された収集器情報が出力されます。

    logger created: name=local\sonar_event_logger, factory=local\stream, status=stopped (passive), log count=0, log volume=0, last start=null, last run=null, last log=null
    
  2. (Data Node A、B) logapi.loggersコマンドを実行し、sonar_event_logger収集器が作成されたか確認してください。次は出力結果の例で、sonar_event_logger収集器のenabledフィールドはdisabledstatusフィールドはstoppedと表示されます。

    Loggers
    ----------------------
    +------------------------------+--------------------+----------+---------+------------+----------+------------+-----------+---------------------------+-------------+-------+
    |             name             |       factory      |  enabled |  status | intvl.(ms) | schedule | time range | log count |          last log         | stop reason | error |
    +------------------------------+--------------------+----------+---------+------------+----------+------------+-----------+---------------------------+-------------+-------+
    | local\sonar_system_alert     | system-alert       | enabled  | running |          0 | null     | null       |        17 | 2025-07-09 15:09:59 +0900 |             |       |
    | local\sonar_event_logger     | stream             | disabled | stopped |          0 | null     | null       |         0 | null                      |             |       |
    +------------------------------+--------------------+----------+---------+------------+----------+------------+-----------+---------------------------+-------------+-------+
    
  3. (Control Node A) Logpressoシェルでlogapi.loggersコマンドを実行し、現在作成されている収集器の一覧を照会してください。Data Nodeで作成した収集器が各Data Nodeのネームスペース(d1ad1b)で表示されます。

    Loggers
    ----------------------
    +--------------------------------+--------------------+----------+---------+------------+----------+------------+-----------+---------------------------+-------------+-------+
    |              name              |       factory      | enabled  |  status | intvl.(ms) | schedule | time range | log count |          last log         | stop reason | error |
    +--------------------------------+--------------------+----------+---------+------------+----------+------------+-----------+---------------------------+-------------+-------+
    | d1a\sonar_event_logger         | stream             | disabled | stopped |          0 | null     | null       |         0 | null                      |             |       |
    | d1a\sonar_system_alert         | system-alert       | enabled  | running |          0 | null     | null       |        17 | 2025-07-09 15:09:59 +0900 |             |       |
    | d1b\sonar_event_logger         | stream             | disabled | stopped |          0 | null     | null       |         0 | null                      |             |       |
    | d1b\sonar_system_alert         | system-alert       | enabled  | running |          0 | null     | null       |        23 | 2025-07-09 15:09:59 +0900 |             |       |
    | local\sonar_system_alert       | system-alert       | enabled  | running |          0 | null     | null       |        72 | 2025-07-09 16:17:10 +0900 |             |       |
    +--------------------------------+--------------------+----------+---------+------------+----------+------------+-----------+---------------------------+-------------+-------+
    
  4. (Control Node A) 次のコマンドを実行し、Data Nodeの収集器を管理対象として登録してください。管理対象として登録された収集器はシステム再起動時に自動的に開始され、HA環境で状態同期が実行されます。

    # logpresso.createLogger NAMESPACE\LOGGER_NAME
    logpresso.createLogger d1a\sonar_event_logger
    logpresso.createLogger d1b\sonar_event_logger
    
    • NAMESPACE\LOGGER_NAME: 収集器のフルネーム。手順3で確認した収集器名を入力してください。
  5. (Control Node A) 次のコマンドを実行し、収集器を有効にしてください。

    # logapi.startLogger NAMESPACE\LOGGER_NAME
    logapi.startLogger d1a\sonar_event_logger
    logapi.startLogger d1b\sonar_event_logger
    
    • NAMESPACE\LOGGER_NAME: 収集器のフルネーム。手順3で確認した収集器名を入力してください。
  6. (Control Node A) logapi.loggersコマンドを実行し、出力された収集器の一覧でsonar_event_logger収集器のenabledフィールドにenabledstatusフィールドにrunningが表示されるか確認してください。

    Loggers
    ----------------------
    +--------------------------------+--------------------+---------+---------+------------+----------+------------+-----------+---------------------------+-------------+-------+
    |              name              |       factory      | enabled |  status | intvl.(ms) | schedule | time range | log count |          last log         | stop reason | error |
    +--------------------------------+--------------------+---------+---------+------------+----------+------------+-----------+---------------------------+-------------+-------+
    | d1a\sonar_event_logger         | stream             | enabled | running |          0 | null     | null       |         0 | null                      |             |       |
    | d1a\sonar_system_alert         | system-alert       | enabled | running |          0 | null     | null       |        17 | 2025-07-09 15:09:59 +0900 |             |       |
    | d1b\sonar_event_logger         | stream             | enabled | running |          0 | null     | null       |         0 | null                      |             |       |
    | d1b\sonar_system_alert         | system-alert       | enabled | running |          0 | null     | null       |        23 | 2025-07-09 15:09:59 +0900 |             |       |
    | local\sonar_system_alert       | system-alert       | enabled | running |          0 | null     | null       |        72 | 2025-07-09 16:17:10 +0900 |             |       |
    +--------------------------------+--------------------+---------+---------+------------+----------+------------+-----------+---------------------------+-------------+-------+
    
sonar_event_dataストリームクエリの作成

Data Nodeの収集器に収集されるデータをControl Nodeのsonar_eventストリームクエリに転送するために、次の過程を進めます。

  1. (Control Node A) Logpressoシェルで次のコマンドを実行し、ストリームクエリを作成してください。

    # logpresso.createStreamQuery NAME SOURCE_TYPE
    logpresso.createStreamQuery sonar_event_data logger
    
    • NAME: ストリームクエリの名前。sonar_event_dataを入力してください。
    • SOURCE_TYPE: データソースタイプ。loggerを入力してください。

    次は、コマンド実行後に出力されるプロンプトと入力する値に対する説明です。

    interval? 60                     # 60(秒)を入力
    query? bypass                    # bypassを入力
    loggers? d1a\sonar_event_logger, d1b\sonar_event_logger # Data Node A、Bの収集器フルネームの一覧を入力
    owner? root                      # 所有者アカウント名を入力
    async [y/N]? N                   # Nを入力
    
    • interval: ストリームクエリの実行周期。60を入力してください。
    • query: ストリームクエリのクエリ文字列。bypassを入力してください。
    • loggers: 接続する収集器のフルネーム。d1a\sonar_event_loggerを入力してください。
    • owner: 所有者アカウント名。rootを入力してください。
    • async: 非同期モード実行の可否。Nを入力してください。
  2. logpresso.streamQueriesコマンドを実行し、ストリームクエリの一覧にsonar_event_dataストリームクエリが照会されるか確認してください。次は出力結果の例で、sonar_event_dataストリームクエリのenabledフィールドはtruerunningフィールドはtrueと表示されます。

    Stream Queries
    ----------------
    +-----------------------------------------+-------------+--------------+---------------------+---------+---------+-------+-------+
    |                   name                  | input count | output count |     last refresh    | running | enabled | async | error |
    +-----------------------------------------+-------------+--------------+---------------------+---------+---------+-------+-------+
    | sonar_event                             |           0 |            0 | 2025-07-09 15:14:54 |    true |    true | false |  null |
    | sonar_event_data                        |           0 |            0 | 2025-07-09 15:21:35 |    true |    true | false |  null |
    | .....                                                                                                                          |
    +-----------------------------------------+-------------+--------------+---------------------+---------+---------+-------+-------+
    
sonar_eventストリームクエリの接続

次に、Control Node Asonar_eventストリームクエリに、上で作成したデータソースストリームクエリを接続します。

  1. LogpressoウェブコンソールAnalysis > Queries画面で次のコマンドを実行し、sonar_event_dataが追加されたストリームクエリの一覧を生成してください。

    system-streams
    | search name == "sonar_event"
    | eval streams = format("sonar_event_data,%s", strjoin(",", input_streams))
    | fields streams
    
  2. streamsフィールドにある値を安全な場所にコピーしておいてください。次の段階でstreamsプロンプトにこの値を入力する必要があります。

  3. 次のコマンドを実行し、sonar_eventストリームクエリとsonar_event_dataストリームクエリを接続します。

    # logpresso.updateStreamQuery NAME SOURCE_TYPE
    logpresso.updateStreamQuery sonar_event STREAM   # STREAMを大文字で入力
    
    • NAME: ストリームクエリの名前。sonar_eventを入力してください。
    • SOURCE_TYPE: データソースタイプ。STREAMを入力してください。

    次は、コマンド実行後に出力されるプロンプトと入力する値に対する説明です。

    interval? 0     # 0を入力
    query? alert    # alertを入力
    streams? sonar_rule_00001,sonar_rule_00003,sonar_rule_00005, ..., sonar_rule_00051,sonar_event_data # streamsフィールドからコピーした値
    async [y/N]? N  # Nを入力
    owner? root     # 所有者アカウント名を入力
    
    Caution
    logpresso.updateStreamQueryコマンドは既存のデータをすべて上書きするため注意してください。streamプロンプトに値を入力するとき、input_streamsフィールドから照会したストリームの一覧とsonar_event_dataをカンマ(,)で区切って正確に入力する必要があります。
Control Nodeペア同期

先に設定したsonar_event_logger収集器とsonar_event_datasonar_eventストリームクエリは、Logpressoシェルで手動で作成した構成で、同期による自動冗長化がサポートされません。

クラスター同期を停止した後、Control Node Aで実行した設定過程をControl Node Bで同一に実行し、クラスターを再起動する必要があります。

  1. (Control Node A) ターミナルでlogpressoサービスを停止してください。

    sudo systemctl stop logpresso
    
  2. (Control Node B) Logpressoシェルで次のコマンドを実行し、Control Node Bに残っている収集器を管理対象から除去し、収集器インスタンスを削除してください。

    # logapi.removeLogger NAMESPACE\LOGGER_NAME
    logapi.removeLogger d1a\sonar_event_logger
    logapi.removeLogger d1b\sonar_event_logger
    
    • NAMESPACE\LOGGER_NAME: 収集器のフルネーム
  3. (Data Node A、B) Data Node A、Bで収集器を作成してください。

    # sonar_event_logger収集器の作成
    logapi.createLogger stream local sonar_event_logger
    
  4. (Control Node B) Control Node Aで実行した作業を同一にControl Node Bで実行してください。

    # sonar_event_logger収集器の作成
    logpresso.createLogger d1a\sonar_event_logger
    logpresso.createLogger d1b\sonar_event_logger
    
    # sonar_event_logger収集器の有効化
    logapi.startLogger d1a\sonar_event_logger
    logapi.startLogger d1b\sonar_event_logger
    
    # sonar_event_dataストリームクエリの作成
    logpresso.createStreamQuery sonar_event_data logger
    
    # sonar_event_data Control Node Bのストリームクエリ一覧でinput_streamsフィールド値の確認
    system streams
    | search name == "sonar_event_data"
    | order source_type, name, running, enabled, async, interval, query_string, owner, input_streams
    
    # sonar_eventストリームクエリの接続
    logpresso.updateStreamQuery sonar_event STREAM
    
  5. (Control Node B) ターミナルで次のコマンドを実行し、logpressoサービスを停止してください。

    sudo systemctl stop logpresso
    
  6. (Control Node A、Control Node Bの順に) ターミナルで次のコマンドを実行し、logpressoサービスを開始してください。Control Node Aが先に開始されると、Aの設定がControl Node Bに同期されます。

    sudo systemctl start logpresso