1.4. ClusterLogForwarder의 구조
CLF에는 다음과 같은 주요 구성 요소가 포함된 spec
섹션이 있습니다.
- 입력
-
전달할 로그 메시지를 선택합니다. 기본 입력 유형
애플리케이션
,인프라
및감사
는 클러스터의 다른 부분에서 로그를 전달합니다. 사용자 지정 입력을 정의할 수도 있습니다. - 출력
- 로그를 전달할 대상을 정의합니다. 각 출력에는 고유한 이름과 유형별 구성이 있습니다.
- 파이프라인
- 입력에서 필터를 통해 출력으로 가져오는 경로 로그를 정의합니다. 파이프라인에는 고유한 이름이 있으며 입력, 출력 및 필터 이름 목록으로 구성됩니다.
- 필터
- 파이프라인에서 로그 메시지를 변환하거나 삭제합니다. 사용자는 특정 로그 필드와 일치하는 필터를 정의하고 메시지를 삭제하거나 수정할 수 있습니다. 필터는 파이프라인에 지정된 순서로 적용됩니다.
1.4.1. 입력 링크 복사링크가 클립보드에 복사되었습니다!
입력은 spec.inputs
의 배열에 구성됩니다. 세 가지 기본 제공 입력 유형이 있습니다.
- 애플리케이션
- 인프라 네임스페이스를 제외한 모든 애플리케이션 컨테이너에서 로그를 선택합니다.
- 인프라
노드 및 다음 네임스페이스에서 실행되는 인프라 구성 요소에서 로그를 선택합니다.
-
default
-
kube
-
openshift
-
kube-
또는openshift-
접두사 포함
-
- audit
- auditd에서 OpenShift API 서버 감사 로그, Kubernetes API 서버 감사 로그, ovn 감사 로그 및 노드 감사 로그에서 로그를 선택합니다.
사용자는 특정 네임스페이스에서 로그를 선택하거나 Pod 레이블을 사용하는 유형 애플리케이션
의 사용자 정의 입력을 정의할 수 있습니다.
1.4.2. 출력 링크 복사링크가 클립보드에 복사되었습니다!
출력은 spec.outputs
아래의 배열에 구성됩니다. 각 출력에는 고유한 이름과 유형이 있어야 합니다. 지원되는 유형은 다음과 같습니다.
- azureMonitor
- Azure Monitor로 로그를 전달합니다.
- CloudMonitor
- AWS CloudMonitor로 로그를 전달합니다.
- googleCloudLogging
- Google Cloud Logging으로 로그를 전달합니다.
- http
- 일반 HTTP 끝점으로 로그를 전달합니다.
- kafka
- Kafka 브로커로 로그를 전달합니다.
- Loki
- 로그를 Loki 로깅 백엔드로 전달합니다.
- lokistack
- OpenShift Container Platform 인증 통합을 사용하여 Loki 및 웹 프록시의 로깅 지원 조합으로 로그를 전달합니다. LokiStack의 프록시는 OpenShift Container Platform 인증을 사용하여 멀티 테넌시 적용
- otlp
- OpenTelemetry 프로토콜을 사용하여 로그를 전달합니다.
- splunk
- Splunk로 로그를 전달합니다.
- syslog
- 로그를 외부 syslog 서버로 전달합니다.
각 출력 유형에는 고유한 구성 필드가 있습니다.
1.4.3. OTLP 출력 구성 링크 복사링크가 클립보드에 복사되었습니다!
클러스터 관리자는 OTLP(OpenTelemetry Protocol) 출력을 사용하여 로그를 수집하고 OTLP 수신자에 전달할 수 있습니다. OTLP 출력은 OpenTelemetry Observability 프레임워크에서 정의한 사양을 사용하여 JSON 인코딩으로 HTTP를 통해 데이터를 보냅니다.
OTLP(OpenTelemetry Protocol) 출력 로그 전달자는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
프로세스
다음 주석을 추가하여 OTLP를 사용하여 전달을 활성화하도록
ClusterLogForwarder
CR(사용자 정의 리소스)을 생성하거나 편집합니다.ClusterLogForwarder
CR의 예Copy to Clipboard Copied! Toggle word wrap Toggle overflow
OTLP 출력에서는 다른 출력 유형에서 사용하는 ViaQ 데이터 모델과 다른 OpenTelemetry 데이터 모델을 사용합니다. OpenTelemetry Observability 프레임워크에서 정의한 OpenTelemetry Semantic ations를 사용하여 OTLP를 준수합니다.
1.4.4. 파이프라인 링크 복사링크가 클립보드에 복사되었습니다!
파이프라인은 spec.pipelines
의 배열에 구성됩니다. 각 파이프라인에는 고유한 이름이 있어야 하며 다음으로 구성됩니다.
- inputRefs
- 로그가 이 파이프라인으로 전달되어야 하는 입력의 이름입니다.
- outputRefs
- 로그를 전송할 출력의 이름입니다.
- filterRefs
- (선택 사항) 적용할 필터 이름입니다.
filterRefs 순서가 순차적으로 적용되므로 중요합니다. 이전 필터는 이후 필터에서 처리되지 않는 메시지를 삭제할 수 있습니다.
1.4.5. 필터 링크 복사링크가 클립보드에 복사되었습니다!
필터는 spec.filters
아래의 배열에 구성됩니다. 구조화된 필드의 값을 기반으로 들어오는 로그 메시지를 일치시키고 수정하거나 삭제할 수 있습니다.
관리자는 다음 유형의 필터를 구성할 수 있습니다.
1.4.6. 여러 줄 예외 탐지 활성화 링크 복사링크가 클립보드에 복사되었습니다!
컨테이너 로그의 여러 줄 오류 감지를 활성화합니다.
이 기능을 활성화하면 성능에 영향을 미칠 수 있으며 추가 컴퓨팅 리소스 또는 대체 로깅 솔루션이 필요할 수 있습니다.
로그 구문 분석기가 별도의 예외와 동일한 예외의 별도의 행을 잘못 식별하는 경우가 많습니다. 이로 인해 추가 로그 항목과 추적된 정보에 대한 불완전하거나 부정확한 보기가 발생합니다.
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)
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)에.spec.filters
아래의detectMultilineErrors
필드가 포함되어 있는지 확인합니다.
Example ClusterLogForwarder CR
1.4.6.1. 세부 정보 링크 복사링크가 클립보드에 복사되었습니다!
로그 메시지가 예외 스택 추적을 형성하는 연속 시퀀스로 표시되면 단일 통합 로그 레코드로 결합됩니다. 첫 번째 로그 메시지의 콘텐츠는 시퀀스의 모든 메시지 필드의 연결된 콘텐츠로 교체됩니다.
수집기는 다음 언어를 지원합니다.
- Java
- JS
- Ruby
- Python
- Golang
- PHP
- Dart
1.4.7. 원하지 않는 로그 레코드를 삭제하도록 콘텐츠 필터 구성 링크 복사링크가 클립보드에 복사되었습니다!
모든 클러스터 로그를 수집하면 많은 양의 데이터가 생성되므로 이동 및 저장하는 데 비용이 많이 들 수 있습니다. 볼륨을 줄이기 위해 전달 전에 원하지 않는 로그 레코드를 제외하도록 드롭
필터를 구성할 수 있습니다. 로그 수집기는 필터에 대해 로그 스트림을 평가하고 지정된 조건과 일치하는 레코드를 삭제합니다.
drop
필터는 test
필드를 사용하여 로그 레코드를 평가하기 위한 하나 이상의 조건을 정의합니다. 이 필터는 다음 규칙을 적용하여 레코드를 삭제할지 여부를 확인합니다.
- 지정된 조건이 모두 true로 평가되면 테스트가 통과됩니다.
- 테스트가 통과하면 필터에서 로그 레코드를 삭제합니다.
-
drop
필터 구성에 여러 테스트를 정의하면 테스트 중 하나가 통과하면 필터에서 로그 레코드를 삭제합니다. - 예를 들어 참조된 필드가 누락된 조건을 평가하는 동안 오류가 발생하면 해당 조건이 false로 평가됩니다.
사전 요구 사항
- Red Hat OpenShift Logging Operator가 설치되어 있습니다.
- 관리자 권한이 있습니다.
-
ClusterLogForwarder
CR(사용자 정의 리소스)을 생성했습니다. -
OpenShift CLI(
oc
)가 설치되어 있습니다.
프로세스
기존
ClusterLogForwarder
구성을 추출하여 로컬 파일로 저장합니다.oc get clusterlogforwarder <name> -n <namespace> -o yaml > <filename>.yaml
$ oc get clusterlogforwarder <name> -n <namespace> -o yaml > <filename>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음과 같습니다.
-
<
name>은 구성할ClusterLogForwarder
인스턴스의 이름입니다. -
<namespace
>는ClusterLogForwarder
인스턴스를 생성한 네임스페이스입니다(예:openshift-logging
). -
<filename
>은 구성을 저장하는 로컬 파일의 이름입니다.
-
ClusterLogForwarder
CR의필터
사양에 원하지 않는 로그 레코드를 삭제하는 구성을 추가합니다.ClusterLogForwarder
CR의 예Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 필터 유형을 지정합니다.
drop
필터는 필터 구성과 일치하는 로그 레코드를 삭제합니다. - 2
drop
filter에 대한 구성 옵션을 지정합니다.- 3
- 필터가 로그 레코드를 삭제하는지 여부를 평가할 테스트에 대한 조건을 지정합니다.
- 4
- 로그 레코드에서 점으로 구분된 필드 경로를 지정합니다.
-
각 경로 세그먼트에는 영숫자 및 밑줄,
a-z
,A-Z
0-9
,_
.kubernetes.namespace_name
을 포함할 수 있습니다. -
세그먼트에 다른 문자가 포함된 경우 세그먼트는 따옴표로 묶어야 합니다(예:
.kubernetes.labels."app.version-1.2/beta"
). -
단일
테스트 구성에 여러 필드 경로를 포함할 수 있지만 테스트가
통과하고drop
필터를 적용하려면 모두 true로 평가되어야 합니다.
-
각 경로 세그먼트에는 영숫자 및 밑줄,
- 5
- 정규식을 지정합니다. 로그 레코드가 이 정규식과 일치하는 경우 해당 레코드가 삭제됩니다.
- 6
- 정규식을 지정합니다. 로그 레코드가 이 정규식과 일치하지 않으면 삭제됩니다.
- 7
drop
필터를 사용하는 파이프라인을 지정합니다.
참고단일
필드
경로에 대해matches
또는notMatches
조건을 설정할 수 있지만 둘 다 설정할 수는 없습니다.우선순위가 높은 로그 레코드만 유지하는 구성의 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 여러 테스트가 있는 구성 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
ClusterLogForwarder
CR을 적용합니다.oc apply -f <filename>.yaml
$ oc apply -f <filename>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.4.8. API 감사 필터 개요 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift API 서버는 모든 API 호출에 대한 감사 이벤트를 생성합니다. 이러한 이벤트에는 요청, 응답 및 요청자의 ID에 대한 세부 정보가 포함됩니다. 이로 인해 대량의 데이터가 발생할 수 있습니다.
API 감사 필터는 필수가 아닌 이벤트를 제외하고 이벤트 크기를 줄이기 위해 규칙을 사용하여 감사 추적을 관리하는 데 도움이 됩니다. 규칙은 순서대로 확인되며 첫 번째 일치 시에 확인 중지됩니다. 이벤트의 데이터 양은 수준
필드의 값에 따라 달라집니다.
-
없음
: 이벤트가 삭제되었습니다. -
metadata
: 이벤트에는 감사 메타데이터와 제외 요청 및 응답 본문이 포함됩니다. -
request : 이벤트에는 감사 메타데이터와 요청 본문이 포함되어 있으며 응답 본문이 제외됩니다.
-
RequestResponse
: 이벤트에는 메타데이터, 요청 본문 및 응답 본문이라는 모든 데이터가 포함됩니다. 응답 본문은 매우 커질 수 있습니다. 예를 들어oc get pods -A
는 클러스터의 모든 포드에 대한 YAML 설명이 포함된 응답 본문을 생성합니다.
사용자 로깅 배포에 Vector 수집기가 설정된 경우에만 API 감사 필터 기능을 사용할 수 있습니다.
ClusterLogForwarder
CR(사용자 정의 리소스)은 표준 Kubernetes 감사 정책과 동일한 형식을 사용합니다. ClusterLogForwarder
CR은 다음과 같은 추가 기능을 제공합니다.
- 와일드카드
-
사용자, 그룹, 네임스페이스 및 리소스의 이름에는 선행 또는 후행
*
별표 문자가 있을 수 있습니다. 예를 들어openshift-\*
네임스페이스는openshift-apiserver
또는openshift-authentication
네임스페이스와 일치합니다.\*/status
리소스는Pod/status
또는Deployment/status
리소스와 일치합니다. - 기본 규칙
정책의 규칙과 일치하지 않는 이벤트는 다음과 같이 필터링됩니다.
-
get
,list
및watch
와 같은 읽기 전용 시스템 이벤트가 삭제됩니다. - 서비스 계정은 서비스 계정과 동일한 네임스페이스 내에서 발생하는 이벤트를 기록합니다.
- 기타 모든 이벤트는 구성된 속도 제한에 따라 전달됩니다.
이러한 기본값을 비활성화하려면
수준
필드만 있는 규칙으로 규칙 목록을 종료하거나 빈 규칙을 추가합니다.-
- 응답 코드 생략
-
생략할 정수 상태 코드 목록입니다. 이벤트가 생성되지 않은 HTTP 상태 코드를 나열하는
OmitResponseCodes
필드를 사용하여 응답에서 HTTP 상태 코드를 기반으로 이벤트를 삭제할 수 있습니다. 기본값은[404, 409, 422, 429]
입니다. 값이 빈 목록인 경우[]
에서는 상태 코드가 생략되지 않습니다.
ClusterLogForwarder
CR 감사 정책은 OpenShift Container Platform 감사 정책 외에도 작동합니다. ClusterLogForwarder
CR 감사 필터는 로그 수집기가 전달하는 내용을 변경하고 동사, 사용자, 그룹, 네임스페이스 또는 리소스별로 필터링하는 기능을 제공합니다. 여러 필터를 생성하여 동일한 감사 스트림의 다른 요약을 다른 위치로 보낼 수 있습니다. 예를 들어 자세한 스트림을 로컬 클러스터 로그 저장소로 전송하고 덜 자세한 스트림을 원격 사이트로 보낼 수 있습니다.
-
감사 로그를 수집하려면
collect-audit-logs
클러스터 역할이 있어야 합니다. - 제공된 다음 예제는 감사 정책에서 가능한 규칙 범위를 설명하기 위한 것이며 권장되는 구성은 아닙니다.
감사 정책의 예
1.4.9. 레이블 표현식 또는 일치하는 라벨 키와 값을 포함하여 입력 시 애플리케이션 로그 필터링 링크 복사링크가 클립보드에 복사되었습니다!
입력
선택기를 사용하여 라벨 표현식 또는 일치하는 라벨 키와 해당 값을 기반으로 애플리케이션 로그를 포함할 수 있습니다.
프로세스
ClusterLogForwarder
CR의입력 사양에
필터 구성을 추가합니다.다음 예제에서는 라벨 표현식 또는 일치하는 라벨 키/값에 따라 로그를 포함하도록
ClusterLogForwarder
CR을 구성하는 방법을 보여줍니다.ClusterLogForwarder
CR의 예Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
ClusterLogForwarder
CR을 적용합니다.oc apply -f <filename>.yaml
$ oc apply -f <filename>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.4.10. 로그 레코드를 정리하도록 콘텐츠 필터 구성 링크 복사링크가 클립보드에 복사되었습니다!
prune
필터를 구성하면 로그 수집기는 전달 전에 필터에 대해 로그 스트림을 평가합니다. 수집기는 Pod 주석과 같은 낮은 값 필드를 제거하여 로그 레코드를 정리합니다.
사전 요구 사항
- Red Hat OpenShift Logging Operator가 설치되어 있습니다.
- 관리자 권한이 있습니다.
-
ClusterLogForwarder
CR(사용자 정의 리소스)을 생성했습니다. -
OpenShift CLI(
oc
)가 설치되어 있습니다.
프로세스
기존
ClusterLogForwarder
구성을 추출하여 로컬 파일로 저장합니다.oc get clusterlogforwarder <name> -n <namespace> -o yaml > <filename>.yaml
$ oc get clusterlogforwarder <name> -n <namespace> -o yaml > <filename>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음과 같습니다.
-
<
name>은 구성할ClusterLogForwarder
인스턴스의 이름입니다. -
<namespace
>는ClusterLogForwarder
인스턴스를 생성한 네임스페이스입니다(예:openshift-logging
). -
<filename
>은 구성을 저장하는 로컬 파일의 이름입니다.
-
ClusterLogForwarder
CR의필터
사양에 로그 레코드를 정리하는 구성을 추가합니다.중요매개 변수와
notIn
매개변수를 둘 다 지정하면 정리 중에notIn
배열이 우선합니다.notIn
배열을 사용하여 레코드를 정리하면in
배열을 사용하여 정리됩니다.ClusterLogForwarder
CR의 예Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 필터 유형을 지정합니다.
prune
필터는 구성된 필드를 통해 로그 레코드를 정리합니다. - 2
정리
필터에 대한 구성 옵션을 지정합니다.-
in
및notIn
필드는 로그 레코드의 필드에 대한 점으로 구분된 경로의 배열입니다. -
각 경로 세그먼트에는 alpha-numeric 문자 및 밑줄,
a-z
,0-9
,_
.kubernetes.namespace_name
을 포함할 수 있습니다. -
세그먼트에 다른 문자가 포함된 경우 세그먼트는 따옴표로 묶어야 합니다(예:
.kubernetes.labels."app.version-1.2/beta"
).
-
- 3
- 선택 사항: 로그 레코드에서 제거할 필드를 지정합니다. 로그 수집기는 다른 모든 필드를 유지합니다.
- 4
- 선택 사항: 로그 레코드에 유지할 필드를 지정합니다. 로그 수집기는 다른 모든 필드를 제거합니다.
- 5
prune
필터가 적용되는 파이프라인을 지정합니다.중요-
필터는 로그 레코드에서
.log_type
.log_source
,.message
필드를 제거할 수 없습니다. 이를notIn
필드에 포함해야 합니다. -
GoogleCloudLogging
출력을 사용하는 경우notIn
필드에.hostname
을 포함해야 합니다.
-
필터는 로그 레코드에서
다음 명령을 실행하여
ClusterLogForwarder
CR을 적용합니다.oc apply -f <filename>.yaml
$ oc apply -f <filename>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow