第6章 ログのサードパーティーシステムへの転送

デフォルトで、OpenShift Container Platform クラスターロギングは ClusterLogging カスタムリソース (CR) に定義されるデフォルトの内部 Elasticsearch ログストアにログを送信します。

以下の方法を使用して、クラスターロギングを、ログをデフォルトの Elasticsearch ログストアの代わりに OpenShift Container Platform クラスター外の宛先に送信するように設定できます。

  • Fluentd 転送プロトコルを使用したログの送信。Configmap を使用して Fluentd 転送プロトコル を使用し、Fluent 転送 プロトコルを受け入れる外部ロギングアグリゲーターにログを安全に送信できます。
  • syslog を使用したログの送信。設定マップを作成して、syslog プロトコル を使用してログを外部 syslog (RFC 3164) サーバーに送信できます。

または、現在テクノロジープレビューとして ログ転送 API を使用できます。Fluentd プロトコルおよび syslog よりも設定が簡単なログ転送 API は、ログを内部 Elasticsearch ログストアおよび外部の Fluentd ログ集計ソリューションに送信するための設定を公開します。

同じクラスターで設定マップのメソッドおよびログ転送 API を使用することはできません。

重要

ログ転送 API はテクノロジープレビュー機能としてのみご利用いただけます。テクノロジープレビュー機能は Red Hat の実稼働環境でのサービスレベルアグリーメント (SLA) ではサポートされていないため、Red Hat では実稼働環境での使用を推奨していません。Red Hat は実稼働環境でこれらを使用することを推奨していません。テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲についての詳細は、https://access.redhat.com/ja/support/offerings/techpreview/ を参照してください。

設定マップを使用してログを転送する方法は非推奨となり、今後のリリースではログ転送 API に置き換えられます。

6.1. Fluentd 転送プロトコルを使用したログの転送

Fluentd 転送 プロトコルを使用して、デフォルトの Elasticsearch ログストアではなく外部のログアグリゲーターにログのコピーを送信できます。OpenShift Container Platform クラスターでは、Fluentd 転送 プロトコルを使用して、このプロトコルを受け入れるように設定されたサーバーにログを送信します。外部ログアグリゲーターを OpenShift Container Platform からログを受信するように設定する必要があります。

注記

ログ転送のこの方法は OpenShift Container Platform では非推奨となり、今後のリリースではログ転送 API に置き換えられます。

Fluentd 転送 プロトコルを使用して OpenShift Container Platform をログを送信するように設定するには、外部ログアグリゲーターを参照する openshift-logging namespace の secure-forward という ConfigMap を作成します。

重要

OpenShift Container Platform 4.3 以降では、Fluentd 転送 プロトコルを使用するプロセスは変更されています。以下で説明されているように ConfigMap を作成する必要があります。

さらに、設定で必要になる証明書を、Fluentd Pod にマウントされる secure-forward という名前のシークレットに追加できます。

secure-forward.conf のサンプル

<store>
  @type forward
  <security>
    self_hostname ${hostname} # ${hostname} is a placeholder.
    shared_key "fluent-receiver"
  </security>
  transport tls
  tls_verify_hostname false           # Set false to ignore server cert hostname.

  tls_cert_path '/etc/ocp-forward/ca-bundle.crt'
  <buffer>
    @type file
    path '/var/lib/fluentd/secureforwardlegacy'
    queued_chunks_limit_size "#{ENV['BUFFER_QUEUE_LIMIT'] || '1024' }"
    chunk_limit_size "#{ENV['BUFFER_SIZE_LIMIT'] || '1m' }"
    flush_interval "#{ENV['FORWARD_FLUSH_INTERVAL'] || '5s'}"
    flush_at_shutdown "#{ENV['FLUSH_AT_SHUTDOWN'] || 'false'}"
    flush_thread_count "#{ENV['FLUSH_THREAD_COUNT'] || 2}"
    retry_max_interval "#{ENV['FORWARD_RETRY_WAIT'] || '300'}"
    retry_forever true
    # the systemd journald 0.0.8 input plugin will just throw away records if the buffer
    # queue limit is hit - 'block' will halt further reads and keep retrying to flush the
    # buffer to the remote - default is 'exception' because in_tail handles that case
    overflow_action "#{ENV['BUFFER_QUEUE_FULL_ACTION'] || 'exception'}"
  </buffer>
  <server>
    host fluent-receiver.openshift-logging.svc  # or IP
    port 24224
  </server>
</store>

設定に基づく secure-forward ConfigMap のサンプル

