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로 로그를 전달합니다.
elasticsearch
로그를 외부 Elasticsearch 인스턴스로 전달합니다.
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의 예

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      annotations:
        observability.openshift.io/tech-preview-otlp-output: "enabled" 
    1
    
      name: clf-otlp
    spec:
      serviceAccount:
        name: <service_account_name>
      outputs:
      - name: otlp
        type: otlp
        otlp:
          tuning:
            compression: gzip
            deliveryMode: AtLeastOnce
            maxRetryDuration: 20
            maxWrite: 10M
            minRetryDuration: 5
          url: <otlp_url> 
    2
    
      pipelines:
      - inputRefs:
        - application
        - infrastructure
        - audit
        name: otlp-logs
        outputRefs:
        - otlp
    Copy to Clipboard Toggle word wrap

    1
    이 주석을 사용하여 기술 프리뷰 기능인OTLP(OpenTelemetry Protocol) 출력을 활성화합니다.
    2
    이 URL은 절대적이어야 하며 로그가 전송되는 OTLP 끝점의 자리 표시자입니다.
참고

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)
Copy to Clipboard Toggle word wrap

  • 로깅을 사용하여 여러 줄 예외를 감지하고 이를 단일 로그 항목으로 재조정하려면 ClusterLogForwarder 사용자 정의 리소스(CR)에 .spec.filters 아래의 detectMultilineErrors 필드가 포함되어 있는지 확인합니다.

Example ClusterLogForwarder CR

apiVersion: "observability.openshift.io/v1"
kind: ClusterLogForwarder
metadata:
  name: <log_forwarder_name>
  namespace: <log_forwarder_namespace>
spec:
  serviceAccount:
    name: <service_account_name>
  filters:
  - name: <name>
    type: detectMultilineException
  pipelines:
    - inputRefs:
        - <input-name>
      name: <pipeline-name>
      filterRefs:
        - <filter-name>
      outputRefs:
        - <output-name>
Copy to Clipboard Toggle word wrap

1.4.6.1. 세부 정보

로그 메시지가 예외 스택 추적을 형성하는 연속 시퀀스로 표시되면 단일 통합 로그 레코드로 결합됩니다. 첫 번째 로그 메시지의 콘텐츠는 시퀀스의 모든 메시지 필드의 연결된 콘텐츠로 교체됩니다.

수집기는 다음 언어를 지원합니다.

  • Java
  • JS
  • Ruby
  • Python
  • Golang
  • PHP
  • Dart

1.4.7. HTTP를 통해 로그 전달

HTTP를 통한 로그 전달을 활성화하려면 ClusterLogForwarder 사용자 정의 리소스(CR)의 출력 유형으로 http 를 지정합니다.

프로세스

  • 아래 템플릿을 사용하여 ClusterLogForwarder CR을 생성하거나 편집합니다.

    Example ClusterLogForwarder CR

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      name: <log_forwarder_name>
      namespace: <log_forwarder_namespace>
    spec:
      managementState: Managed
      outputs:
      - name: <output_name>
        type: http
        http:
          headers:  
    1
    
              h1: v1
              h2: v2
          authentication:
            username:
              key: username
              secretName: <http_auth_secret>
            password:
              key: password
              secretName: <http_auth_secret>
          timeout: 300
          proxyURL: <proxy_url> 
    2
    
          url: <url> 
    3
    
        tls:
          insecureSkipVerify: 
    4
    
          ca:
            key: <ca_certificate>
            secretName: <secret_name> 
    5
    
      pipelines:
        - inputRefs:
            - application
          name: pipe1
          outputRefs:
            - <output_name>  
    6
    
      serviceAccount:
        name: <service_account_name> 
    7
    Copy to Clipboard Toggle word wrap

    1
    로그 레코드와 함께 보낼 추가 헤더입니다.
    2
    선택 사항: 이 출력에서 http 또는 https를 통해 로그를 전달하는 데 사용해야 하는 HTTP/HTTPS 프록시의 URL입니다. 이 설정은 클러스터 또는 노드의 기본 프록시 설정을 재정의합니다.
    3
    로그의 대상 주소입니다.
    4
    값은 true 또는 false 입니다.
    5
    대상 인증 정보의 시크릿 이름입니다.
    6
    이 값은 출력 이름과 동일해야 합니다.
    7
    서비스 계정의 이름입니다.

1.4.8. syslog 프로토콜을 사용하여 로그 전달

syslog RFC3164 또는 RFC5424 프로토콜을 사용하여 기본 Elasticsearch 로그 저장소 대신 또는 기본 Elasticsearch 로그 저장소에 더하여 프로토콜을 수락하도록 구성된 외부 로그 집계기에 로그 사본을 보낼 수 있습니다. OpenShift Container Platform에서 로그를 수신하도록 syslog 서버와 같은 외부 로그 수집기를 구성해야 합니다.

syslog 프로토콜을 사용하여 로그 전달을 구성하려면 해당 출력을 사용하는 syslog 서버 및 파이프라인에 대한 출력이 하나 이상 있는 ClusterLogForwarder 사용자 정의 리소스(CR)를 생성해야 합니다. syslog 출력은 UDP, TCP 또는 TLS 연결을 사용할 수 있습니다.

사전 요구 사항

  • 지정된 프로토콜 또는 형식을 사용하여 로깅 데이터를 수신하도록 구성된 로깅 서버가 있어야 합니다.

