7 ロギング
Oracle Cloud Infrastructure (OCI)または外部ツールを使用して、Oracle Blockchain Platform Enterprise Editionの永続ロギングを構成できます。
概要
Oracle Blockchain Platform Enterprise Editionは、ログが各ポッドにローカルに格納されるKubernetesに基づいています。ポッドの削除時にログが削除されないようにするには、ログが中央の場所に格納される永続ロギングを設定する必要があります。永続ロギングには2つの方法があります。FluentdやElastic Stackなどの外部ロギング・ツールを使用できます。または、Oracle Kubernetes Engineで実行している場合は、Oracle Cloud Infrastructure (OCI)でサポートされている一元化されたロギング・ソリューションを使用できます。
OCIによる永続ロギング
OCIを使用してログを一元的に格納するには、ログ・グループを定義し、ログを解析するようにエージェントを構成します。ログは、オブジェクト・ストレージ・サービスに格納されます。OCIで永続ロギングを構成する前に、デプロイメントは次の要件を満たす必要があります。- Kubernetesコンパートメント内の動的グループ。動的グループを作成するには、ナビゲーション・メニューで「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「ドメイン」、「動的グループの作成」の順にクリックします。「一致ルール」セクションで、コンパートメントにOracle Cloud IDを置き換えて、動的グループに次のものを追加します。
たとえば次のようにします。instance.compartment.id = '<compartment_ocid>'
instance.compartment.id = 'ocid1.compartment.oc1..aaaaaaaa4ws3242343243244nyb423432rwqsxigt2sia'
- 動的グループがロギング・サービスと対話できるようにするポリシー。ポリシーを作成するには、ナビゲーション・メニューで「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「ポリシー」、「ポリシーの作成」の順にクリックします。
たとえば次のようにします。Allow dynamic-group <my-group> to use log-content in compartment <target_compartment_name>
Allow dynamic-group okelogging to use log-content in compartment BlockchainTeam
- 左上隅のメニュー・アイコンをクリックし、「ログ」を検索して「ログ」を選択します。
- ログ・グループを作成します。「ロギング」で、「ログ・グループ」、「ログ・グループの作成」の順に選択します。
- カスタム・ログを作成します。「ロギング」で、「ログ」を選択し、「カスタム・ログの作成」をクリックして「カスタム・ログの作成」ウィザードを開きます。以前に作成したログ・グループを選択します。
- カスタム・ログの作成ウィザードの2番目のページで、Kubernetesコンパートメントと動的グループを指定して、カスタム・ログのエージェント構成を作成します。
- 「エージェント構成」ページの「ログ入力の構成」セクションで、アプリケーション・コンテナのデフォルトである次のファイル・パスを使用するようにエージェントのログ入力を構成します。「入力タイプ」リストから「ログ・パス」を選択します。「ファイル・パス」に次のファイル・パスを入力します。このパスには、システム・コンテナおよびサービス・コンテナを含むすべてのコンテナ・ログが含まれます。
/var/log/pods/*/*/*.log
- ログが取り込まれるまで待ちます。通常、ログは3~5分で取り込まれます。
- 「ログ」を選択し、カスタム・ログに移動して「ログの探索」をクリックします。ログを分析、解析およびフィルタできます。
- OCIを使用して、ログをObject Storageサービスに格納することもできます。
- コネクタの作成「ロギング」で、「コネクタ」を選択し、「コネクタの作成」をクリックします。「ソース」として「ロギング」を選択し、「ターゲット」として「オブジェクト・ストレージ」を選択します。
- 必要に応じて、ソースおよびターゲットを構成します。
- 「ログの有効化」セクションで、作成したコネクタの「ログの有効化」を「有効」に設定します。「ログの作成」パネルが表示され、ログ保持時間のデフォルト値が表示されます。
- ログが取り込まれるまで待ちます。通常、ログは3~5分で取り込まれます。その後、コネクタ・ログで読取りおよび書込み操作を確認できます。ログはオブジェクト・ストレージ・サービスに書き込まれています。
詳細は、OCI Logging Analyticsを使用したKubernetesおよびOKEクラスタのモニターを参照してください。
外部ツールを使用した永続ロギング
fluentd
というKubernetesネームスペースを作成します。- 次のコマンドを使用して、ロールベースのアクセス制御リソースを作成します。
コマンドで次のkubectl create -f fluentd-rbac.yaml -n fluentd
fluentd-rbac.yaml
ファイルを使用します。apiVersion: v1 kind: ServiceAccount metadata: name: fluentd namespace: fluentd --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: fluentd namespace: fluentd rules: - apiGroups: - "" resources: - pods - namespaces verbs: - get - list - watch --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: fluentd roleRef: kind: ClusterRole name: fluentd apiGroup: rbac.authorization.k8s.io subjects: - kind: ServiceAccount name: fluentd namespace: fluentd
- 次のコマンドを使用して、FluentdまたはElastic Stackの
ConfigMap
オブジェクトを作成します。
コマンドで次のkubectl create -f fluentd-configmap_removefilter_ascii.yaml -n fluentd
fluentd-configmap_removefilter_ascii.yaml
ファイルを使用します。次のファイルで、数字記号(#)を削除して、次の行の1つのみをコメント解除します。/tmp/obp.log
パスのファイルに書き込む場合は、@include file-fluent.conf
のコメントを解除します。- Elasticsearchに書き込む場合は、
@include elastic-fluent.conf
のコメントを解除します。
/tmp/obp.log
パスへの書込みの例を示しています。apiVersion: v1 kind: ConfigMap metadata: name: fluentd-config namespace: fluentd data: fluent.conf: |- ################################################################ # This source gets all logs from local docker host #@include pods-kind-fluent.conf #@include pods-fluent.conf @include pods-nofilter.conf @include file-fluent.conf #@include elastic-fluent.conf pods-nofilter.conf: |- <source> @type tail path /var/log/containers/*.log format //^(?<time>.+) (?<stream>stdout|stderr) (?<logtag>.)? (?<log>.*)$/ / pos_file /var/log/fluentd-containers.log.pos tag kubernetes.* read_from_head true </source> <filter kubernetes.**> @type kubernetes_metadata </filter> file-fluent.conf: |- <match kubernetes.var.log.containers.**fluentd**.log> @type null </match> <match kubernetes.var.log.containers.**kube-system**.log> @type null </match> <match kubernetes.**> @type file path /tmp/obp.log </match> elastic-fluent.conf: |- <match kubernetes.var.log.containers.**fluentd**.log> @type null </match> <match kubernetes.var.log.containers.**kube-system**.log> @type null </match> <match kubernetes.**> @type elasticsearch host "#{ENV['FLUENT_ELASTICSEARCH_HOST'] || 'elasticsearch.elastic-kibana'}" port "#{ENV['FLUENT_ELASTICSEARCH_PORT'] || '9200'}" index_name fluentd-k8s-3 type_name fluentd include_timestamp true </match>
- 次のコマンドを使用して、Fluentdの
DaemonSet
オブジェクトを作成します。このコマンドは、各ノードにFluentdポッドを作成します。
次のkubectl create -f fluentd.yaml -n fluentd
fluentd.yaml
ファイルをコマンドとともに使用します。
Oracle Blockchain Platformログは、FluentdポッドまたはKubernetesノードのapiVersion: apps/v1 kind: DaemonSet metadata: name: fluentd namespace: fluentd labels: k8s-app: fluentd-logging version: v1 spec: selector: matchLabels: k8s-app: fluentd-logging version: v1 template: metadata: labels: k8s-app: fluentd-logging version: v1 spec: serviceAccount: fluentd serviceAccountName: fluentd tolerations: - key: node-role.kubernetes.io/master effect: NoSchedule - key: node-role.kubernetes.io/control-plane effect: NoSchedule containers: - name: fluentd1 imagePullPolicy: "Always" image: fluent/fluentd-kubernetes-daemonset:v1.16.2-debian-elasticsearch7-1.1 env: - name: FLUENT_ELASTICSEARCH_HOST value: "elasticsearch.elastic-kibana" - name: FLUENT_ELASTICSEARCH_PORT value: "9200" resources: limits: memory: 200Mi requests: cpu: 100m memory: 200Mi volumeMounts: - name: fluentd-config mountPath: /fluentd/etc - name: logs mountPath: /tmp - name: varlog mountPath: /var/log - name: varlibdockercontainers mountPath: /var/lib/docker/containers readOnly: true terminationGracePeriodSeconds: 30 volumes: - name: fluentd-config configMap: name: fluentd-config - name: varlog hostPath: path: /var/log - name: varlibdockercontainers hostPath: path: /var/lib/docker/containers - name: logs hostPath: path: /tmp
/tmp
ディレクトリにあります。 - Elastic Stackにログを送信するには、
elastic-kibana
というKubernetesネームスペースを作成します。 - 次のコマンドを使用して、Elastic Stackのデプロイメントを作成し、それをサービスとして公開します。
次のkubectl create -f elastic.yaml -n elastic-kibana
elastic.yaml
ファイルをコマンドとともに使用します。apiVersion: v1 kind: Namespace metadata: name: elastic-kibana --- apiVersion: apps/v1 kind: Deployment metadata: name: elasticsearch namespace: elastic-kibana labels: app: elasticsearch spec: selector: matchLabels: app: elasticsearch replicas: 1 template: metadata: labels: app: elasticsearch spec: initContainers: - name: vm-max-fix image: busybox command: ["sysctl", "-w", "vm.max_map_count=262144"] securityContext: privileged: true containers: - name: elasticsearch image: elasticsearch:7.9.1 imagePullPolicy: IfNotPresent ports: - containerPort: 9200 env: - name: node.name value: "elasticsearch" - name: cluster.initial_master_nodes value: "elasticsearch" - name: bootstrap.memory_lock value: "false" - name: ES_JAVA_OPTS value: "-Xms512m -Xmx512m" --- apiVersion: v1 kind: Service metadata: name: elasticsearch namespace: elastic-kibana labels: app: elasticsearch spec: type: ClusterIP selector: app: elasticsearch ports: - protocol: TCP name: http port: 9200 targetPort: 9200
- その後、次のコマンドを使用して、Elasticsearch索引のログ・データを調べることができます。
curl -X GET "localhost:9200/_cat/indices/fluentd-k8s-*?v=true&s=index&pretty" curl -X GET "localhost:9200/fluentd-k8s-3/_search?pretty=true"
- Fluentdを使用して、各ノードのローカル・ブロック・ボリュームにログを格納することもできます。
- ノードごとにブロック・ボリュームを作成し、ボリュームをアタッチして、
/u01
というディレクトリを作成します。 - ext4ファイル・システムのアタッチされたブロック・ボリュームをフォーマットします。
- デバイス・パスに
/u01
ディレクトリをマウントします。 - 次のスニペットに示すように、ログ・ボリュームが
/tmp
ではなく/u01
になるように、Fluentdデプロイメント・ファイル(fluentd.yaml
)を変更します。- name: logs hostPath: path: /u01
- 次のコマンドを実行して、Fluentdデプロイメントを適用します。
kubectl apply -f fluentd.yaml -n fluentd
- これで、ログは各ノードの/u01ディレクトリに表示されます。
- ノードごとにブロック・ボリュームを作成し、ボリュームをアタッチして、
オペレータ・ポッドのログ・レベルの設定
hlf-operator
およびobp-operator
ポッドのログ・レベルを設定できます。ログ・レベルを設定するステップは、Oracle Blockchain Platformがインストールされているかどうかによって異なります。Oracle Blockchain Platform Enterprise Editionがまだインストールされていない場合は、次のステップを実行します。
- 対応する
deployment.yaml
ファイルを編集用に開きます。hlf-operator
ポッドのファイルは、次の場所にあります。distribution_package_location/distribution-package/operators/helmcharts/hlf-operator/templates/deployment.yaml
obp-operator
ポッドのファイルは、次の場所にあります。distribution_package_location/distribution-package/operators/helmcharts/obp-operator/templates/deployment.yaml
- ファイルに次の行を追加します。コメントに示すように、ログ・レベルを
debug
、info
またはerror
に設定できます。次の例では、ログ・レベルがinfo
に設定されます。--zap-log-level=info # debug, info, error
containers:
- args:
- --enable-leader-election
- --zap-log-level=info # debug, info, error
Oracle Blockchain Platformがすでにインストールされている場合は、次のステップを実行します。
- 次のコマンドを使用して、
hlf-operator
およびobp-operator
ポッドのデプロイメント定義を編集します。ポッド・テンプレート仕様で、manager
コンテナのログ・レベルを構成する引数を追加または更新します。kubectl edit deployment -n obp-cp obp-operator kubectl edit deployment -n obp-cp hlf-operator-controller-manager
containers:
- args:
- --enable-leader-election
- --zap-log-level=info # debug, info, error