オペレーティングシステム

このドキュメントでは、オペレーティングシステムのインストールおよび設定時に必要な項目を説明します。

インストール時に必要な権限

Logpresso Sonar をインストールするには、インストール対象サーバーの root 権限、または sudo コマンドで管理者権限のコマンドを実行できるユーザー(wheel グループに属するユーザー)の権限が必要です。

オペレーティングシステム & JDK のインストール

Logpresso が公式にサポートするオペレーティングシステムは Red Hat Enterprise Linux 9 です。

  • Rocky Linux のような RHEL 9 互換のオペレーティングシステムも使用できます。
  • インストールタイプは Server with GUI を推奨します。
  • オペレーティングシステムのパーティションとデータパーティションを分離して構成してください。
    • データパーティションは /data にマウントしてください。
    • データパーティションは、必要に応じて容量を増設できるように LVM で構成することを推奨します。
必須パッケージのインストール

インターネットに接続できるネットワークで、次のコマンドを実行して必須パッケージをインストールしてください。

sudo dnf -y install curl firewalld java-21-openjdk-devel \
  lsof net-tools traceroute unzip
パッケージ用途
curlAPI テスト時に使用
firewalldホストファイアウォールの設定
java-21-openjdk-develLogpresso Sonar の実行に必要な JDK
lsof開いているファイルおよびポートの確認に使用する診断ツール
net-toolsnetstatifconfig などのネットワーク診断ツール
tracerouteネットワーク経路の追跡に使用する診断ツール
unzipLogpresso Sonar インストールパッケージの解凍
  • java-21-openjdk の代わりに java-21-openjdk-devel パッケージをインストールすると、障害発生時に jmapjstack コマンドを利用してデバッグできます。
  • デバッグツールのインストールが許可されていない環境では、java-21-openjdk-headless パッケージをインストールしてください。

作業の利便性のため、次のパッケージをインストールすることを推奨します。

sudo dnf -y install vim wget
パッケージ用途
vim設定ファイルの編集
wgetSentry をインストールするホストで Sentry インストールスクリプトを実行する際に使用
パッケージのダウンロード(閉域網環境への備え)

閉域網環境にインストールする必要がある場合は、次の手順に従って閉域網環境に持ち込むパッケージファイルを準備します。

  1. 閉域網で使用するオペレーティングシステムとバージョンを確認し、インターネットに接続できるネットワークで、閉域網で運用する Linux サーバーと同じバージョンの Linux ホストを準備してください。

  2. 次のコマンドを実行して、インストールするパッケージおよびその依存関係を持つすべてのパッケージを指定したパスにダウンロードしてください。

    # パッケージのダウンロードには sudo 権限は必要ありません。
    mkdir $HOME/rpm && cd $HOME/rpm && \
    dnf download --resolve curl firewalld java-21-openjdk-devel \
      lsof net-tools traceroute unzip vim wget && \
    tar czvf rpm.tgz *.rpm
    
  3. 圧縮したファイルのハッシュ値を記録したファイルを作成してください。ハッシュ値は、閉域網に持ち込んだファイルの整合性を検証する際に必要です。

    sha256sum rpm.tgz > rpm.tgz.sha256
    
  4. rpm.tgzrpm.tgz.sha256 ファイルを安全な場所に保管してください(読み取り専用メディアを推奨)。

閉域網環境に必須パッケージをインストールするには、次の手順に従って必須パッケージをインストールしてください。

  1. 新しいディレクトリ(例: $HOME/rpm)を作成し、新しいディレクトリに rpm.tgzrpm.tgz.sha256 ファイルをコピーしてください。

  2. 新しいディレクトリで次のコマンドを実行して、確認したハッシュ値を rpm.tgz.sha256 ファイルに記録されたハッシュ値と比較してください。

    sha256sum rpm.tgz
    
  3. rpm.tgz ファイルを解凍してパッケージをインストールしてください。

    tar xzvf rpm.tgz && sudo dnf install -y *.rpm
    

オペレーティングシステムの設定

JDK 権限の設定

