4.2. 로깅 배포 구성
각 Operator가 구현한 CR(사용자 정의 리소스) YAML 파일을 사용하여 로깅 하위 시스템 배포를 구성할 수 있습니다.
Red Hat Openshift Logging Operator:
-
ClusterLogging
(CL) - 현재 각 노드에서 실행되는 데몬 세트에서 모두 구현된 수집기 및 전달자를 배포합니다. -
ClusterLogForwarder
(CLF) - 사용자 구성별로 로그를 전달하도록 수집기 구성을 생성합니다.
ScanSetting Operator:
-
MellanoxStack
- CloudEvent 클러스터를 로그 저장소로 제어하고 OpenShift Container Platform 인증 통합을 통해 웹 프록시를 제어하여 멀티 테넌시를 적용합니다.
OpenShift Elasticsearch Operator:
이러한 CR은 ClusterLogging
Operator에서 생성하고 관리하며 Operator에서 덮어쓰지 않으면 수동 변경을 수행할 수 없습니다.
-
Elasticsearch
- Elasticsearch 인스턴스를 기본 로그 저장소로 구성하고 배포합니다. -
Kibana
- 로그를 검색, 쿼리 및 볼 수 있도록 Kibana 인스턴스를 구성하고 배포합니다.
로깅 하위 시스템에는 이 문서에 설명된 구성 옵션만 지원됩니다.
다른 구성 옵션은 지원되지 않으므로 사용하지 마십시오. 구성 패러다임은 OpenShift Container Platform 릴리스마다 변경될 수 있으며 이러한 경우는 모든 구성 가능성이 제어되는 경우에만 정상적으로 처리될 수 있습니다. 이 문서에 설명된 것과 다른 구성을 사용하는 경우 Operator는 차이점을 조정하도록 설계되었으므로 변경 사항을 덮어씁니다.
OpenShift Container Platform 설명서에 설명되어 있지 않은 구성을 수행해야 하는 경우 Red Hat OpenShift Logging Operator를 Unmanaged
상태로 설정해야 합니다. Red Hat OpenShift의 관리되지 않는 로깅 하위 시스템은 지원되지 않으며 Managed
상태로 돌아올 때까지 업데이트를 받지 않습니다.
4.2.1. CloudEvent를 사용하여 스트림 기반 보존 활성화
로깅 버전 5.6 이상을 사용하면 로그 스트림에 따라 보존 정책을 구성할 수 있습니다. 이러한 규칙은 테넌트별로 또는 둘 다 전역적으로 설정할 수 있습니다. 둘 다 구성하면 글로벌 규칙 이전에 테넌트 규칙이 적용됩니다.
스트림 기반 보존을 활성화하려면
LokiStack
CR(사용자 정의 리소스)을 생성합니다.전역 스트림 기반 보존의 예
apiVersion: loki.grafana.com/v1 kind: LokiStack metadata: name: logging-loki namespace: openshift-logging spec: limits: global: 1 retention: 2 days: 20 streams: - days: 4 priority: 1 selector: '{kubernetes_namespace_name=~"test.+"}' 3 - days: 1 priority: 1 selector: '{log_type="infrastructure"}' managementState: Managed replicationFactor: 1 size: 1x.small storage: schemas: - effectiveDate: "2020-10-11" version: v11 secret: name: logging-loki-s3 type: aws storageClassName: standard tenants: mode: openshift-logging
테넌트당 스트림 기반 보존 예
apiVersion: loki.grafana.com/v1 kind: LokiStack metadata: name: logging-loki namespace: openshift-logging spec: limits: global: retention: days: 20 tenants: 1 application: retention: days: 1 streams: - days: 4 selector: '{kubernetes_namespace_name=~"test.+"}' 2 infrastructure: retention: days: 5 streams: - days: 1 selector: '{kubernetes_namespace_name=~"openshift-cluster.+"}' managementState: Managed replicationFactor: 1 size: 1x.small storage: schemas: - effectiveDate: "2020-10-11" version: v11 secret: name: logging-loki-s3 type: aws storageClassName: standard tenants: mode: openshift-logging
LokiStack
CR을 적용합니다.$ oc apply -f <filename>.yaml
이는 저장된 로그의 보존을 관리하기 위한 것이 아닙니다. 지원되는 최대 30일 동안의 저장된 로그의 글로벌 보존 기간은 오브젝트 스토리지로 구성됩니다.
4.2.2. 다중 라인 예외 탐지 활성화
컨테이너 로그에 대한 여러 줄 오류 감지를 활성화합니다.
이 기능을 활성화하면 성능에 영향을 미칠 수 있으며 추가 컴퓨팅 리소스 또는 대체 로깅 솔루션이 필요할 수 있습니다.
로그 구문 분석기에서는 별도의 예외와 동일한 예외의 별도의 행을 잘못 식별합니다. 이로 인해 추가 로그 항목이 생성되고 추적된 정보에 대한 불완전하거나 부정확한 보기가 발생합니다.
java 예외 예
java.lang.NullPointerException: Cannot invoke "String.toString()" because "<param1>" is null at testjava.Main.handle(Main.java:47) at testjava.Main.printMe(Main.java:19) at testjava.Main.main(Main.java:10)
-
로깅을 사용하여 다중 줄 예외를 감지하고 단일 로그 항목으로 재조정할 수 있도록 하려면
ClusterLogForwarder
사용자 정의 리소스(CR)에 값이true
인detectMultilineErrors
필드가 포함되어 있는지 확인합니다.
ClusterLogForwarder CR의 예
apiVersion: logging.openshift.io/v1 kind: ClusterLogForwarder metadata: name: instance namespace: openshift-logging spec: pipelines: - name: my-app-logs inputRefs: - application outputRefs: - default detectMultilineErrors: true
4.2.2.1. 세부 정보
로그 메시지가 예외 스택 추적을 형성하는 연속 시퀀스로 표시되면 단일 통합 로그 레코드로 결합됩니다. 첫 번째 로그 메시지의 콘텐츠는 순서에 있는 모든 메시지 필드의 연결 콘텐츠로 교체됩니다.
표 4.1. 수집기당 지원되는 언어:
언어 | fluentd | vector |
---|---|---|
Java | ✓ | ✓ |
JS | ✓ | ✓ |
Ruby | ✓ | ✓ |
Python | ✓ | ✓ |
Golang | ✓ | ✓ |
PHP | ✓ | |
Dart | ✓ | ✓ |
4.2.2.2. 문제 해결
활성화되면 수집기 구성에 type: detect_exceptions
가 있는 새 섹션이 포함됩니다.
벡터 구성 섹션의 예
[transforms.detect_exceptions_app-logs] type = "detect_exceptions" inputs = ["application"] languages = ["All"] group_by = ["kubernetes.namespace_name","kubernetes.pod_name","kubernetes.container_name"] expire_after_ms = 2000 multiline_flush_interval_ms = 1000
fluentd config 섹션의 예
<label @MULTILINE_APP_LOGS> <match kubernetes.**> @type detect_exceptions remove_tag_prefix 'kubernetes' message message force_line_breaks true multiline_flush_interval .2 </match> </label>