このトピックでは、Fluent Bit 用 TKG 拡張機能 v1.3.1 をデプロイする方法について説明します。Fluent Bit は高速で軽量なログ プロセッサであり、さまざまなソースからアプリケーション データとログを収集し、それらを統一して複数の宛先に送信できます。Tanzu Kubernetes クラスタ ログを収集して、選択した転送先に転送するには、Fluent Bit の TKG 拡張機能をデプロイします。

拡張機能の前提条件

Fluent Bit 用 TKG 拡張機能 v1.3.1 をデプロイする前に、次の要件を満たす必要があります。

Fluent Bit 拡張機能のデプロイ

Fluent Bit の TKG 拡張機能は、Fluent Bit コンテナをクラスタにインストールします。このコンテナの詳細については、 https://fluentbit.io/を参照してください。
コンテナ リソースの種類 レプリカ 説明
Fluent Bit DaemonSet 6 ログ コレクタ、アグリゲータ、フォワーダ
この拡張機能は、 https://projects.registry.vmware.com/ にある VMware パブリック レジストリからコンテナをプルするように構成されています。プライベート レジストリを使用する場合は、データ値と拡張機能構成ファイルに含まれるエンドポイント URL を、対応するものに変更します。フィールドとオプションの説明については、 Fluent Bit 拡張機能の構成を参照してください。
  1. 拡張機能のすべての前提条件を満たしていることを確認します。拡張機能の前提条件を参照してください。
  2. Fluent Bit 拡張機能のあるディレクトリに移動します。
    cd /tkg-extensions-v1.3.1+vmware.1/extensions/logging/fluent-bit
  3. tanzu-system-logging 名前空間と、Fluent Bit サービスのアカウントおよびロール オブジェクトを作成します。
    kubectl apply -f namespace-role.yaml
  4. Fluent Bit に使用するログの出力先を決定します。サポートされる出力は、Elasticsearch、HTTP、Kafka、Splunk、Syslog などです。詳細についてはhttps://docs.fluentbit.io/manual/pipeline/outputsを参照してください。
  5. いずれかの <LOG_BACKEND>/fluent-bit-data-values.example.yaml をコピーして、選択したログ出力先に Fluent Bit データ値ファイルを作成します。
    サポートされているログ出力先ごとに、サンプル データ値ファイルがあります。このサンプルでは、該当するログ出力先の最小構成を示します。
    cp elasticsearch/fluent-bit-data-values.yaml.example elasticsearch/fluent-bit-data-values.yaml
    cp http/fluent-bit-data-values.yaml.example http/fluent-bit-data-values.yaml
    cp kafka/fluent-bit-data-values.yaml.example kafka/fluent-bit-data-values.yaml
    cp splunk/fluent-bit-data-values.yaml.example splunk/fluent-bit-data-values.yaml
    cp syslog/fluent-bit-data-values.yaml.example syslog/fluent-bit-data-values.yaml
  6. <LOG_BACKEND>/fluent-bit-data-values.yaml にデータを入力して、Fluent Bit 拡張機能を構成します。フィールドとオプションの説明については、Fluent Bit 拡張機能の構成を参照してください。
    たとえば、Fluent Bit Syslog 構成には次の値が必要です。
    logging:
      image:
        repository: projects.registry.vmware.com/tkg # Public registry
    tkg:
      instance_name: "<TKG_INSTANCE_NAME>" #mandatory but arbitrary; appears in logs
      cluster_name: "<CLUSTER_NAME>" #name of the target tkgs cluster
    fluent_bit:
      output_plugin: "syslog"
      syslog:
        host: "<SYSLOG_HOST>"
        port: "<SYSLOG_PORT>"
        mode: "<SYSLOG_MODE>"
        format: "<SYSLOG_FORMAT>"
    Fluent Bit Syslog でポピュレートされるデータ値ファイルの構成は、次のようになります。
    logging:
      image:
        repository: projects.registry.vmware.com/tkg
    tkg:
      instance_name: "tkgs-cluster-1"
      cluster_name: "tkgs-cluster-1"
    fluent_bit:
      output_plugin: "syslog"
      syslog:
        host: "10.192.175.59"
        port: "514"
        mode: "tcp"
        format: "rfc5424"
  7. ログ出力先のデータ値を含む Fluent Bit シークレットを作成します。
    kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=elasticsearch/fluent-bit-data-values.yaml -n tanzu-system-logging
    kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=kafka/fluent-bit-data-values.yaml -n tanzu-system-logging
    kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=splunk/fluent-bit-data-values.yaml -n tanzu-system-logging
    kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=http/fluent-bit-data-values.yaml -n tanzu-system-logging
    kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=syslog/fluent-bit-data-values.yaml -n tanzu-system-logging
    secret/fluent-bit-data-valuestanzu-system-logging 名前空間に作成されます。次のコマンドを使用して確認します。
    kubectl get secrets -n tanzu-system-logging
  8. Fluent Bit アプリケーションをデプロイします。
    kubectl apply -f fluent-bit-extension.yaml

    成功すると、app.kappctrl.k14s.io/fluent-bit created が表示されます。

  9. Fluent Bit アプリケーションのステータスを確認します。
    kubectl get app fluent-bit -n tanzu-system-logging
    成功すると、ステータスが Reconciling から Reconcile succeeded に変更されます。ステータスが Reconcile failed の場合は、Fluent Bit のデプロイのトラブルシューティングを参照してください。
  10. アプリケーションの詳細なステータスを確認します。
    kubectl get app fluent-bit -n tanzu-system-logging -o yaml
  11. Fluent Bit デーモンセットを確認します。
    kubectl get daemonsets -n tanzu-system-logging
    成功すると、次の情報が表示されます。
    NAME         DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
    fluent-bit   6         6         6       6            6           <none>          105s

Fluent Bit のデプロイのトラブルシューティング

デプロイまたは調整が失敗した場合は、kubectl get pods -A を実行してポッドのステータスを確認します。fluent-bit ポッドは、Running である必要があります。ポッドのステータスが ImagePullBackOff または ImageCrashLoopBackOff の場合は、コンテナ イメージをプルできていません。データ値と拡張機能 YAML ファイルに記述されているリポジトリ URL を確認し、これらが正確であることを確認します。

コンテナ ログを確認します。 name-XXXX は、 kubectl get pods -A を実行すると表示される一意のポッド名です。
kubectl logs pod/fluent-bit-XXXXX -c fluent-bit -n tanzu-system-logging

Fluent Bit 拡張機能の更新

Tanzu Kubernetes クラスタにデプロイされている Fluent Bit 拡張機能を更新します。

  1. シークレットから Fluent Bit データ値を取得します。
    kubectl get secret fluent-bit-data-values -n tanzu-system-logging -o 'go-template={{ index .data "values.yaml" }}' | base64 -d > fluent-bit-data-values.yaml
    
  2. fluent-bit-data-values.yaml 内の Fluent Bit データ値を更新します。Fluent Bit 拡張機能の構成を参照してください。
  3. Fluent Bit データ値のシークレットを更新します。
    kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=fluent-bit-data-values.yaml -n tanzu-system-logging -o yaml --dry-run | kubectl replace -f-
    
    Fluent Bit 拡張機能が上記のデータ値で再調整されます。
    注: デフォルトでは、kapp-controller によってアプリケーションが 5 分ごとに同期されます。更新は 5 分以内に有効になります。更新をすぐに有効にするには、 fluent-bit-extension.yaml 内の syncPeriod の値を小さくし、 kubectl apply -f fluent-bit-extension.yaml を使用して Fluent Bit 拡張機能を適用します。
  4. 拡張機能のステータスを確認します。
    kubectl get app fluent-bit -n tanzu-system-logging
  5. 詳細なステータスを確認して、トラブルシューティングを行います。
    kubectl get app fluent-bit -n tanzu-system-logging -o yaml
  6. 必要に応じてトラブルシューティングを実行します。Fluent Bit のデプロイのトラブルシューティングを参照してください。

Fluent Bit 拡張機能の削除

Tanzu Kubernetes クラスタから Fluent Bit 拡張機能を削除します。
注: 手順を順番に実行します。Fluent Bit アプリケーションが完全に削除される前に、名前空間、サービス アカウント、ロール オブジェクトを削除しないでください。これを行うと、システム エラーが発生する可能性があります。
  1. Fluent Bit 拡張機能のあるディレクトリに移動します。
    cd extensions/logging/fluent-bit/
  2. Fluent Bit アプリケーションを削除します。
    kubectl delete app fluent-bit -n tanzu-system-logging

    予期される結果:app.kappctrl.k14s.io "fluent-bit" deleted

  3. Fluent Bit アプリケーションが削除されていることを確認します。
    kubectl get app fluent-bit -n tanzu-system-logging

    予期される結果:apps.kappctrl.k14s.io "fluent-bit" not found

  4. tanzu-system-logging 名前空間、Fluent Bit 拡張機能サービス アカウント、およびロール オブジェクトを削除します。
    kubectl delete -f namespace-role.yaml

Fluent Bit 拡張機能のアップグレード

既存の Fluent Bit 拡張機能がデプロイされている場合は、最新バージョンにアップグレードできます。
  1. Fluent Bit の構成マップをエクスポートします。
    kubectl get configmap fluent-bit -n tanzu-system-logging -o 'go-template={{ index .data "fluent-bit.yaml" }}' > fluent-bit-configmap.yaml
    
  2. 既存の Fluent Bit 環境を削除します。Fluent Bit 拡張機能の削除を参照してください。
  3. 最新の Fluent Bit 拡張機能をデプロイします。Fluent Bit 拡張機能のデプロイを参照してください。

Fluent Bit 拡張機能の構成

構成値は extensions/logging/fluent-bit/<LOG_BACKEND>/fluent-bit-data-values.yaml で設定されています。
表 1. Fluent Bit 拡張機能の構成
パラメータ 説明 タイプ デフォルト
logging.namespace Fluent Bit がデプロイされる名前空間 文字列 tanzu-system-logging
logging.service_account_name Fluent Bit サービス アカウントの名前 文字列 fluent-bit
logging.cluster_role_name fluent bit に get、watch、および list の権限を付与するクラスタ ロールの名前 文字列 fluent-bit-read
logging.image.name Fluent Bit イメージの名前 文字列 fluent-bit
logging.image.tag Fluent Bit イメージ タグ。バージョンをアップグレードしている場合は、この値の更新が必要になることがあります。 文字列 v1.6.9_vmware.1
logging.image.repository Fluent Bit イメージを含むリポジトリの場所。デフォルトは、パブリック VMware レジストリです。プライベート リポジトリを使用している場合は(エアギャップ環境など)、この値を変更します。 文字列 projects.registry.vmware.com/tkg
logging.image.pullPolicy Fluent bit イメージ プル ポリシー 文字列 IfNotPresent
logging.update_strategy DaemonSet の更新時に使用される更新方法 文字列 RollingUpdate
tkg.cluster_name Tanzu Kubernetes クラスタの名前 文字列 Null(必須パラメータ)
tkg.instance_name スーパーバイザー クラスタ、および 1 つのデプロイ内のすべての Tanzu Kubernetes クラスタで共有される TKG インスタンスのユーザー定義による名前。インストールに関連する任意の名前を使用できます。 文字列 Null(必須パラメータ)
注: このフィールドは必須ですが、任意に指定できます。ログに表示される名前です。
fluent_bit.log_level Fluent Bit に使用するログ レベル 文字列 info
fluent_bit.output_plugin Fluent-Bit が収集する情報をフラッシュするバックエンドを設定します 文字列 Null(必須パラメータ)
fluent_bit.elasticsearch.host ターゲット Elasticsearch インスタンスの IP アドレスまたはホスト名 文字列 Null(output_plugin が弾性検索の場合の必須パラメータ)
fluent_bit.elasticsearch.port ターゲット Elasticsearch インスタンスの TCP ポート 整数型 Null(output_plugin が弾性検索の場合の必須パラメータ)
fluent_bit.elasticsearch.buffer_size Elasticsearch サービスからの応答の読み取りに使用するバッファ サイズを指定します。False の場合は無制限に設定されます 文字列 False
fluent_bit.elasticsearch.tls Elasticsearch の TLS のデフォルト設定を指定します 文字列 オフ
fluent_bit.kafka.broker_service_name Kafka Broker の単一または複数リスト(例:192.168.1.3:9092) 文字列 Null(output_plugin が kafka の場合の必須パラメータ)
fluent_bit.kafka.topic_name Fluent Bit が Kafka へのメッセージ送信に使用する単一のエントリまたはトピックのカンマ区切りリスト 文字列 Null(output_plugin が kafka の場合の必須パラメータ)
fluent_bit.splunk.host ターゲット Splunk サーバの IP アドレスまたはホスト名 文字列 Null(output_plugin が splunk の場合の必須パラメータ)
fluent_bit.splunk.port ターゲット Splunk サーバの TCP ポート 整数型 Null(output_plugin が splunk の場合の必須パラメータ)
fluent_bit.splunk.token HTTP イベント コレクタ インターフェイスの認証トークンを指定します 文字列 Null(output_plugin が splunk の場合の必須パラメータ)
fluent_bit.http.host ターゲット HTTP サーバの IP アドレスまたはホスト名 文字列 Null(output_plugin が http の場合の必須パラメータ)
fluent_bit.http.port ターゲット HTTP サーバの TCP ポート 整数型 Null(output_plugin が http の場合の必須パラメータ)
fluent_bit.http.mode ターゲット Web サーバの HTTP URI を指定します 文字列 Null(output_plugin が http の場合の必須パラメータ)
fluent_bit.http.header_key_value HTTP ヘッダー キー/値ペア。複数のヘッダーを設定できます 文字列 Null(output_plugin が http の場合の必須パラメータ)
fluent_bit.http.format HTTP 要求本文で使用されるデータ形式を指定します 文字列 Null(output_plugin が http の場合の必須パラメータ)
fluent_bit.syslog.host リモート Syslog サーバのドメインまたは IP アドレス 文字列 Null(output_plugin が syslog の場合の必須パラメータ)
fluent_bit.syslog.port リモート Syslog サーバの TCP または UDP ポート 整数型 Null(output_plugin が syslog の場合の必須パラメータ)
fluent_bit.syslog.mode TCP、UDP、TLS からの転送タイプを指定します 文字列 Null(output_plugin が syslog の場合の必須パラメータ)
fluent_bit.syslog.format HTTP 要求本文で使用されるデータ形式を指定します 文字列 Null(output_plugin が syslog の場合の必須パラメータ)
host_path.volume_1 ホスト ノードのファイル システムからポッドへのディレクトリ パス(ボリューム 1 の場合) 文字列 /var/log
host_path.volume_2 ホスト ノードのファイル システムからポッドへのディレクトリ パス(ボリューム 2 の場合) 文字列 /var/lib/docker/containers
host_path.volume_3 ホスト ノードのファイル システムからポッドへのディレクトリ パス(ボリューム 3 の場合) 文字列 /run/log
systemd.path Systemd ジャーナル ディレクトリへのパス 文字列 /var/log/journal