7 로깅
Oracle Cloud Infrastructure(OCI) 또는 외부 도구를 사용하여 Oracle Blockchain Platform Enterprise Edition에 대한 영구 로깅을 구성할 수 있습니다.
개요
Oracle Blockchain Platform Enterprise Edition은 로그가 각 포드에 로컬로 저장되는 Kubernetes를 기반으로 합니다. Pod가 삭제될 때 로그가 삭제되지 않도록 하려면 로그가 중앙 위치에 저장되는 영구 로깅을 설정해야 합니다. 지속 로깅에는 두 가지 방법을 사용할 수 있습니다. Fluentd 및 Elastic Stack과 같은 외부 로깅 도구를 사용할 수 있습니다. 또는 Oracle Kubernetes Engine에서 실행 중인 경우 OCI(Oracle Cloud Infrastructure)에서 지원하는 중앙 집중식 로깅 솔루션을 사용할 수 있습니다.
OCI를 사용한 영구 로깅
OCI를 사용하여 로그를 중앙에 저장하려면 로그 그룹을 정의하고 로그를 구문 분석하도록 에이전트를 구성합니다. 로그는 오브젝트 스토리지 서비스에 저장됩니다. OCI로 영구 로깅을 구성하기 전에 배치가 다음 요구사항을 충족해야 합니다.- Kubernetes 컴파트먼트의 동적 그룹입니다. 동적 그룹을 생성하려면 탐색 메뉴에서 ID 및 보안을 누릅니다. ID에서 도메인, 동적 그룹 생성 순으로 누릅니다. 컴파트먼트에 대해 Oracle Cloud ID를 대체하여 일치 규칙 섹션에서 동적 그룹에 다음을 추가합니다.
예:instance.compartment.id = '<compartment_ocid>'
instance.compartment.id = 'ocid1.compartment.oc1..aaaaaaaa4ws3242343243244nyb423432rwqsxigt2sia'
- 동적 그룹이 로깅 서비스와 상호 작용할 수 있도록 허용하는 정책입니다. 정책을 생성하려면 탐색 메뉴에서 ID 및 보안을 누릅니다. ID에서 정책, 정책 생성 순으로 누릅니다.
예: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
- 왼쪽 위에 있는 메뉴 아이콘을 누르고 log를 검색한 다음 Logs를 선택합니다.
- 로그 그룹 생성. 로깅에서 로그 그룹을 선택한 다음 로그 그룹 생성을 누릅니다.
- 사용자정의 로그를 생성합니다. 로깅에서 로그를 선택한 다음 사용자정의 로그 생성을 눌러 사용자정의 로그 생성 마법사를 엽니다. 이전에 생성한 로그 그룹을 선택합니다.
- 사용자정의 로그 생성 마법사의 두번째 페이지에서 Kubernetes 컴파트먼트 및 동적 그룹을 지정하여 사용자정의 로그에 대한 에이전트 구성을 생성합니다.
- 에이전트 구성 페이지의 로그 입력 구성 섹션에서 애플리케이션 컨테이너의 기본값인 다음 파일 경로를 사용하도록 에이전트에 대한 로그 입력을 구성합니다. 입력 유형 목록에서 로그 경로를 선택합니다. 파일 경로에 대해 다음 파일 경로를 입력합니다. 이 경로에는 시스템 및 서비스 컨테이너를 포함한 모든 컨테이너 로그가 포함됩니다.
/var/log/pods/*/*/*.log
- 로그가 수집될 때까지 기다립니다. 일반적으로 로그는 3-5분 내에 수집됩니다.
- 로그를 선택한 다음 사용자정의 로그로 이동하고 로그 탐색을 누릅니다. 로그를 분석, 구문 분석 및 필터링할 수 있습니다.
- OCI를 사용하여 오브젝트 스토리지 서비스에 로그를 저장할 수도 있습니다.
- 커넥터 생성. 로깅에서 커넥터를 선택한 다음 커넥터 생성을 누릅니다. 소스로 로깅을 선택하고 오브젝트 스토리지를 대상으로 선택합니다.
- 필요에 따라 소스 및 대상을 구성합니다.
- 로그 사용 섹션에서 생성한 커넥터에 대해 로그 사용을 사용으로 설정합니다. Create Log 패널이 로그 보존 시간에 대한 기본값과 함께 표시됩니다.
- 로그가 수집될 때까지 기다립니다. 일반적으로 로그는 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
파일을 명령과 함께 사용합니다.다음 파일에서 숫자 기호(#)를 제거하여 다음 행 중 하나만 주석 처리 해제합니다./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 Pod 또는 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 디렉토리에 표시됩니다.
- 각 노드에 대한 블록 볼륨을 만들고, 볼륨을 연결하고,
운영자 Pod에 대한 로그 레벨 설정
hlf-operator
및 obp-operator
포드의 로그 레벨을 설정할 수 있습니다. 로그 레벨 설정 단계는 Oracle Blockchain Platform 설치 여부에 따라 다릅니다. Oracle Blockchain Platform Enterprise Edition이 아직 설치되지 않은 경우 다음 단계를 완료합니다.
- 편집을 위해 해당
deployment.yaml
파일을 엽니다.hlf-operator
Pod에 대한 파일은 다음 위치에 있습니다.distribution_package_location/distribution-package/operators/helmcharts/hlf-operator/templates/deployment.yaml
obp-operator
Pod에 대한 파일은 다음 위치에 있습니다.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
포드에 대한 배치 정의를 편집할 수 있습니다. Pod 템플리트 사양에서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