apiVersion: v1
data:
 secure-forward.conf: "<store>
     \ @type forward
     \ <security>
     \   self_hostname ${hostname} # ${hostname} is a placeholder.
     \   shared_key \"fluent-receiver\"
     \ </security>
     \ transport tls
     \ tls_verify_hostname false           # Set false to ignore server cert hostname.
     \ tls_cert_path '/etc/ocp-forward/ca-bundle.crt'
     \ <buffer>
     \   @type file
     \   path '/var/lib/fluentd/secureforwardlegacy'
     \   queued_chunks_limit_size \"#{ENV['BUFFER_QUEUE_LIMIT'] || '1024' }\"
     \   chunk_limit_size \"#{ENV['BUFFER_SIZE_LIMIT'] || '1m' }\"
     \   flush_interval \"#{ENV['FORWARD_FLUSH_INTERVAL'] || '5s'}\"
     \   flush_at_shutdown \"#{ENV['FLUSH_AT_SHUTDOWN'] || 'false'}\"
     \   flush_thread_count \"#{ENV['FLUSH_THREAD_COUNT'] || 2}\"
     \   retry_max_interval \"#{ENV['FORWARD_RETRY_WAIT'] || '300'}\"
     \   retry_forever true
     \   # the systemd journald 0.0.8 input plugin will just throw away records if the buffer
     \   # queue limit is hit - 'block' will halt further reads and keep retrying to flush the
     \   # buffer to the remote - default is 'exception' because in_tail handles that case
     \   overflow_action \"#{ENV['BUFFER_QUEUE_FULL_ACTION'] || 'exception'}\"
     \ </buffer>
     \ <server>
     \   host fluent-receiver.openshift-logging.svc  # or IP
     \   port 24224
     \ </server>
     </store>"
kind: ConfigMap
metadata:
  creationTimestamp: "2020-01-15T18:56:04Z"
  name: secure-forward
  namespace: openshift-logging
  resourceVersion: "19148"
  selfLink: /api/v1/namespaces/openshift-logging/configmaps/secure-forward
  uid: 6fd83202-93ab-d851b1d0f3e8

手順

OpenShift Container Platform を Fluentd 転送 プロトコルを使用してログを転送できるように設定するには、以下を実行します。

  1. 転送 パラメーターについて secure-forward.conf という名前の設定ファイルを作成します。

    1. シークレットおよび TLS 情報を設定します。

       <store>
        @type forward
      
        self_hostname ${hostname} 1
        shared_key <SECRET_STRING> 2
      
        transport tls 3
      
        tls_verify_hostname true 4
        tls_cert_path <path_to_file> 5
      1
      自動生成される証明書の共通名 (CN) のデフォルト値を指定します。
      2
      ノード間で共有キーを入力します。
      3
      tls を指定して TLS 検証を有効にします。
      4
      サーバー証明書のホスト名を確認するには true に設定します。サーバー証明書のホスト名を無視するには、false に設定します。
      5
      プライベート CA 証明書ファイルへのパスを /etc/ocp-forward/ca_cert.pem として指定します。

      mTLS を使用するには、クライアント証明書およびキーパラメーターなどの設定に関する情報として Fluentd のドキュメント を参照してください。

    2. 外部 Fluentd サーバーの名前、ホスト、およびポートを設定します。

        <server>
          name 1
          host 2
          hostlabel 3
          port 4
        </server>
        <server> 5
          name
          host
        </server>
      1
      オプションで、このサーバーの名前を入力します。
      2
      サーバーのホスト名または IP を指定します。
      3
      サーバーのホストラベルを指定します。
      4
      サーバーのポートを指定します。
      5
      オプションで、サーバーを追加します。2 つ以上のサーバーを指定する場合、forward はこれらのサーバーノードをラウンドロビン順で使用します。

      以下は例になります。

        <server>
          name externalserver1
          host 192.168.1.1
          hostlabel externalserver1.example.com
          port 24224
        </server>
        <server>
          name externalserver2
          host externalserver2.example.com
          port 24224
        </server>
        </store>
  2. 設定ファイルから openshift-logging namespace に secure-forward という名前の ConfigMap を作成します。

    $ oc create configmap secure-forward --from-file=secure-forward.conf -n openshift-logging
  3. オプション: レシーバーに必要なシークレットをインポートします。

    $ oc create secret generic secure-forward --from-file=<arbitrary-name-of-key1>=cert_file_from_fluentd_receiver --from-literal=shared_key=value_from_fluentd_receiver

    以下は例になります。

    $ oc create secret generic secure-forward --from-file=ca-bundle.crt=ca-for-fluentd-receiver/ca.crt --from-literal=shared_key=fluentd-receiver
  4. fluentd Pod を更新し、secure-forward シークレットおよび secure-forward ConfigMap を適用します。

    $ oc delete pod --selector logging-infra=fluentd
  5. 外部ログアグリゲーターを OpenShift Container Platform からメッセージを安全に受信できるように設定します。