Hitachi

Hitachi Microservices Platform - Paxos Commit Transaction Orchestrator ユーザーズガイド


2.2.16 ロギングライブラリの設定ファイルのカスタマイズ

アプリケーションでロギングライブラリLogbackを使用する場合、その設定はlogback-spring.xmlに定義します。このファイルを記載する場合、HMP-PCTOのメッセージログ機能に関するカスタマイズが必要です。詳細については、「(4) メッセージログ機能が参照するファイル」を参照してください。

次にカスタマイズ例を示します。

〈この項の構成〉

(1) メッセージログをファイルに出力するためのカスタマイズ例

メッセージログをファイルに出力するためのカスタマイズ例および出力手順を次に示します。

(a) logback-spring.xmlの作成

メッセージログをファイルとして出力する場合、logback-spring.xmlとして次の設定で定義を作成する必要があります。設定の詳細や変更方法については、Logbackの公式ドキュメントを参照してください。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE logback>
<configuration>
<conversionRule conversionWord="hostname" class="jp.co.Hitachi.soft.hmppcto.common.log.HostNameConverter"/>
 
<!-- rootロガー用 変更可 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <target>System.out</target>
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %hostname %thread %class{1} ${PID:- } %msg%n</pattern>
        <charset>UTF-8</charset>
    </encoder>
</appender>
 
<!-- ファイル出力 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>/deployments/logs/${HMPPCTO_POD_NAMESPACE}_${HMPPCTO_POD_NAME}.%d{yyyyMMdd}.log</fileNamePattern>
        <maxHistory>30</maxHistory>
    </rollingPolicy>
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %hostname %thread %class{1} ${PID:- } %msg%n</pattern>
        <charset>UTF-8</charset>
    </encoder>
</appender>
 
<!-- ロガー名PCTO用 の設定-->
<include resource="hmppcto-include.xml"/>
<logger name="HMPPCTO_STDOUT" level="INFO" additivity="false">
    <appender-ref ref="HMPPCTO_STDOUT" />
    <appender-ref ref="FILE" />
</logger>
<logger name="HMPPCTO_STDERR" level="ERROR" additivity="false">
    <appender-ref ref="HMPPCTO_STDERR" />
    <appender-ref ref="FILE" />
</logger>
 
<!-- rootロガー -->
<root level="INFO">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="FILE" />
</root>
</configuration>

この設定によって、HMP-PCTOのメッセージログおよびLogbackを使用したアプリケーションのメッセージがコンテナ内の/deployments/logs配下にログファイル「<namespace名>_<Pod名>.yyyymmdd.log」として出力されます。また、日単位でログファイルがローテーションされ、現在日から最大で過去30日分のバックアップファイル「<namespace名>_<Pod名>.yyyymmdd.log」が作成されます。作成されるログファイルの例を次示します。

[図データ]

重要
  • この設定をした場合、必ずLogbackを使用してログを出力してください。Logbackを使用しないでログを出力した場合、ログファイルに保存されません。(例:java.lang.Throwable.printStackTrace()による例外情報およびスタックトレースの出力)

  • ログファイルはログの出力された時刻を判定し、カレントファイルの作成およびファイルのローテーションを実施します。そのため、日単位でログの出力がない場合、該当日のファイルは作成されず、ファイルのローテーションは実施されません。そのため、バックアップファイルの日付が連続していない場合があります。

(b) logback-spring.xmlの配置

作成したlogback-spring.xmlをHMP-PCTOの各Kubernetesアプリケーションのリソースディレクトリ「src/main/resources」の直下に格納してください。Mediatorについては、「Mediator用Javaプロジェクトディレクトリ」(java-projects/mediator)配下にリソースディレクトリ「src/main/resources」を作成し、logback-spring.xmlを格納してください。

また、Hitachi Microservices Platform - Bridge Option for OpenTP1を使用している場合は、「TP1-Bridge用Javaプロジェクトディレクトリ」(java-projects/tp1-bridge)配下にリソースディレクトリ「src/main/resources」を作成し、logback-spring.xmlを格納してください。

(c) メッセージログのファイル出力用永続ボリュームおよび永続ボリューム要求のKubernetesマニフェストの作成