インストールされた JDK バージョンを確認し、Logpresso Sonar の実行に必要な権限を付与します。この設定はすべてのノードで実行してください。

  1. インストールされた JDK バージョンを確認してください。

    java -version
    

    次のようなバージョン情報を確認できるはずです。

    openjdk version "21.0.10" 2026-01-20 LTS
    OpenJDK Runtime Environment (Red_Hat-21.0.10.0.7-1) (build 21.0.10+7-LTS)
    OpenJDK 64-Bit Server VM (Red_Hat-21.0.10.0.7-1) (build 21.0.10+7-LTS, mixed mode, sharing)
    
  2. java 実行ファイルに必要な権限を付与してください。

    sudo setcap cap_net_bind_service,cap_sys_time,cap_net_raw=+ep $(readlink /etc/alternatives/java)
    

    setcapjava 実行ファイルに付与する権限は次のとおりです。

    オプション説明備考
    cap_net_bind_service1024 番以下のポート使用権限一般ユーザー権限では 1024 以下のポートを使用できません
    cap_sys_timeシステム時刻を変更できる権限時刻同期、タイムスタンプ調整時に必要
    cap_net_rawraw socket、packet socket の使用権限pcap 直接収集、sendsyslog、ping アプリに使用されます
    +ep+: 権限の追加
    e: 権限の適用
    p: 権限を永続的に維持
  3. 権限が正常に適用されたかを確認してください。

    getcap $(readlink /etc/alternatives/java)
    

    次のような結果を確認できるはずです。

    /usr/lib/jvm/java-21-openjdk-21.0.10.0.7-1.el9.x86_64/bin/java cap_net_bind_service,cap_net_raw,cap_sys_time=ep
    
SELinux の設定

SELinux(Security-Enhanced Linux)は、Linux カーネルレベルのセキュリティポリシーを適用するモジュールです。デフォルトでは、enforcing モードでセキュリティポリシー違反が発生した場合、その動作を遮断します。Logpresso Sonar の実行時に特定のディレクトリへのアクセスが制限される場合があるため、SELinux を permissive に変更する必要があります。

Note
Logpresso Sonar を SELinux enforcing モードで安定性を検証した後にドキュメントを改善する予定です。現在は SELinux を Permissive に変更してインストールを進める方法で説明します。
  1. /etc/selinux/config ファイルを開き、次のように設定してください。変更した設定は、システムを再起動するか、setenforce 0 コマンドを実行するとすぐに適用されます。

    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    #     enforcing - SELinux security policy is enforced.
    #     permissive - SELinux prints warnings instead of enforcing.
    #     disabled - No SELinux policy is loaded.
    SELINUX=permissive
    
  2. SELinux を Permissive に即時適用するために、次のコマンドを実行してください。

    sudo setenforce 0
    
  3. getenforce コマンドを実行して、現在の SELinux 動作モードが Permissive と出力されるかを確認してください。

ホスト名の変更

Logpresso Sonar ノードを識別しやすいように、次のコマンドでサーバーのホスト名を変更してください。

sudo hostnamectl set-hostname HOSTNAME
  • HOSTNAME: ホスト名

ノードペアが複数ある場合は、c1a/c1bd1a/d1bd2a/d2bf1a/f1b などのように、ノードペア識別子とノード識別子を付与してホスト名を付けることを推奨します。たとえば、Control Node ペア 1 組、Data Node ペア 2 組、Forwarder Node ペア 1 組で構成されたクラスターであれば、次のようなホスト名を使用できます。

ノードペアホスト名説明
c1c1aControl Node ペア c1 のノード A
c1c1bControl Node ペア c1 のノード B
d1d1aData Node ペア d1 のノード A
d1d1bData Node ペア d1 のノード B
d2d2aData Node ペア d2 のノード A
d2d2bData Node ペア d2 のノード B
f1f1aForwarder Node ペア f1 のノード A
f1f1bForwarder Node ペア f1 のノード B
NTP の設定

すべてのノードが正確な時刻情報を使用できるように、同じ NTP サーバーと時刻を同期します。

