4.2. 로깅 수집기 구성
Red Hat OpenShift의 로깅 하위 시스템은 클러스터에서 작업 및 애플리케이션 로그를 수집하고 Kubernetes 포드 및 프로젝트 메타데이터로 데이터를 보강합니다.
로그 수집기의 CPU 및 메모리 제한을 구성하고 로그 수집기 Pod를 특정 노드로 이동할 수 있습니다. ClusterLogging
사용자 정의 리소스(CR)의 spec.collection.log.fluentd
스탠자를 통해 로그 수집기에 대해 지원되는 모든 수정을 수행할 수 있습니다.
4.2.1. 지원되지 않는 구성 정보
Red Hat OpenShift에 대해 지원되는 로깅 하위 시스템을 구성하는 방법은 이 설명서에 설명된 옵션을 사용하여 구성하는 것입니다. 다른 구성은 지원되지 않으므로 사용하지 마십시오. 구성 패러다임은 OpenShift Container Platform 릴리스마다 변경될 수 있으며 이러한 경우는 모든 구성 가능성이 제어되는 경우에만 정상적으로 처리될 수 있습니다. 이 문서에 설명된 것과 다른 구성을 사용하는 경우 OpenShift Elasticsearch Operator와 Red Hat OpenShift Logging Operator가 차이를 조정하므로 변경한 내용이 사라집니다. Operator는 원래 기본적으로 모든 항목을 정의된 상태로 되돌립니다.
OpenShift Container Platform 설명서에 제시되지 않은 구성이 꼭 필요한 경우 Red Hat OpenShift Logging Operator 또는 OpenShift Elasticsearch Operator를 Unmanaged 상태로 설정해야 합니다. 관리되지 않는 OpenShift Logging 환경은 지원되지 않으며 OpenShift Logging을 Managed 상태로 되돌릴 때까지 업데이트를 받지 않습니다.
4.2.2. 로깅 수집기 Pod 보기
Fluentd 로깅 수집기 Pod와 실행 중인 해당 노드를 볼 수 있습니다. Fluentd 로깅 수집기 Pod는 openshift-logging
프로젝트에서만 실행됩니다.
프로세스
-
openshift-logging
프로젝트에서 다음 명령을 실행하여 Fluentd 로깅 수집기 Pod 및 세부 정보를 확인합니다.
$ oc get pods --selector component=collector -o wide -n openshift-logging
출력 예
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES fluentd-8d69v 1/1 Running 0 134m 10.130.2.30 master1.example.com <none> <none> fluentd-bd225 1/1 Running 0 134m 10.131.1.11 master2.example.com <none> <none> fluentd-cvrzs 1/1 Running 0 134m 10.130.0.21 master3.example.com <none> <none> fluentd-gpqg2 1/1 Running 0 134m 10.128.2.27 worker1.example.com <none> <none> fluentd-l9j7j 1/1 Running 0 134m 10.129.2.31 worker2.example.com <none> <none>
4.2.3. 로그 수집기 CPU 및 메모리 제한 구성
로그 수집기는 CPU 및 메모리 제한을 모두 조정할 수 있습니다.
프로세스
openshift-logging
프로젝트에서ClusterLogging
사용자 정의 리소스(CR)를 편집합니다.$ oc -n openshift-logging edit ClusterLogging instance
apiVersion: "logging.openshift.io/v1" kind: "ClusterLogging" metadata: name: "instance" namespace: openshift-logging ... spec: collection: logs: fluentd: resources: limits: 1 memory: 736Mi requests: cpu: 100m memory: 736Mi
- 1
- 필요에 따라 CPU 및 메모리 제한 및 요청을 지정합니다. 표시된 값이 기본값입니다.
4.2.4. 로그 전달자를 위한 고급 구성
Red Hat OpenShift의 로깅 하위 시스템에는 Fluentd 로그 전달자의 성능을 조정하는 데 사용할 수 있는 여러 Fluentd 매개변수가 포함되어 있습니다. 이러한 매개변수를 사용하여 다음 Fluentd 동작을 변경할 수 있습니다.
- 청크 및 청크 버퍼 크기
- 청크 플러시 동작
- 청크 전달 재시도 동작
Fluentd는 청크라는 단일 blob에서 로그 데이터를 수집합니다. Fluentd가 청크를 생성할 때 청크는 스테이지에 있는 것으로 간주되어 청크가 데이터로 채워집니다. 청크가 가득 차면 Fluentd는 청크를 큐로 이동합니다. 여기서 청크는 플러시되기 전에 보관되거나 대상에 기록됩니다. Fluentd는 네트워크 문제 또는 대상의 용량 문제와 같은 여러 가지 이유로 청크를 플러시하지 못할 수 있습니다. 청크를 플러시할 수 없는 경우 Fluentd는 구성된 대로 플러시를 다시 시도합니다.
기본적으로 OpenShift Container Platform에서 Fluentd는 지수 백오프 방법을 사용하여 플러시를 다시 시도합니다. 여기서 Fluentd는 플러시 재시도 간격의 대기 시간을 두 배로 늘리며, 대상에 대한 연결 요청을 줄이는 데 도움이 됩니다. 지수 백오프를 비활성화하고 대신 주기적 재시도 방법을 사용하여 지정된 간격으로 청크 플러시를 재시도 할 수 있습니다.
이러한 매개변수는 대기 시간과 처리량 간의 균형을 결정하는 데 도움이 될 수 있습니다.
- 처리량에 대해 Fluentd를 최적화하려면 이러한 매개변수를 사용하여 더 큰 버퍼 및 큐를 구성하고, 플러시를 지연하고, 재시도 간격을 더 길게 설정하여 네트워크 패킷 수를 줄일 수 있습니다. 버퍼가 클수록 노드 파일 시스템에 더 많은 공간이 필요합니다.
- 짧은 대기 시간을 최적화하기 위해 매개변수를 사용하여 데이터를 최대한 빨리 전송하고, 배치 누적을 방지하고, 큐와 버퍼를 더 짧게 만들고, 플러시 및 재시도를 더 자주 사용할 수 있습니다.
ClusterLogging
사용자 정의 리소스(CR)에서 다음 매개변수를 사용하여 청크 및 플러시 동작을 구성할 수 있습니다. 그러면 Fluentd에서 사용할 수 있도록 매개변수가 Fluentd 구성 맵에 자동으로 추가됩니다.
이러한 매개변수는 다음과 같습니다.
- 대부분의 사용자와 관련이 없습니다. 기본 설정은 좋은 일반 성능을 제공해야 합니다.
- Fluentd 구성 및 성능에 대한 자세한 지식이 있는 고급 사용자에게만 해당됩니다.
- 성능 튜닝 전용입니다. 로깅의 기능적 측면에는 영향을 미치지 않습니다.
매개변수 | 설명 | 기본 |
---|---|---|
| 각 청크의 최대 크기입니다. Fluentd는 이 크기에 도달하면 청크에 데이터 쓰기를 중지합니다. 그런 다음 Fluentd는 청크를 큐로 보내고 새 청크를 엽니다. |
|
| 스테이지와 큐의 총 크기인 버퍼의 최대 크기입니다. 버퍼 크기가 이 값을 초과하면 Fluentd는 청크로의 데이터 추가를 중지하고 오류와 함께 실패합니다. 청크에 없는 모든 데이터는 손실됩니다. |
|
|
청크 플러시 간격입니다. |
|
| 플러시를 수행하는 방법:
|
|
| 청크 플러시를 수행하는 스레드 수입니다. 스레드 수를 늘리면 플러시 처리량이 향상되어 네트워크 대기 시간이 숨겨집니다. |
|
| 큐가 가득 찼을 때 청크 동작:
|
|
|
|
|
| 플러시 실패 시 재시도 방법:
|
|
| 레코드가 삭제되기 전에 재시도할 최대 시간 간격입니다. |
|
| 다음 청크 플러시 전의 시간(초)입니다. |
|
Fluentd 청크 수명 주기에 대한 자세한 내용은 Fluentd 문서의 버퍼 플러그인을 참조하십시오.
프로세스
openshift-logging
프로젝트에서ClusterLogging
사용자 정의 리소스(CR)를 편집합니다.$ oc edit ClusterLogging instance
다음 매개변수를 추가하거나 수정합니다.
apiVersion: logging.openshift.io/v1 kind: ClusterLogging metadata: name: instance namespace: openshift-logging spec: forwarder: fluentd: buffer: chunkLimitSize: 8m 1 flushInterval: 5s 2 flushMode: interval 3 flushThreadCount: 3 4 overflowAction: throw_exception 5 retryMaxInterval: "300s" 6 retryType: periodic 7 retryWait: 1s 8 totalLimitSize: 32m 9 ...
- 1
- 플러시를 위해 큐에 추가되기 전에 각 청크의 최대 크기를 지정합니다.
- 2
- 청크 플러시 간격을 지정합니다.
- 3
lazy
,interval
또는immediate
등 청크 플러시를 수행할 방법을 지정합니다.- 4
- 청크 플러시에 사용할 스레드 수를 지정합니다.
- 5
throw_exception
,block
또는drop_oldest_chunk
등 큐가 가득 찼을 때의 청크 동작을 지정합니다.- 6
exponential_backoff
청크 플러시 방법의 최대 간격(초)을 지정합니다.- 7
- 청크 플러시 실패 시 재시도 유형을
exponential_backoff
또는periodic
으로 지정합니다. - 8
- 다음 청크 플러시 전 시간(초)을 지정합니다.
- 9
- 청크 버퍼의 최대 크기를 지정합니다.
Fluentd Pod가 재배포되었는지 확인합니다.
$ oc get pods -l component=collector -n openshift-logging
새 값이
fluentd
구성 맵에 있는지 확인합니다.$ oc extract configmap/fluentd --confirm
예: fluentd.conf
<buffer> @type file path '/var/lib/fluentd/default' flush_mode interval flush_interval 5s flush_thread_count 3 retry_type periodic retry_wait 1s retry_max_interval 300s retry_timeout 60m queued_chunks_limit_size "#{ENV['BUFFER_QUEUE_LIMIT'] || '32'}" total_limit_size 32m chunk_limit_size 8m overflow_action throw_exception </buffer>
4.2.5. 기본 Elasticsearch 로그 저장소를 사용하지 않는 경우 사용되지 않은 구성 요소 제거
관리자로서 로그를 타사 로그 저장소로 전달하고 기본 Elasticsearch 로그 저장소를 사용하지 않는 경우 로깅 클러스터에서 사용하지 않는 여러 구성 요소를 제거할 수 있습니다.
즉, 기본 Elasticsearch 로그 저장소를 사용하지 않는 경우 ClusterLogging
사용자 정의 리소스(CR)에서 내부 Elasticsearch logStore
, Kibana visualization
구성 요소를 제거할 수 있습니다. 이러한 구성 요소를 제거하는 것은 선택 사항이지만 리소스를 절약할 수 있습니다.
사전 요구 사항
로그 전달자가 로그 데이터를 기본 내부 Elasticsearch 클러스터로 전송하지 않는지 확인합니다. 로그 전달을 구성하는 데 사용한
ClusterLogForwarder
CR YAML 파일을 검사합니다.default
를 지정하는outputRefs
요소가 없는지 확인합니다. 예를 들면 다음과 같습니다.outputRefs: - default
ClusterLogForwarder
CR은 로그 데이터를 내부 Elasticsearch 클러스터로 전달하고 ClusterLogging
CR에서 logStore
구성 요소를 제거합니다. 이 경우 로그 데이터를 저장할 내부 Elasticsearch 클러스터가 표시되지 않습니다. 이 경우 데이터 손실이 발생할 수 있습니다.
프로세스
openshift-logging
프로젝트에서ClusterLogging
사용자 정의 리소스(CR)를 편집합니다.$ oc edit ClusterLogging instance
-
ClusterLogging
CR에서logStore
,visualization
스탠자를 제거하십시오. ClusterLogging
CR의collection
스탠자를 유지합니다. 결과는 다음 예와 유사해야 합니다.apiVersion: "logging.openshift.io/v1" kind: "ClusterLogging" metadata: name: "instance" namespace: "openshift-logging" spec: managementState: "Managed" collection: logs: type: "fluentd" fluentd: {}
수집기 Pod가 재배포되었는지 확인합니다.
$ oc get pods -l component=collector -n openshift-logging
추가 리소스