仮想ノードでのアプリケーション・ログの表示

Container Engine for Kubernetes (OKE)を使用して作成したKubernetesクラスタ内の仮想ノードで実行されているアプリケーションのログを表示する方法を確認します。

Container Engine for Kubernetesを使用して仮想ノードを含むクラスタを作成した後、仮想ノードで実行されているアプリケーションのログにアクセスする2つのオプションがあります:

  • kubectl logsコマンドを使用して、アプリケーション・コンテナからstdoutおよびstderrログを表示します。
  • 表示のためにアプリケーション・ログを永続ログ・サーバーに送信します。

kubectl logsコマンドを使用したstdoutログとstderrログの表示

kubectl logsコマンドを使用して、アプリケーションのコンテナからstdoutログおよびstderrログを表示するには:
  1. まだ実行していない場合は、ステップに従って、クラスタのkubeconfig構成ファイルを設定し、(必要に応じて)そのファイルを指すようにKUBECONFIG環境変数を設定します。自分のkubeconfigファイルを設定する必要があります。別のユーザーが設定したkubeconfigファイルを使用してクラスタにアクセスすることはできません。クラスタ・アクセスの設定を参照してください。
  2. ターミナル・ウィンドウで、次のように入力してkubectl logsコマンドを実行します:
    kubectl logs <pod-name>

    例:

    kubectl logs nginx

    ポッドに複数のコンテナが含まれている場合は、ログを表示するコンテナを指定します。たとえば、myappポッドにnginxおよびloggingという2つのコンテナがあり、loggingコンテナのログを表示する場合は、次のように入力します。

    kubectl logs myapp logging

永続ログ・サーバーへのログの送信

仮想ノードで実行されているアプリケーションのログをOpenSearchなどのリモート・ログ・サーバーに送信し、そのサーバー上のログを表示できます。仮想ノードはKubernetesデーモンセットをサポートしていないため、ノード・レベルでロギング・エージェントを実行することはできません。かわりに、軽量ロギング・エージェントを各アプリケーションのポッドのサイドカーとして実行できます。Kubernetesポッドでサイドカーとして実行できるロギング・エージェント(Fluent Bitなど)を使用できます。

たとえば、アプリケーション・ログをリモートのOpenSearchログ・サーバーに送信するために、ポッド上でサイドカーとしてFluent Bitを実行するには:

  1. 使用するFluent Bit構成設定を指定して、クラスタごとまたはネームスペースごとにKubernetes ConfigMapを作成します。特に、リモート・ログ・サーバーのIPアドレス、ポート番号および認証パラメータを指定する必要があります。

    例:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: fluentbit-config
    data:
      fluent-bit.conf: |
        [SERVICE]
            flush        1
            daemon       Off
     
        [INPUT]
            Name              tail
            Path              /mnt/log/*
     
        [OUTPUT]
            name  opensearch
            match *
            host <ip-address>
            port <port-number>
            tls On
            HTTP_User <username>
            HTTP_Passwd <example-password>
            Index fluent-bit
            Suppress_Type_Name On

    ここでは:

    • host <ip-address>は、OpensearchサーバーのIPアドレスを指定します。
    • port <port-number>は、Opensearchサーバーのポートを指定します(デフォルトでは9200)。
    • HTTP_User <username>は、Opensearchサーバーのユーザー名を指定します。
    • HTTP_Passwd <example-password>は、Opensearchサーバーのパスワードを指定します。
  2. 各ポッドにFluent Bitサイドカーを追加します。アプリケーション・ログが永続ログの宛先に送信されるように、Fluent Bitサイドカーですべてのポッドを構成する必要があることに注意してください。
    1. 各ポッド仕様のvolumesセクションで、次を指定します:

      • 次のように、アプリケーション・ログが書き込まれるemptyDir。
        - name: logs
          emptyDir: {}
      • 次のように、前に作成したConfigMapへの参照。
        - name: fluentbit-config
          configMap:
            name: fluentbit-config
    2. 各ポッド仕様のcontainersセクションで、ロギング・コンテナを指定する必要があります。

      • fluent/fluent-bitイメージを使用します。
      • logs emptyDirおよびfluentbit-config ConfigMapをマウントします。

      例:

      - name: logging
        image: fluent/fluent-bit
        resources:
          requests:
            cpu: 100m
            memory: 50Mi
        volumeMounts:
        - name: logs
          mountPath: /mnt/log
        - name: fluentbit-config
          mountPath: /fluent-bit/etc 

    完全なポッド仕様の例を次に示します。

    apiVersion: v1
    kind: Pod
    metadata:
      name: date-logging
    spec:
      containers:
      - name: date
        image: busybox
        resources:
          requests:
            cpu: 500m
            memory: 200Mi
        command: ["sh", "-c"]
        args:
          - while [ 1 ]; do
            echo "Writing the date in /mnt/log/date.log";
            date >> /mnt/log/date.log;
            sleep 10;
            done
        volumeMounts:
        - name: logs
          mountPath: /mnt/log
      - name: logging
        image:
         resources:
          requests:
            cpu: 100m
            memory: 50Mi
        volumeMounts:
        - name: logs
          mountPath: /mnt/log
        - name: fluentbit-config
          mountPath: /fluent-bit/etc
      volumes:
      - name: logs
        emptyDir: {}
      - name: fluentbit-config
        configMap:
          name: fluentbit-config