Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

6.8. OpenShift Container Platform ログの外部デバイスへの送信

Elasticsearch ログを、外部でホストされた Elasticsearch インスタンスまたは外部 syslog サーバーなどの外部デバイスに送信することができます。また、ログを外部ログアグリゲーターに送信するように Fluentd を設定することもできます。

注記

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

6.8.1. Fluentd をログを外部 Elasticsearch インスタンスに送信するように設定する

Fluentd は、Elasticsearch デプロイメント設定の ES_HOSTES_PORTOPS_HOST、および OPS_PORT 環境変数の値にログを送信します。アプリケーションログは ES_HOST の宛先に、操作ログは OPS_HOST の宛先に送信されます。

注記

AWS Elasticsearch インスタンスへのログの直接送信はサポートされていません。Fluentd Secure Forward を使用して、fluent-plugin-aws-elasticsearch-service プラグインで設定した制御対象の Fluentd のインスタンスにログを送信してください。

前提条件

  • クラスターロギングおよび Elasticsearch がインストールされていること。
  • クラスターロギングを管理外の状態に設定する。

手順

ログを特定の Elasticsearch インスタンスに送信するには、以下を実行します。

  1. openshift-logging プロジェクトで fluentd daemonset を編集します。

    $ oc edit ds/fluentd
    
    spec:
      template:
        spec:
          containers:
              env:
              - name: ES_HOST
                value: elasticsearch
              - name: ES_PORT
                value: '9200'
              - name: ES_CLIENT_CERT
                value: /etc/fluent/keys/app-cert
              - name: ES_CLIENT_KEY
                value: /etc/fluent/keys/app-key
              - name: ES_CA
                value: /etc/fluent/keys/app-ca
              - name: OPS_HOST
                value: elasticsearch
              - name: OPS_PORT
                value: '9200'
              - name: OPS_CLIENT_CERT
                value: /etc/fluent/keys/infra-cert
              - name: OPS_CLIENT_KEY
                value: /etc/fluent/keys/infra-key
              - name: OPS_CA
                value: /etc/fluent/keys/infra-ca
  2. 外部 Elasticsearch インスタンスにアプリケーションログと操作ログの両方を含めるには、ES_HOSTOPS_HOST を同じ宛先に設定し、ES_PORTOPS_PORT が同一の値を持つことを確認します。
  3. TLS の外部でホストされる Elasticsearch インスタンスを設定します。相互 TLS を使用する外部でホストされた Elasticsearch インスタンスのみが許可されます。
注記

指定された Kibana と Elasticsearch イメージを使用していない場合、同じマルチテナント機能は利用できず、データは特定プロジェクトへのユーザーアクセスによる制限を受けません。

6.8.2. Fluentd をログを外部 syslog サーバーに送信するように設定する

fluent-plugin-remote-syslog プラグインをホストで使用して、ログを外部 syslog サーバーに送信します。

前提条件

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

手順

  1. openshift-logging プロジェクトの fluentd daemonset で環境変数を設定します。

    spec:
      template:
        spec:
          containers:
            - name: fluentd
              image: 'registry.redhat.io/openshift4/ose-logging-fluentd:v4.1'
              env:
                - name: REMOTE_SYSLOG_HOST 1
                  value: host1
                - name: REMOTE_SYSLOG_HOST_BACKUP
                  value: host2
                - name: REMOTE_SYSLOG_PORT_BACKUP
                  value: 5555
    1
    必要なリモート syslog ホスト。各ホストで必須です。

    これによって 2 つの宛先が作成されます。host1 の syslog サーバーはデフォルトポート 514 でメッセージを受信し、host2 は同じメッセージをポート 5555 で受信します。

  2. または、openshift-logging プロジェクトに独自の fluentd daemonset を設定できます。

    Fluentd 環境変数

    パラメーター説明

    USE_REMOTE_SYSLOG

    デフォルトは false です。fluent-plugin-remote-syslog gem を使用できるようにするには、true に設定します。

    REMOTE_SYSLOG_HOST

    (必須) リモート syslog サーバーのホスト名または IP アドレス。

    REMOTE_SYSLOG_PORT

    接続先のポート番号。デフォルトは 514 です。

    REMOTE_SYSLOG_SEVERITY

    syslog の重大度を設定します。デフォルトは debug です。

    REMOTE_SYSLOG_FACILITY

    syslog ファシリティーを設定します。デフォルトは local0 です。

    REMOTE_SYSLOG_USE_RECORD

    デフォルトは false です。レコードの重大度フィールドおよびファシリティーフィールドを使用して syslog メッセージに設定するには、true に設定します。

    REMOTE_SYSLOG_REMOVE_TAG_PREFIX

    タグからプレフィックスを削除します。デフォルトは '' (空) です。

    REMOTE_SYSLOG_TAG_KEY

    これが指定されている場合、このフィールドをキーとして使用してレコードを検索し、syslog メッセージにタグを設定します。

    REMOTE_SYSLOG_PAYLOAD_KEY

    これが指定されている場合、このフィールドをキーとして使用してレコードを検索し、syslog メッセージにペイロードを設定します。

    REMOTE_SYSLOG_TYPE

    トランスポート層プロトコルタイプを設定します。デフォルトは syslog_buffered になり、これにより、TCP プロトコルが設定されます。UDP に切り替えるには、これを syslog に設定します。

    警告

    この実装は安全ではないため、接続にスヌーピングがないことを保証できる環境でのみ使用してください。

