13.2. 콘텐츠로 로그 필터링
클러스터에서 모든 로그를 수집하면 많은 양의 데이터가 생성될 수 있으며 전송 및 저장에는 비용이 많이 들 수 있습니다.
저장하지 않아도 되는 낮은 우선 순위 데이터를 필터링하여 로그 데이터의 볼륨을 줄일 수 있습니다. 로깅은 로그 데이터의 볼륨을 줄이는 데 사용할 수 있는 콘텐츠 필터를 제공합니다.
콘텐츠 필터는 입력
선택기와 다릅니다. 입력
선택기는 소스 메타데이터를 기반으로 전체 로그 스트림을 선택하거나 무시합니다. 콘텐츠 필터는 로그 스트림을 편집하여 레코드 콘텐츠를 기반으로 레코드를 제거하고 수정합니다.
다음 방법 중 하나를 사용하여 로그 데이터 볼륨을 줄일 수 있습니다.
13.2.1. 원하지 않는 로그 레코드를 삭제하도록 콘텐츠 필터 구성
드롭
필터가 구성되면 로그 수집기는 전달 전에 필터에 따라 로그 스트림을 평가합니다. 수집기는 지정된 구성과 일치하는 원하지 않는 로그 레코드를 삭제합니다.
사전 요구 사항
- Red Hat OpenShift Logging Operator가 설치되어 있습니다.
- 관리자 권한이 있습니다.
-
ClusterLogForwarder
CR(사용자 정의 리소스)을 생성했습니다.
절차
ClusterLogForwarder
CR의필터 사양에 필터
구성을 추가합니다.다음 예제에서는 정규식을 기반으로 로그 레코드를 삭제하도록
ClusterLogForwarder
CR을 구성하는 방법을 보여줍니다.ClusterLogForwarder
CR의 예apiVersion: logging.openshift.io/v1 kind: ClusterLogForwarder metadata: # ... spec: filters: - name: <filter_name> type: drop 1 drop: 2 test: 3 - field: .kubernetes.labels."foo-bar/baz" 4 matches: .+ 5 - field: .kubernetes.pod_name notMatches: "my-pod" 6 pipelines: - name: <pipeline_name> 7 filterRefs: ["<filter_name>"] # ...
- 1
- 필터 유형을 지정합니다.
drop
필터는 필터 구성과 일치하는 로그 레코드를 삭제합니다. - 2
드롭
필터를 적용하기 위한 구성 옵션을 지정합니다.- 3
- 로그 레코드 삭제 여부를 평가하는 데 사용되는 테스트에 대한 구성을 지정합니다.
- 테스트에 지정된 모든 조건이 true이면 테스트가 통과되고 로그 레코드가 삭제됩니다.
-
drop
필터 구성에 대해 여러 테스트가 지정되면 테스트가 통과하면 레코드가 삭제됩니다. - 예를 들어 평가 중인 로그 레코드에서 필드가 누락되면 해당 조건이 false로 평가됩니다.
- 4
- 로그 레코드의 필드 경로인 점으로 구분된 필드 경로를 지정합니다. 경로에는 alpha-numeric 문자 및 밑줄(
a-zA-Z0-9_
)을 포함할 수 있습니다(예:.kubernetes.namespace_name
). 세그먼트에 이 범위를 벗어나는 문자가 포함된 경우 세그먼트는 따옴표로 묶어야 합니다(예:.kubernetes.labels."foo.bar-bar/baz"
. 단일테스트 구성에 여러 필드 경로를 포함할 수 있지만 테스트가
통과하고drop
필터를 적용하려면 모두 true로 평가되어야 합니다. - 5
- 정규식을 지정합니다. 로그 레코드가 이 정규식과 일치하는 경우 해당 레코드가 삭제됩니다. 단일
필드
경로에 대해matches
또는notMatches
조건을 설정할 수 있지만 둘 다 설정할 수는 없습니다. - 6
- 정규식을 지정합니다. 로그 레코드가 이 정규식과 일치하지 않으면 삭제됩니다. 단일
필드
경로에 대해matches
또는notMatches
조건을 설정할 수 있지만 둘 다 설정할 수는 없습니다. - 7
drop
필터가 적용되는 파이프라인을 지정합니다.
다음 명령을 실행하여
ClusterLogForwarder
CR을 적용합니다.$ oc apply -f <filename>.yaml
추가 예
다음 추가 예제에서는 우선 순위가 높은 로그 레코드만 유지하도록 drop
필터를 구성하는 방법을 보여줍니다.
apiVersion: logging.openshift.io/v1 kind: ClusterLogForwarder metadata: # ... spec: filters: - name: important type: drop drop: test: - field: .message notMatches: "(?i)critical|error" - field: .level matches: "info|warning" # ...
단일 테스트
구성에 여러 필드 경로를 포함하는 것 외에도 또는 검사로 처리되는 추가 테스트를 포함할 수도 있습니다. 다음 예에서는 테스트
구성이 true로 평가되면 레코드가 삭제됩니다. 그러나 두 번째 테스트
구성의 경우 두 필드 사양을 모두 true로 평가하려면 모두 true여야 합니다.
apiVersion: logging.openshift.io/v1 kind: ClusterLogForwarder metadata: # ... spec: filters: - name: important type: drop drop: test: - field: .kubernetes.namespace_name matches: "^open" test: - field: .log_type matches: "application" - field: .kubernetes.pod_name notMatches: "my-pod" # ...
13.2.2. 로그 레코드를 정리하도록 콘텐츠 필터 구성
정리
필터가 구성되면 로그 수집기는 전달 전에 필터에 따라 로그 스트림을 평가합니다. 수집기는 Pod 주석과 같은 낮은 값 필드를 제거하여 로그 레코드를 정리합니다.
사전 요구 사항
- Red Hat OpenShift Logging Operator가 설치되어 있습니다.
- 관리자 권한이 있습니다.
-
ClusterLogForwarder
CR(사용자 정의 리소스)을 생성했습니다.
절차
ClusterLogForwarder
CR의prune
사양에 필터 구성을 추가합니다.다음 예제에서는 필드 경로를 기반으로 로그 레코드를 정리하도록
ClusterLogForwarder
CR을 구성하는 방법을 보여줍니다.중요둘 다 지정된 경우 먼저
notIn
배열에 따라 레코드가 정리되며, 이 경우in
배열보다 우선합니다.notIn
배열을 사용하여 레코드를 정리하면in
배열을 사용하여 정리됩니다.ClusterLogForwarder
CR의 예apiVersion: logging.openshift.io/v1 kind: ClusterLogForwarder metadata: # ... spec: filters: - name: <filter_name> type: prune 1 prune: 2 in: [.kubernetes.annotations, .kubernetes.namespace_id] 3 notIn: [.kubernetes,.log_type,.message,."@timestamp"] 4 pipelines: - name: <pipeline_name> 5 filterRefs: ["<filter_name>"] # ...
- 1
- 필터 유형을 지정합니다.
prune
필터는 구성된 필드를 통해 로그 레코드를 정리합니다. - 2
prune
필터를 적용하기 위한 구성 옵션을 지정합니다.in
및notIn
필드는 로그 레코드의 필드 경로의 경로인 점으로 구분된 필드 경로의 배열로 지정됩니다. 이러한 경로에는 alpha-numeric 문자 및 밑줄(a-zA-Z0-9_
)을 포함할 수 있습니다(예:.kubernetes.namespace_name
). 세그먼트에 이 범위를 벗어나는 문자가 포함된 경우 세그먼트는 따옴표로 묶어야 합니다(예:.kubernetes.labels."foo.bar-bar/baz"
.- 3
- 선택 사항: 이 배열에 지정된 모든 필드는 로그 레코드에서 제거됩니다.
- 4
- 선택 사항: 이 배열에 지정되지 않은 모든 필드는 로그 레코드에서 제거됩니다.
- 5
prune
필터가 적용되는 파이프라인을 지정합니다.
다음 명령을 실행하여
ClusterLogForwarder
CR을 적용합니다.$ oc apply -f <filename>.yaml