8.7. ロギングコレクターの設定

OpenShift Container Platform は Fluentd を使用して、クラスターから操作およびアプリケーションログを収集し、Kubernetes Pod および Namespace メタデータでデータを拡充します。

ログローテーション、ログの位置を設定し、外部のログアグリゲーターを使用し、ログコレクターの他の設定を行うことができます。

注記

特に指示がない場合は、これらの設定を実行する前にクラスターロギングを管理外の状態に設定する必要があります。詳細は、「クラスターロギングの管理状態の変更」を参照してください。

管理外の状態の Operator はサポートされず、クラスター管理者は個々のコンポーネント設定およびアップグレードを完全に制御していることを前提としています。詳細は、管理外の Operator のサポートポリシーについて参照してください。

8.7.1. ロギングコレクター Pod の表示

oc get pods --all-namespaces -o wide コマンドを使用して、Fluentd がデプロイされるノードを表示できます。

手順

openshift-logging プロジェクトで以下のコマンドを実行します。

$ oc get pods --all-namespaces -o wide | grep fluentd

NAME                         READY     STATUS    RESTARTS   AGE     IP            NODE                           NOMINATED NODE   READINESS GATES
fluentd-5mr28                1/1       Running   0          4m56s   10.129.2.12   ip-10-0-164-233.ec2.internal   <none>           <none>
fluentd-cnc4c                1/1       Running   0          4m56s   10.128.2.13   ip-10-0-155-142.ec2.internal   <none>           <none>
fluentd-nlp8z                1/1       Running   0          4m56s   10.131.0.13   ip-10-0-138-77.ec2.internal    <none>           <none>
fluentd-rknlk                1/1       Running   0          4m56s   10.128.0.33   ip-10-0-128-130.ec2.internal   <none>           <none>
fluentd-rsm49                1/1       Running   0          4m56s   10.129.0.37   ip-10-0-163-191.ec2.internal   <none>           <none>
fluentd-wjt8s                1/1       Running   0          4m56s   10.130.0.42   ip-10-0-156-251.ec2.internal   <none>           <none>

8.7.2. ログコレクター CPU およびメモリー制限の設定

ログコレクターは、CPU とメモリー制限の両方への調整を許可します。

手順

  1. openshift-logging プロジェクトでクラスターロギングのカスタムリソース (CR) を編集します。

    $ oc edit ClusterLogging instance
    $ oc edit ClusterLogging instance
    
    apiVersion: "logging.openshift.io/v1"
    kind: "ClusterLogging"
    metadata:
      name: "instance"
    
    ....
    
    spec:
      collection:
        logs:
          fluentd:
            resources:
              limits: 1
                cpu: 250m
                memory: 1Gi
              requests:
                cpu: 250m
                memory: 1Gi
    1
    必要に応じて CPU、メモリー制限および要求を指定します。表示される値はデフォルト値です。

8.7.3. 収集したログの場所の設定

ログコレクターは、LOGGING_FILE_PATH 環境変数に応じて、指定したファイルか、またはデフォルトの場所の /var/log/fluentd/fluentd.log にログを書き込みます。

前提条件

  • クラスターロギングを管理外の状態に設定する。管理外の状態の Operator はサポートされず、クラスター管理者は個々のコンポーネント設定およびアップグレードを完全に制御していることを前提としています。

手順

Fluentd ログの出力の場所を設定するには、以下を実行します。

  1. fluentd daemonset で LOGGING_FILE_PATH パラメーターを編集します。特定のファイルまたは console を指定できます。

    spec:
      template:
        spec:
          containers:
              env:
                - name: LOGGING_FILE_PATH
                  value: console 1
    1
    ログの出力方法を指定します。
    • console を使用して Fluentd のデフォルトの場所を使用します。oc logs [-f] <pod_name> コマンドでログを取得します。
    • <path-to-log/fluentd.log> を使用してログ出力を指定されたファイルに送信します。oc exec <pod_name> — logs コマンドでログを取得します。これはデフォルトの設定です。

      または、CLI を使用します。

      $ oc -n openshift-logging set env daemonset/fluentd LOGGING_FILE_PATH=/logs/fluentd.log

8.7.4. ログコレクションのスロットリング

特に詳細なプロジェクトについては、管理者は処理される前のログコレクターによるログの読み取り速度を減速することができます。スロットリングによってログの読み取り速度が遅くなり、Kibana がレコードを表示するのにより長い時間がかかる可能性があります。

警告

スロットリングは設定されたプロジェクトのログ集計が遅れる一因になる可能性があります。Fluentd が追い付く前に Pod が削除された場合、ログエントリーが消失する可能性があります。

注記

Systemd ジャーナルをログソースとして使用している場合、スロットリングは機能しません。スロットリングの実装は、各プロジェクトの個々のログファイルの読み取りを調整できる機能によって決まります。ジャーナルからの読み取り時に、単一のログソースしか存在せず、ログファイルが存在しないと、ファイルベースのスロットリングは利用できません。Fluentd プロセスに読み込まれるログエントリーを制限する方法はありません。

前提条件

クラスターロギングを管理外の状態に設定する。

手順

  1. Fluentd を特定プロジェクトを制限するように設定するには、デプロイメント後に Fluentd ConfigMap でスロットル設定を編集します。

    $ oc edit configmap/fluentd

    throttle-config.yaml キーの形式は、プロジェクト名と、各ノードでのログの読み取りに必要な速度が含まれる YAML ファイルです。デフォルトはノードごとに一度に 1000 行です。例:

    throttle-config.yaml: |
      - opensift-logging:
          read_lines_limit: 10
      - .operations:
          read_lines_limit: 100