6.8.3. ログを外部ログアグリゲーターに送信するように Fluentd を設定する

out_forward プラグインを使用して、デフォルトの Elasticsearch ではなく外部のログアグリゲーターにログのコピーを送信するように Fluentd を設定することができます。ローカルにホストされている Fluentd による処理の後に、ログレコードをさらに処理することができます。

forward プラグインは Fluentd によってのみサポートされます。out_forward プラグインはクライアント側 (センダー) を実装し、in_forward プラグインはサーバー側 (レシーバー) を実装します。

Out_forward を使用してログを送信するように OpenShift Container Platform を設定するには、受信側を参照する openshift -logging namespace に secure- forward という ConfigMap を作成します。レシーバーで、in_forward プラグインを OpenShift Container Platform からログを受信するように設定します。in_forward プラグインの使用方法についての詳細は、 Fluentd ドキュメントを参照してください。

デフォルトの secure-forward.conf セクション

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

#   tls_cert_path /path/for/certificate/ca_cert.pem
#   <buffer>
#     @type file
#     path '/var/lib/fluentd/forward'
#     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 server.fqdn.example.com  # or IP
#     port 24284
#   </server>
#   <server>
#     host 203.0.113.8 # ip address to connect
#     name server.fqdn.example.com # The name of the server. Used for logging and certificate verification in TLS transport (when host is address).
#   </server>
# </store>

手順

Fluentd ログのコピーを外部ログアグリゲーターに送信するには、以下を実行します。

  1. Fluentd 設定マップの secure-forward.conf セクションを編集します。

    $ oc edit configmap/fluentd -n openshift-logging
  2. 外部 Fluentd サーバーの名前、ホスト、およびポートを入力します。

    #   <server>
    #     host server.fqdn.example.com  # or IP
    #     port 24284
    #   </server>
    #   <server>
    #     host 203.0.113.8 # ip address to connect
    #     name server.fqdn.example.com # The name of the server. Used for logging and certificate verification in TLS transport (when host is address).
    #   </server>

    例:

      <server>
        name externalserver1 1
        host 192.168.1.1 2
        port 24224 3
      </server>
      <server> 4
        name externalserver1
        host 192.168.1.2
        port 24224
      </server>
    </store>
    1
    オプションで、この外部のアグリゲーターの名前を入力します。
    2
    外部アグリゲーターのホスト名または IP を指定します。
    3
    外部アグリゲーターのポートを指定します。
    4
    オプションで、追加の外部のアグリゲーターを追加します。
  3. CA 証明書とプライベートキーへのパスを secure-forward.conf セクションに追加します。

    #   <security>
    #     self_hostname ${hostname} # ${hostname} is a placeholder. 1
    #     shared_key <shared_key_between_forwarder_and_forwardee> 2
    #   </security>
    
    #   tls_cert_path /path/for/certificate/ca_cert.pem 3
    1
    自動生成される証明書の共通名 (CN) のデフォルト値を指定します。
    2
    認証に共有キーを指定します。
    3
    CA 証明書へのパスを指定します。

    以下は例になります。

       <security>
         self_hostname client.fqdn.local
         shared_key cluster_logging_key
       </security>
    
       tls_cert_path /etc/fluent/keys/ca.crt

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

  4. secure-forward.conf で使用される証明書を Fluentd Pod にマウントされる既存のシークレットに追加します。your_ca_certyour_private_key の値は configmap/logging-fluentdsecure-forward.conf で指定されている値と一致している必要があります。

    $ oc patch secrets/fluentd --type=json \
      --patch "[{'op':'add','path':'/data/your_ca_cert','value':'$(base64 -w0 /path/to/your_ca_cert.pem)'}]"
    $ oc patch secrets/fluentd --type=json \
      --patch "[{'op':'add','path':'/data/your_private_key','value':'$(base64 -w0 /path/to/your_private_key.pem)'}]"
    注記

    your_private_key は、汎用的な名前に置き換えます。これは、JSON パスへのリンクであり、使用しているホストシステムのパスではありません。

    以下は例になります。

    $ oc patch secrets/fluentd --type=json \
      --patch "[{'op':'add','path':'/data/ca.crt','value':'$(base64 -w0 /etc/fluent/keys/ca.crt)'}]"
    $ oc patch secrets/fluentd --type=json \
      --patch "[{'op':'add','path':'/data/ext-agg','value':'$(base64 -w0 /etc/fluent/keys/ext-agg.pem)'}]"
  5. 外部アグリゲーターで secure-forward.conf ファイルを設定し、Fluentd からのメッセージを安全に受け入れられるようにします。

    外部アグリゲーターを設定する際は、Fluentd からのメッセージを安全に受信できる必要があります。

詳細情報は、inforward プラグインのセットアップ方法について、および out_forward プラグインを参照してください。