Note
ネットワーク標準時刻を提供する NTP サーバーの IP アドレスまたは FQDN(例: time.kriss.re.kr)をあらかじめ確認しておいてください。
  1. すべてのサーバーが同じ NTP サーバーとネットワーク標準時刻を同期するように、/etc/chrony.conf ファイルに同じ NTP サーバーまたはサーバープールを設定してください。

    # Use public servers from the pool.ntp.org project.
    # Please consider joining the pool (https://www.pool.ntp.org/join.html).
    # pool 2.rocky.pool.ntp.org iburst    # pool 行をコメントアウト
    server time.kriss.re.kr iburst prefer # 韓国標準科学研究院の NTP サーバー
    server 192.0.2.1 iburst               # 内部ネットワーク 192.0.2.0/24 帯域の NTP サーバー(例)
    

    ⚠️ server 行を追加した場合は、pool 行を削除するかコメントアウトしてください。どちらか一方のみを使用する必要があります。

  2. 次のコマンドを実行して chronyd サービスを再起動してください。

    sudo systemctl restart chronyd
    
  3. 次のコマンドを実行して、現在登録されている NTP サーバーの同期状態を確認してください。chronyd が正常に動作していれば、同期状態が表示されます。

    chronyc sources -v
    
  4. 次のコマンドを実行すると、時刻を即座に同期できます。

    sudo chronyc -a makestep
    
ホストファイアウォールの設定

Logpresso Sonar の稼働に必要な通信が可能になるように、インバウンドのファイアウォールポリシーを設定してください。次は、事前準備ドキュメントで説明した ファイアウォールポリシーの設定に従って、Forwarder Node サーバーでファイアウォールポリシーを設定するコマンドの例です。

sudo firewall-cmd --permanent --add-port={22,8443,7140,8514,44300}/tcp --add-port={514,8514,162}/udp
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
  • Syslog over DTLS(8514/tcp、8514/udp)は標準ポートがないため、運用環境によって異なる場合があります。

上記のようなファイアウォール設定には、送信元 IP アドレスを制限しないという問題があります。ホストファイアウォールで送信元 IP アドレスを制限するには、次のように --add-rich-rule オプションを利用した高度なファイアウォールポリシーコマンドを実行する必要があります。IP アドレス帯域は実際の環境に合わせて変更してください。

# 1. 管理網: 192.0.2.0/24
# 管理者: SSH 接続(22)、Web 管理コンソールおよび API 点検(8443)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.0.2.0/24" port port="22" protocol="tcp" accept'
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.0.2.0/24" port port="8443" protocol="tcp" accept'

# 2. Control Node: 203.0.113.240/29
# Control Node: Sonar フェデレーション(8443)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.240/29" port port="8443" protocol="tcp" accept'

# 3. Forwarder Node 帯域: 203.0.113.160/27 (203.0.113.161 - 203.0.113.190)
# ピアノード間の状態確認(7140)
# 注意: Forwarder Node グループから来るトラフィックのみ許可
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.160/27" port port="7140" protocol="tcp" accept'

# 4. サービス網: 203.0.113.0/25 (203.0.113.1 - 203.0.113.126)
# 対象: Sentry エージェントおよび一般的なログ発生装置(スイッチ、サーバーなど)

# Sentry: RPC およびログ受信 (7140/tcp)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.0/25" port port="7140" protocol="tcp" accept'

# ログ収集対象: Syslog (514/udp)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.0/25" port port="514" protocol="udp" accept'

# ログ収集対象: Syslog over DTLS (8514/udp)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.0/25" port port="8514" protocol="tcp" accept'
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.0/25" port port="8514" protocol="udp" accept'

# ログ収集対象: SNMP TRAP (162/udp)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.0/25" port port="162" protocol="udp" accept'

# 5. Sentry 帯域: 203.0.113.0/25 (203.0.113.1 - 203.0.113.126)
# 証明書の更新、Sentry のインストール (44300/tcp)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.0/25" port port="44300" protocol="tcp" accept'

# 6. 設定の適用および確認
sudo firewall-cmd --reload
sudo firewall-cmd --list-rich-rules
ソケットバッファおよびメモリマップの設定