8.7.5. Fluentd のバッファーチャンクの制限について

Fluentd ロガーが多数のログを処理できない場合、メモリーの使用量を減らし、データ損失を防ぐためにファイルバッファリングに切り換える必要があります。

Fluentd ファイルバッファリングは、記録を chunks に保管します。チャンクは buffers に保管されます。

注記

以下で説明されているように Fluentd daemonset で FILE_BUFFER_LIMIT または BUFFER_SIZE_LIMIT パラメーターを変更するには、クラスターロギングを管理外 (unmanaged) の状態に設定する必要があります。管理外の状態の Operator はサポートされず、クラスター管理者は個々のコンポーネント設定およびアップグレードを完全に制御していることを前提としています。

Fluentd buffer_chunk_limit は、デフォルト値が 8m の環境変数 BUFFER_SIZE_LIMIT によって決定されます。出力ごとのファイルのバッファーサイズは、デフォルト値が 256Mi の環境変数 FILE_BUFFER_LIMIT によって決定されます。永続的なボリュームサイズは、FILE_BUFFER_LIMIT に出力を乗算した結果よりも大きくなければなりません。

Fluentd Pod では、永続ボリューム /var/lib/fluentd は PVC または hostmount などによって作成する必要があります。その領域はファイルバッファーに使用されます。

buffer_type および buffer_path は、以下のように Fluentd 設定ファイルで設定されます。

$ egrep "buffer_type|buffer_path" *.conf
output-es-config.conf:
  buffer_type file
  buffer_path `/var/lib/fluentd/buffer-output-es-config`
output-es-ops-config.conf:
  buffer_type file
  buffer_path `/var/lib/fluentd/buffer-output-es-ops-config`

Fluentd buffer_queue_limit は変数 BUFFER_QUEUE_LIMIT の値です。この値はデフォルトで 32 になります。

環境変数 BUFFER_QUEUE_LIMIT(FILE_BUFFER_LIMIT / (number_of_outputs * BUFFER_SIZE_LIMIT)) として計算されます。

BUFFER_QUEUE_LIMIT 変数にデフォルトの値のセットが含まれる場合、以下のようになります。

  • FILE_BUFFER_LIMIT = 256Mi
  • number_of_outputs = 1
  • BUFFER_SIZE_LIMIT = 8Mi

buffer_queue_limit の値は 32 になります。buffer_queue_limit を変更するには、FILE_BUFFER_LIMIT の値を変更する必要があります。

この数式では、number_of_outputs は、すべてのログが単一リソースに送信され、追加のリソースごとに 1 つずつ増分する場合に 1 になります。たとえば、number_of_outputs の値は以下のようになります。

  • 1: すべてのログが単一の Elasticsearch Pod に送信される場合
  • 2: アプリケーションログが Elasticsearch Pod に送信され、運用ログが別の Elasticsearch Pod に送信される場合
  • 4: アプリケーションログが Elasticsearch Pod に送信され、運用ログが別の Elasticsearch Pod に送信される場合で、それらがどちらも他の Fluentd インスタンスに転送される場合

8.7.6. 環境変数を使用したロギングコレクターの設定

環境変数を使用して Fluentd ログコレクターの設定を変更することができます。

利用可能な環境変数の一覧については、Github の Fluentd README を参照してください。

前提条件

  • クラスターロギングを管理外の状態に設定する。管理外の状態の Operator はサポートされず、クラスター管理者は個々のコンポーネント設定およびアップグレードを完全に制御していることを前提としています。

手順

必要に応じて Fluentd 環境変数のいずれかを設定します。

oc set env ds/fluentd <env-var>=<value>

以下は例になります。

oc set env ds/fluentd LOGGING_FILE_AGE=30

8.7.7. ロギングコレクターのアラートについて

以下のアラートはロギングコレクターによって生成され、Prometheus UI の Alerts タブに表示できます。

すべてのロギングコレクターアラートは、OpenShift Container Platform Web コンソールの MonitoringAlerts ページに一覧表示されます。アラートは以下の状態のいずれかになります。

  • Firingアラートの状態はタイムアウトの期間は true になります。Firing アラートの末尾の Option メニューをクリックし、詳細情報を表示するか、アラートを非通知 (silence) にします。
  • Pending: このアラート状態は現時点で true ですが、タイムアウトに達していません。
  • Not Firingアラートは現時点でトリガーされていません。

表8.3 Fluentd Prometheus アラート

アラートメッセージ説明重大度

FluentdErrorsHigh

In the last minute, <value> errors reported by fluentd <instance>.

Fluentd は指定した数 (デフォルトでは 10) よりも多くの問題を報告しています。

Critical

FluentdNodeDown

Prometheus could not scrape fluentd <instance> for more than 10m.

Fluentd は Prometheus が特定の Fluentd インスタンスを収集できなかったことを報告します。

Critical

FluentdQueueLengthBurst

In the last minute, fluentd <instance> buffer queue length increased more than 32.Current value is <value>.

Fluentd は値が大きすぎることを報告しています。

Warning

FluentdQueueLengthIncreasing

In the last 12h, fluentd <instance> buffer queue length constantly increased more than 1.Current value is <value>.

Fluentd はキューの使用についての問題を報告しています。

Critical