<永続ボリュームの作成要領>

  • 各永続ボリュームの名称(.metadata.nameフィールド)に、ユーザ任意の名称を指定してください。

  • 各永続ボリュームの.spec.capacity.storageフィールドに、以下に示す値以上のサイズを指定してください。

    指定サイズ=「(a)×(b)×(c)」以上のサイズ
    (a)ログファイル1つ当たりのファイルサイズ
    (b)ログファイルの世代数(TimeBasedRollingPolicyのmaxHistoryプロパティ設定値+1)
    (c)メッセージログをNFSサーバに出力するPod数
    (d)エラーなどでメッセージログが継続して出力される場合を想定した安全率(200%)
  • 例として、(a)が「10Mi」の場合、「10Mi×31×10×200%」=「6200Mi」以上となるため、.spec.capacity.storageフィールドには「7Gi」(7ギビバイト)を指定します。この計算式による値は目安としていただき、実際に必要とするサイズについては、実測するようお願いします。

  • 各永続ボリュームの.spec.accessModesフィールドに、「ReadWriteMany」を指定してください。各Podが、どのノードからでも永続ボリュームにメッセージログをログファイルに出力できるようになります。

  • 永続ボリュームの種類がNFSストレージの場合は、永続ボリュームの.spec.nfsフィールドに、NFSのサーバアドレスとディレクトリパスを指定してください。

  • 永続ボリュームの.persistentVolumeReclaimPolicyフィールドに、「Retain」を指定してください。

<永続ボリューム要求の作成要領>

  • 各永続ボリューム要求の名称(.metadata.nameフィールド)に、ユーザ任意の名称を指定してください。

  • 各永続ボリューム要求のNamespace(.metadata.namespaceフィールド)に、Podで使用しているNamespace名を指定してください。

  • 各永続ボリューム要求の.spec.accessModesフィールドに、「ReadWriteMany」を指定してください。

  • 各永続ボリューム要求の.spec.resources.requests.storageフィールドに、前述の永続ボリュームで指定したサイズを指定してください。

<永続ボリュームおよび永続ボリューム要求の記述例>

メッセージログのファイル出力用永続ボリュームおよび永続ボリューム要求のKubernetesマニフェストの記述例を次に示します。

  • 永続ボリュームをNFSストレージとする場合

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-pod-logs
      namespace: my-namespace
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 7Gi
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-pod-logs
      namespace: my-namespace
    spec:
      capacity:
        storage: 7Gi
      accessModes:
        - ReadWriteMany
      nfs:
        server: nfs-server.example.com
        path: /nfs/logs
      persistentVolumeReclaimPolicy: Retain

(d) メッセージログのファイル出力用永続ボリュームおよび永続ボリューム要求のデプロイ

メッセージログのファイル出力用永続ボリュームおよび永続ボリューム要求のKubernetesマニフェストをデプロイしてください。

コマンド例を次に示します。

kubectl apply -f ./ pod-logs-volume.yaml

この例では、Kubernetesマニフェストのファイル名を「pod-logs-volume.yaml」としています。

<コマンドの実行結果の例>

persistentvolume/pv-pod-logs created

上記のように各Kubernetesオブジェクトの作成に成功した旨のメッセージが出力されていることを確認してください。

メッセージログのファイル出力用永続ボリュームをデプロイしたあと、次のコマンド例のように、永続ボリュームのデプロイが期待どおり成功していること(STATUS列が"Available"になっていること)を確認してください。

kubectl get pv

<コマンドの実行結果の例>

[図データ]

上記の例では、メッセージログのファイル出力用永続ボリュームだけを記載しています。実行環境によっては、そのほかに存在する永続ボリュームも一覧に表示されます。

なお、各列に表示される値は実行環境によって異なります。また、kubectlのdescribeサブコマンドを使用すると、各Kubernetesオブジェクトのさらに詳細な情報を参照できます。

(e) HMP-PCTOのKubernetesマニフェストのカスタマイズ