Syslog、Syslog over DTLS、SNMP TRAP の受信時に、カーネルのソケットバッファが不足したり、メモリバッファが不足したりすると、ログパケットが失われてログ損失が発生する場合があります。これを防ぐため、ソケットバッファおよびメモリマップの設定を変更します。この作業はすべてのノードで実行してください。

  1. /etc/sysctl.d ディレクトリに 50-logpresso.conf ファイルを作成し、ファイルに次の内容を追加してください。

    net.core.rmem_default = 52428800
    net.core.rmem_max = 52428800
    net.ipv4.udp_rmem_min = 8192
    net.ipv4.ipfrag_high_thresh = 16777216
    vm.max_map_count = 10000000
    vm.swappiness = 1
    

    各項目の意味は次のとおりです:

    変数説明デフォルト値設定値
    net.core.rmem_defaultソケットのデフォルト受信バッファサイズ21299252428800
    net.core.rmem_maxソケットの最大受信バッファサイズ21299252428800
    net.ipv4.udp_rmem_minUDP ソケットの最小受信バッファサイズ40968192
    net.ipv4.ipfrag_high_threshIP パケット再構成バッファの最大サイズ設定419430416777216
    vm.max_map_count仮想メモリマッピングの最大許容数6553010000000
    vm.swappinessスワップ使用の最小化601
  2. 次のコマンドを実行して、変更したカーネル設定を即座に適用してください。

    sudo sysctl -p
    
  3. 次のコマンドを実行して、変更した設定値を確認してください。

    sudo sysctl -a | grep -E "rmem_default|rmem_max|udp_rmem_min|ipfrag_high_thresh|max_map_count"
    
リソース制限の緩和設定
  1. /etc/security/limits.d ディレクトリに 50-logpresso.conf ファイルを作成し、ファイルに次の内容を追加してください。

    logpresso        soft    nofile         126488
    logpresso        hard    nofile         126488
    logpresso        soft    nproc          126488
    logpresso        hard    nproc          126488
    
    • nofile: 同時に開くことができるファイルの最大数
    • nproc: 同時に実行できるプロセス(およびスレッド)の最大数
  2. 次のコマンドを実行して、変更した設定値を確認してください。

    ulimit -n  # ファイルオープン制限(nofile)の確認
    ulimit -u  # プロセス数制限(nproc)の確認
    
診断ツールの権限付与
  1. 次のコマンドを実行して、jstackjmap 実行ファイルの正確なパスを確認してください。

    readlink /etc/alternatives/jstack
    readlink /etc/alternatives/jmap
    

    次のような結果を確認できるはずです。

    /usr/lib/jvm/java-21-openjdk/bin/jstack
    /usr/lib/jvm/java-21-openjdk/bin/jmap
    
  2. sudo visudo /etc/sudoers.d/logpresso コマンドを実行して、次のように編集してください。1 で確認した jstackjmap 実行ファイルのパスに対して、logpresso アカウントで実行できるように権限を付与します。

    # readlink コマンドの実行結果に合わせてパスを修正して設定してください。
    %logpresso     ALL=(ALL)       NOPASSWD: /usr/lib/jvm/java-21-openjdk/bin/jstack
    %logpresso     ALL=(ALL)       NOPASSWD: /usr/lib/jvm/java-21-openjdk/bin/jmap
    %logpresso     ALL=(ALL)       NOPASSWD: /usr/bin/arping
    %logpresso     ALL=(ALL)       NOPASSWD: /usr/bin/netstat
    %logpresso     ALL=(ALL)       NOPASSWD: /usr/sbin/ifconfig
    %logpresso     ALL=(ALL)       NOPASSWD: /usr/sbin/tcpdump
    
    Defaults:logpresso    !requiretty
    
    Note
    Logpresso Sonar のインストール時に logpresso アカウントが作成されます。ここでは、あらかじめ診断ツールの権限を付与する方法で説明します。
    arping、netstat、ifconfig、tcpdump コマンドは、Logpresso Sonar が Sentry の状態を確認したり、pcap ファイルを収集する目的で使用されます。
  3. 次のコマンドを実行して、権限が正常に適用されたかを確認してください。

    sudo visudo -c
    

Logpresso ディレクトリの作成

次のコマンドを実行して、Logpresso をインストールするディレクトリを作成してください。Logpresso ディレクトリは運用環境に合わせて変更して使用できます。このドキュメントでは /opt/logpresso を使用します。

sudo mkdir -p /opt/logpresso