프로세스

  1. ClusterLogForwarder CR 오브젝트를 정의하는 YAML 파일을 생성하거나 편집합니다.

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      name: collector
    spec:
      managementState: Managed
      outputs:
      - name: rsyslog-east 
    1
    
        syslog:
          appName: <app_name> 
    2
    
          enrichment: KubernetesMinimal
          facility: <facility_value> 
    3
    
          msgId: <message_ID> 
    4
    
          payloadKey: <record_field> 
    5
    
          procId: <process_ID> 
    6
    
          rfc: <RFC3164_or_RFC5424> 
    7
    
          severity: informational 
    8
    
          tuning:
            deliveryMode: <AtLeastOnce_or_AtMostOnce> 
    9
    
          url: <url> 
    10
    
        tls: 
    11
    
          ca:
            key: ca-bundle.crt
            secretName: syslog-secret
        type: syslog
      pipelines:
      - inputRefs: 
    12
    
        - application
        name: syslog-east 
    13
    
        outputRefs:
        - rsyslog-east
      serviceAccount: 
    14
    
        name: logcollector
    Copy to Clipboard Toggle word wrap
    1
    출력 이름을 지정합니다.
    2
    선택 사항: syslog 메시지 헤더의 APP-NAME 부분에 대한 값을 지정합니다. 값은 Syslog 프로토콜 을 준수해야 합니다. 값은 필드 경로 뒤에 || | , 그 뒤에 다른 필드 경로 또는 정적 값으로 구성된 정적 및 동적 값의 조합일 수 있습니다. 마지막 값의 최대 길이는 48자로 잘립니다. 동적 값을 중괄호로 묶어야 하며 값 뒤에 || 로 구분된 정적 폴백 값을 따라야 합니다. 정적 값은 대시, 밑줄, 점, 슬래시와 함께 영숫자만 포함할 수 있습니다. 예제 값: <value1>-{.<value2>||"none"}.
    3
    선택 사항: syslog-msg 헤더의 Facility 부분에 대한 값을 지정합니다.
    4
    선택 사항: syslog-msg 헤더의 MSGID 부분에 대한 값을 지정합니다. 값은 필드 경로 뒤에 || | , 그 뒤에 다른 필드 경로 또는 정적 값으로 구성된 정적 및 동적 값의 조합일 수 있습니다. 마지막 값의 최대 길이는 32자로 잘립니다. 동적 값을 중괄호로 묶어야 하며 값 뒤에 || 로 구분된 정적 폴백 값을 따라야 합니다. 정적 값은 대시, 밑줄, 점, 슬래시와 함께 영숫자만 포함할 수 있습니다. 예제 값: <value1>-{.<value2>||"none"}.
    5
    선택 사항: 페이로드로 사용할 레코드 필드를 지정합니다. payloadKey 값은 단일 중괄호 {} 에 있는 단일 필드 경로여야 합니다. 예: {.<value>}.
    6
    선택 사항: syslog 메시지 헤더의 PROCID 부분에 대한 값을 지정합니다. 값은 Syslog 프로토콜 을 준수해야 합니다. 값은 필드 경로 뒤에 || | , 그 뒤에 다른 필드 경로 또는 정적 값으로 구성된 정적 및 동적 값의 조합일 수 있습니다. 마지막 값의 최대 길이는 48자로 잘립니다. 동적 값을 중괄호로 묶어야 하며 값 뒤에 || 로 구분된 정적 폴백 값을 따라야 합니다. 정적 값은 대시, 밑줄, 점, 슬래시와 함께 영숫자만 포함할 수 있습니다. 예제 값: <value1>-{.<value2>||"none"}.
    7
    선택 사항: 생성된 메시지가 준수하는 RFC를 설정합니다. 값은 RFC3164 또는 RFC5424 일 수 있습니다.
    8
    선택 사항: 메시지의 심각도 수준을 설정합니다. 자세한 내용은 Syslog 프로토콜 을 참조하십시오.
    9
    선택 사항: 로그 전달을 위한 전달 모드를 설정합니다. 값은 AtLeastOnce 또는 At CryostatOnce일 수 있습니다.
    10
    스키마를 사용하여 절대 URL을 지정합니다. 유효한 스키마는 tcp,tls, udp 입니다. 예: tls://syslog-receiver.example.com:6514.
    11
    TLS(전송 계층 보안) 클라이언트 연결의 옵션을 제어하는 설정을 지정합니다.
    12
    파이프라인을 사용하여 전달할 로그 유형 (application, infrastructure, 또는 audit)을 지정합니다.
    13
    파이프라인의 이름을 지정합니다.
    14
    서비스 계정의 이름입니다.
  2. CR 오브젝트를 생성합니다.

    $ oc create -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

1.4.8.1. 메시지 출력에 로그 소스 정보 추가

ClusterLogForwarder 사용자 정의 리소스(CR)에 보강 필드를 추가하여 namespace_name,pod_name, container_name 요소를 레코드의 message 필드에 추가할 수 있습니다.

# ...
  spec:
    outputs:
    - name: syslogout
      syslog:
        enrichment: KubernetesMinimal
        facility: user
        payloadKey: message
        rfc: RFC3164
        severity: debug
      type: syslog
      url: tls://syslog-receiver.example.com:6514
    pipelines:
    - inputRefs:
      - application
      name: test-app
      outputRefs:
      - syslogout
# ...
Copy to Clipboard Toggle word wrap
참고

이 구성은 RFC3164 및 RFC5424와 호환됩니다.

강화가 포함된 syslog 메시지 출력 예: None

 2025-03-03T11:48:01+00:00  example-worker-x  syslogsyslogserverd846bb9b: {...}
Copy to Clipboard Toggle word wrap

강화가 포함된 syslog 메시지 출력 예: KubernetesMinimal

2025-03-03T11:48:01+00:00  example-worker-x  syslogsyslogserverd846bb9b: namespace_name=cakephp-project container_name=mysql pod_name=mysql-1-wr96h,message: {...}
Copy to Clipboard Toggle word wrap

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat