コンテンツへスキップ

ロギング

Kubernetesログを中央ディレクトリに収集するには、ログプロセッサおよびフォワーダーであるFluent Bitを使用できます。これはKnativeの実行には必須ではありませんが、自動的にPodと関連ログを削除するKnative Servingで役立ちます。

Fluent Bitは、多数の他のログプロバイダーへのエクスポートをサポートしています。すでにSplunk、Datadog、ElasticSearch、またはStackdriverなどの既存のログプロバイダーがある場合は、FluentBitドキュメントに従ってログフォワーダーを構成できます。

ロギングコンポーネントの設定

ログ収集の設定には2つの手順が必要です。

  1. 各ノードでログ転送DaemonSetを実行します。
  2. クラスター内のどこかでコレクターを実行します。

ヒント

次の例では、Kubernetes PersistentVolumeClaimにログを保存するStatefulSetを使用していますが、HostPathを使用することもできます。

コレクターの設定

fluent-bit-collector.yamlファイルは、StatefulSetと、クラスター内からのログへのアクセスと読み取りを可能にするKubernetes Serviceを定義します。提供された構成は、loggingという名前空間に監視構成を作成します。

重要

フォワーダーの前にコレクターを設定してください。フォワーダーを構成するときにコレクターのアドレスが必要になり、フォワーダーはコレクターの準備が整うまでログをキューに入れる可能性があります。

System diagram: forwarders and co-located collector and nginx

手順

  1. 次のコマンドを入力して構成を適用します。

    kubectl apply -f https://github.com/knative/docs/raw/main/docs/serving/observability/logging/fluent-bit-collector.yaml
    
    デフォルトの構成では、ログは次のように分類されます。

    • Knativeサービス、またはapp=Knativeラベルが付いたPod。
    • 非Knativeアプリ。

    ログはデフォルトでPod名でロギングされます。これは、インストール前またはインストール後にlog-collector-config ConfigMapを更新することで変更できます。

    警告

    ConfigMapを更新したら、Fluent Bitを再起動する必要があります。これは、Podを削除してStatefulSetに再作成させることで実行できます。

  2. Webブラウザーからログにアクセスするには、次のコマンドを入力します。

    kubectl port-forward --namespace logging service/log-collector 8080:80
    
  3. http://localhost:8080/に移動します。

  4. オプション:nginx Podでシェルを開き、次のコマンドを入力してUnixツールを使用してログを検索できます。

    kubectl exec --namespace logging --stdin --tty --container nginx log-collector-0
    

フォワーダーの設定

デフォルトでログをElasticSearchに転送するFluent Bit DaemonSetの設定については、Fluent Bitドキュメントを参照してください。

インストール手順中にConfigMapを作成する場合は、次のいずれかを行う必要があります。

  • ElasticSearch構成をfluent-bit-configmap.yamlに置き換えるか、
  • 次のブロックをConfigMapに追加し、@INCLUDE output-elasticsearch.conf@INCLUDE output-forward.confに更新します。

    output-forward.conf: |
      [OUTPUT]
          Name            forward
          Host            log-collector.logging
          Port            24224
          Require_ack_response  True
    

ローカルコレクターの設定

警告

この手順では、開発環境の設定について説明しており、実稼働環境での使用には適していません。

開発にローカルKubernetesクラスターを使用している場合は、デスクトップオペレーティングシステムにログを保存するためのhostPath PersistentVolumeを作成できます。これにより、Kubernetes固有のツールを必要とせずに、通常のデスクトップツールをファイルに使用できます。

PersistentVolumeClaimは次のようになります。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: shared-logs
  labels:
    app: logs-collector
spec:
  accessModes:
    - "ReadWriteOnce"
  storageClassName: manual
  claimRef:
    apiVersion: v1
    kind: PersistentVolumeClaim
    name: logs-log-collector-0
    namespace: logging
  capacity:
    storage: 5Gi
  hostPath:
    path: <see below>

hostPathは、Kubernetesソフトウェアとホストオペレーティングシステムによって異なります。

次の例に示すように、StatefulSetのvolumeClaimTemplatesを更新して、shared-logsボリュームを参照する必要があります。

volumeClaimTemplates:
  metadata:
    name: logs
  spec:
    accessModes: ["ReadWriteOnce"]
    volumeName: shared-logs

Kind

クラスターを作成するときは、次の例に示すように、kind-config.yamlを使用し、各ノードにextraMountsを指定する必要があります。

apiversion: kind.x-k8s.io/v1alpha4
kind: Cluster
nodes:
  - role: control-plane
    extraMounts:
      - hostPath: ./logs
        containerPath: /shared/logs
  - role: worker
    extraMounts:
      - hostPath: ./logs
        containerPath: /shared/logs

次に、PersistentVolumeのspec.hostPath.pathとして/shared/logsを使用できます。ディレクトリパス./logsは、Kindクラスターが作成されたディレクトリからの相対パスであることに注意してください。

Docker Desktop

Docker Desktopは、ホストオペレーティングシステムとゲストオペレーティングシステムの間でいくつかの共有マウントを自動的に作成するため、ホームディレクトリへのパスのみを知っておく必要があります。以下は、異なるオペレーティングシステムの例です。

ホストOS hostPath
Mac OS /Users/${USER}
Windows /run/desktop/mnt/host/c/Users/${USER}/
Linux /home/${USER}

Minikube

Minikubeでは、Kubernetesを実行している仮想マシン(VM)にディレクトリをマウントするために明示的なコマンドが必要です。

次のコマンドは、現在のディレクトリ内のlogsディレクトリをVM内の/mnt/logsにマウントします。

minikube mount ./logs:/mnt/logs

また、PersistentVolumeのhostPath.pathとして/mnt/logsを参照する必要があります。

私たちは、サイトのトラフィックを理解するために分析とCookieを使用しています。サイトの利用に関する情報は、その目的のためにGoogleと共有されます。詳細はこちら。