HMP-PCTOの各Kubernetesマニフェストに次の内容を追加してください。

  • メッセージログのファイル出力用永続ボリュームおよび永続ボリューム要求の設定

    次の設定によって、メッセージログのファイル出力用永続ボリュームが/deployments/logsとしてマウントされます。

    • ベースディレクトリとして/deployments/logsをマウントするため、.spec.template.spec.containers.volumeMountsに次の値を設定してください。

              - name: nfs-logs-volume
                mountPath: /deployments/logs
    • 永続ボリュームを/deployments/logsとしてマウントするため、.spec.template.spec.volumesに次の値を設定してください。

            - name: nfs-logs-volume
              persistentVolumeClaim:
                claimName: pvc-pod-logs
  • メッセージログのファイル名に使用する環境変数の設定

    logback-spring.xmlファイルでメッセージログのファイル名に使用する環境変数「HMPPCTO_POD_NAMESPACE」および「HMPPCTO_POD_NAME」を設定します。

    • Podが動作しているネームスペースを環境変数として設定するため、.spec.template.spec.containers.envに次の値を設定してください。

              - name: HMPPCTO_POD_NAMESPACE
                valueFrom:
                  fieldRef:
                    fieldPath: metadata.namespace
    • Pod名称を環境変数として設定するために.spec.template.spec.containers.envに次の値を設定してください。

              - name: HMPPCTO_POD_NAME
                valueFrom:
                  fieldRef:
                    fieldPath: metadata.name

(f) HMP-PCTOのHelmチャートの修正

MediatorのHelmチャートへメッセージログのファイル出力用永続ボリュームおよびストレージクラスの設定および、メッセージログのファイル名に使用する環境変数の設定する際の手順を記載します。また、Hitachi Microservices Platform - Bridge Option for OpenTP1を使用している場合は、TP1-BridgeのHelmチャートを同様に修正してください。

  1. Helmチャートの展開

    作業ディレクトリで次のコマンドを実行し、tgzファイルからHelmチャートを展開します。

    tar -xzf mediator-<V.R.S>tgz
    注※

    V.R.Sは使用するHMP-PCTOのバージョンに合わせて読み替えてください。

  2. statefulset.yamlファイルの修正

    Helmチャートは以下の構成で展開されます。templatesフォルダ内のstatefulset.yamlファイルを開きます。

    ファイル/ディレクトリ構成

    <作業ディレクトリ>/

    mediator

    .helmignore

    Chart.yaml

    values.schema.json

    values.yaml

    templates

    includes

    mediator-config-map.yaml

    service.yaml

    serviceaccount.yaml

    statefulset.yaml

    ucars-config-map.yaml

  3. メッセージログのファイル出力用永続ボリュームおよびストレージクラスの設定

    statefulset.yamlファイルに次の設定を追加します。これによって、メッセージログのファイル出力用永続ボリュームが/deployments/logsとしてマウントされます。

    • ベースディレクトリとして/deployments/logsをマウントするため、.spec.template.spec.containers.volumeMountsに次の値を設定してください。

              - name: nfs-logs-volume
                mountPath: /deployments/logs
    • 永続ボリュームを/deployments/logsとしてマウントするため、.spec.template.spec.volumesに次の値を設定してください。

            - name: nfs-logs-volume
              persistentVolumeClaim:
                claimName: pvc-pod-logs
  4. メッセージログのファイル名に使用する環境変数の設定

    statefulset.yamlファイルに以下の設定を追加します。これによってlogback-spring.xmlファイルで、メッセージログのファイル名に使用する環境変数「HMPPCTO_POD_NAMESPACE」および「HMPPCTO_POD_NAME」を設定します。

    • Podが動作しているネームスペースを環境変数として設定するため、.spec.template.spec.containers.envに次の値を設定してください。

              - name: HMPPCTO_POD_NAMESPACE
                valueFrom:
                  fieldRef:
                    fieldPath: metadata.namespace
    • Pod名称を環境変数として設定するために.spec.template.spec.containers.envに次の値を設定してください。

              - name: HMPPCTO_POD_NAME
                valueFrom:
                  fieldRef:
                    fieldPath: metadata.name
  5. パッケージの再作成

    statefulset.yamlファイルの修正が完了したら、作業ディレクトリへ移動します。次のコマンドを実行し、修正したHelmチャートを再度パッケージ化します。作成されたHelmチャートを使用してMediatorをデプロイしてください。

    helm package ./mediator