3.9. systemd-journald および Fluentd の設定

Fluentd のジャーナルからの読み取りや、ジャーナルのデフォルト設定値は非常に低く、ジャーナルがシステムサービスからのロギング速度に付いていくことができないためにジャーナルエントリーが失われる可能性があります。

ジャーナルでエントリーが失われるのを防ぐことができるように RateLimitIntervalSec=30s および RateLimitBurst=10000 (必要な場合はさらに高い値) を設定することが推奨されます。

3.9.1. クラスターロギング用の systemd-journald の設定

プロジェクトのスケールアップ時に、デフォルトのロギング環境にはいくらかの調整が必要になる場合があります。

たとえば、ログが見つからない場合は、journald の速度制限を引き上げる必要がある場合があります。一定期間保持するメッセージ数を調整して、クラスターロギングがログをドロップせずに過剰なリソースを使用しないようにすることができます。

また、ログを圧縮する必要があるかどうか、ログを保持する期間、ログを保存する方法、ログを保存するかどうかやその他の設定を決定することもできます。

手順

  1. 必要な設定で journald.conf ファイルを作成します。

    Compress=yes 1
    ForwardToConsole=no 2
    ForwardToSyslog=no
    MaxRetentionSec=1month 3
    RateLimitBurst=10000 4
    RateLimitIntervalSec=30s
    Storage=persistent 5
    SyncIntervalSec=1s 6
    SystemMaxUse=8g 7
    SystemKeepFree=20% 8
    SystemMaxFileSize=10M 9
    1
    ログがファイルシステムに書き込まれる前にそれらのログを圧縮するかどうかを指定します。yes を指定してメッセージを圧縮するか、または no を指定して圧縮しないようにします。デフォルトは yes です。
    2
    ログメッセージを転送するかどうかを設定します。それぞれについて、デフォルトで no に設定されます。以下を指定します。
    • ForwardToConsole: ログをシステムコンソールに転送します。
    • ForwardToKsmg: ログをカーネルログバッファーに転送します。
    • ForwardToSyslog: syslog デーモンに転送します。
    • ForwardToWall: メッセージを wall メッセージとしてすべてのログインしているユーザーに転送します。
    3
    ジャーナルエントリーを保存する最大時間を指定します。数字を入力して秒数を指定します。または、year、month、week、day、h または m などの単位を含めます。無効にするには 0 を入力します。デフォルトは 1month です。
    4
    レート制限を設定します。RateLimitIntervalSec で定義される期間に、 RateLimitBurst で指定される以上のログが受信される場合、この期間内の追加のメッセージすべてはこの期間が終了するまでにドロップされます。デフォルト値である RateLimitIntervalSec=30s および RateLimitBurst=10000 を設定することが推奨されます。
    5
    ログの保存方法を指定します。デフォルトは persistent です。
    • volatile: ログを /var/log/journal/ のメモリーに保存します。
    • persistent: ログを /var/log/journal/ のディスクに保存します。systemd は存在しない場合はディレクトリーを作成します。
    • auto: ディレクトリーが存在する場合に、ログを /var/log/journal/ に保存します。存在しない場合は、systemd はログを /run/systemd/journal に一時的に保存します。
    • none: ログを保存しません。systemd はすべてのログをドロップします。
    6
    ERRWARNINGNOTICEINFO、および DEBUG ログについてジャーナルファイルをディスクに同期させるまでのタイムアウトを指定します。 systemd は、CRITALERT、または EMERG ログの受信後すぐに同期を開始します。デフォルトは 1s です。
    7
    ジャーナルが使用できる最大サイズを指定します。デフォルトは 8g です。
    8
    systemd が残す必要のあるディスク領域のサイズを指定します。デフォルトは 20% です。
    9
    /var/log/journal に永続的に保存される個別のジャーナルファイルの最大サイズを指定します。デフォルトは 10M です。
    注記

    レート制限を削除する場合、システムロギングデーモンの CPU 使用率が高くなることがあります。 以前はスロットリングされていた可能性のあるメッセージが処理されるためです。

    systemd 設定の詳細については、https://www.freedesktop.org/software/systemd/man/journald.conf.html を参照してください。このページに一覧表示されるデフォルト設定は OpenShift Container Platform には適用されない可能性があります。

  2. 次のコマンドを実行して、journal.conf ファイルを base64 に変換し、jrnl_cnf という名前の変数に保存します。

    $ export jrnl_cnf=$( cat journald.conf | base64 -w0 )
  3. 前の手順で作成した jrnl_cnf 変数を含む MachineConfig オブジェクトを作成します。次のサンプルコマンドは、ワーカーの MachineConfig オブジェクトを作成します。

    $ cat << EOF > ./40-worker-custom-journald.yaml 1
    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      labels:
        machineconfiguration.openshift.io/role: worker 2
      name: 40-worker-custom-journald 3
    spec:
      config:
        ignition:
          config: {}
          security:
            tls: {}
          timeouts: {}
          version: 3.1.0
        networkd: {}
        passwd: {}
        storage:
          files:
          - contents:
              source: data:text/plain;charset=utf-8;base64,${jrnl_cnf} 4
              verification: {}
            filesystem: root
            mode: 0644 5
            path: /etc/systemd/journald.conf.d/custom.conf
      osImageURL: ""
    EOF
    1
    オプション: コントロールプレーン (マスターとも呼ばれます) ノードの場合、ファイル名を 40-master-custom-journald.yaml として指定できます。
    2
    オプション: コントロールプレーン (マスターとも呼ばれます) ノードの場合、master としてのロールを指定します。
    3
    オプション: コントロールプレーン (マスターとも呼ばれます) ノードの場合、名前を 40-master-custom-journald として指定できます。
    4
    オプション: journald.conf ファイルにパラメーターの静的コピーを含めるには、${jrnl_cnf}echo$jrnl_cnf コマンドの出力に置き換えます。
    5
    journal.conf ファイルのパーミッションを設定します。0644 パーミッションを設定することが推奨されます。
  4. マシン設定を作成します。

    $ oc apply -f <file_name>.yaml

    コントローラーは新規の MachineConfig オブジェクトを検出し、新規の rendered-worker-<hash> バージョンを生成します。

  5. 新規のレンダリングされた設定の各ノードへのロールアウトのステータスをモニターします。

    $ oc describe machineconfigpool/<node> 1
    1
    ノードを master または worker として指定します。

    worker の出力例

    Name:         worker
    Namespace:
    Labels:       machineconfiguration.openshift.io/mco-built-in=
    Annotations:  <none>
    API Version:  machineconfiguration.openshift.io/v1
    Kind:         MachineConfigPool
    
    ...
    
    Conditions:
      Message:
      Reason:                All nodes are updating to rendered-worker-913514517bcea7c93bd446f4830bc64e