오케스트레이션 환경에서 로깅 에이전트 에 대한 멀티라인 로그 지원

오류 및 스택 추적은 여러 줄에 걸쳐서 발생할 수 있으며 각 줄은 별도의 로그 항목으로 전송됩니다. Java 또는 Python 와 같은 오케스트레이션 환경에서 실행되는 애플리케이션(예: Red Hat OpenShift on IBM Cloud 또는 IBM Cloud Kubernetes Service )에서 IBM® Cloud Logs 의 멀티라인 로그 수집을 지원하려면 로깅 에이전트 구성을 변경해야 합니다. 변경 사항에는 단일 로그 레코드로 함께 있어야 하는 로그 행을 그룹화하는 데 필요한 구문 분석이 포함됩니다.

멀티라인 정보

OpenShift 및 Kubernetes 클러스터에서 로깅 시스템은 애플리케이션 stdout 및 stderr 스트림에서 로그를 캡처합니다. 그런 다음 CRI(컨테이너 런타임 인터페이스) 로깅 형식에 따라 로그를 파일에 저장하기 전에 각 로그 행에 메타데이터를 포함한 접두사를 추가합니다.

이 Kubernetes 로그 줄 접두사에는 다음이 포함됩니다:

  • 타임스탬프: ISO 8601 형식.
  • 스트림 이름: stdout 또는 stderr.
  • 태그: F 또는 P.

CRI 로깅 형식은 태그를 사용하여 로그 줄이 단일 로그 줄인지 아니면 여러 줄의 로그 항목인지 정의합니다. 태그의 유효한 값은 다음과 같습니다:

  • 부분 (P): 이 태그는 런타임에 의해 단일 로그 줄을 여러 줄로 분할한 결과 로그 항목이 아직 종료되지 않은 로그 줄에 포함됩니다.
  • 전체 (F): 이 태그는 로그 항목이 완료되었음을 나타내는 데 사용됩니다. 단일 로그 줄 항목에 사용하거나 여러 줄 항목의 마지막 줄임을 나타내는 데 사용됩니다.
2024-03-15T10:30:45.123456789Z stdout F This is a complete log line
2024-03-15T10:30:45.123456789Z stderr P This is the first part of a
2024-03-15T10:30:45.123456789Z stderr F multiline error message

기본적으로 로깅 에이전트 에는 cri 멀티라인 구문 분석기와 함께 Tail plugin 의 구성이 포함되어 있어 stdout 및 stderr 에서 이러한 CRI 형식의 로그를 단일 로그 줄로 연결할 수 있도록 지원합니다.

CRI 기반 로깅을 사용하는 Kubernetes 환경에서는 Multiline.Parser 설정(기본적으로 cri 으로 설정됨)을 사용하여 컨테이너에서 생성된 여러 줄 로그를 올바르게 구문 분석하고 재조합하는 것이 좋습니다.

Java 또는 Python 과 같이 오류 및 스택 추적이 여러 줄에 걸쳐 있을 수 있고 각 줄이 별도의 로그 항목으로 전송되는 애플리케이션도 있을 수 있습니다. 이러한 애플리케이션은 서로 연결될 수 있는 여러 개의 로그 라인을 단일 로그 라인으로 생성할 수 있습니다. 로깅 에이전트 를 통해 이러한 여러 줄 로그를 처리하려면 Multiline parser 을 추가로 구성해야 합니다.

기본 멀티라인 구성

CRI 로그의 기본 멀티라인 구성은 로깅 에이전트 를 배포할 때 구성 및 활성화됩니다.

플루언트 비트에서는 기본 제공 멀티라인 파서를 사용하거나 사용자 지정 멀티라인 파서를 사용하여 Multiline parser 을 구성할 수 있습니다.

기본적으로 로깅 에이전트 으로 구성된 Tail plugin 은 기본 제공 멀티라인 cri 파서를 사용하여 구성됩니다. 이 구문 분석기는 CRI-O 컨테이너 엔진에서 생성된 로그를 처리하고 로그 항목의 연결을 지원합니다.

예를 들어 로깅 에이전트 에는 다중 줄 지원에 대한 기본 구성이 다음과 같습니다:

    [INPUT]
        Name              tail
        Tag               kube.*
        .....
        Buffer_Chunk_Size 32KB
        Buffer_Max_Size   256KB
        Multiline.parser  cri
        Skip_Long_Lines   On
        Refresh_Interval  10
        storage.type      filesystem
        storage.pause_on_chunks_overlimit on

애플리케이션에 대한 추가 멀티라인 지원 구성

Java 또는 Python 과 같이 오류 및 스택 추적이 여러 줄에 걸쳐 있고 각 줄이 별도의 로그 항목으로 전송되는 애플리케이션이 있는 경우 로깅 에이전트 에서 멀티라인 구문 분석기를 구성해야 합니다.

다음 옵션 중 하나를 선택하여 멀티라인 구문 분석기로 로깅 에이전트 을 구성합니다:

사용자 지정 여러 줄 구문 분석기 추가하기

로깅 에이전트 에서 사용할 사용자 정의 멀티라인 구문 분석기를 만들려면 구성 가능한 멀티라인 구 문 분석기 의 지침을 따르세요. 사용자 지정 정규식을 정의하여 여러 줄 패턴을 결정합니다.

로깅 에이전트 구성은 INPUT 플러그인 뒤에 FILTER 을 포함해야 합니다. 필터는 구성된 MULTILINE_PARSER 의 패턴을 적용합니다. MULTILINE_PARSER 의 Name 값은 FILTER 의 Multiline.parser 값과 일치해야 합니다.

filter-multiline.conf: |
    [FILTER]
        Name              multiline
        Match             *
        Multiline.parser  INSERT_CUSTOM_PARSER_NAME
        Multiline.key_content log

앱에 여러 줄 지원 추가

로깅 에이전트 배포되어 있고 오류 및 스택 추적이 여러 줄에 걸쳐 있고 각 줄이 별도의 로그 항목으로 전송되는 Java 또는 Python 와 같은 앱이 있는 경우 에이전트 구성을 업데이트하고 멀티라인 구문 분석기를 구성할 수 있습니다.

로깅 에이전트 에서 여러 줄 지원을 추가하려면 다음 단계를 완료하세요:

  1. 클러스터에 로그인하십시오. 자세한 내용은 클러스터에 액세스하기를 참조하세요.

  2. 로깅 에이전트 구성 맵(inputs.conf)에서 멀티라인 구문 분석기를 추가합니다.

    로깅 에이전트 구성은 입력 플러그인 바로 뒤에 멀티라인 필터를 위한 @INCLUDE 이 있어야 합니다.

    fluent-bit.conf: |
    [SERVICE]
      Flush                   1
      Log_Level               info
      Daemon                  off
      Parsers_File            parsers.conf
      Plugins_File            plugins.conf
    
      ...
    
    
    @INCLUDE input-kubernetes.conf
    @INCLUDE filter-multiline.conf
    
    ...
    
    input-kubernetes.conf: |
    [INPUT]
        Name              tail
        Tag               kube.*
        .....
        Buffer_Chunk_Size 32KB
        Buffer_Max_Size   256KB
        Multiline.parser  cri
        Skip_Long_Lines   On
        Refresh_Interval  10
        storage.type      filesystem
        storage.pause_on_chunks_overlimit on
    
    filter-multiline.conf: |
    [FILTER]
        Name              multiline
        Match             *
        Multiline.parser  multiline-java-example
        Multiline.key_content log
    
    parsers.conf: |
    ...
    [MULTILINE_PARSER]
        Name            multiline-java-example
        Type            regex
        Flush_timeout   500
        Rule            "start_state"     "/^(\d+-\d+-\d+ \d+:\d+:\d+\.\d+)(.*)$/"     "cont"
        Rule            "cont"            "/^(?!\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}).*$/"     "cont"
    ...
    
  3. 상담원 포드를 다시 시작합니다.

    Kubernetes 클러스터의 경우 실행합니다:

    kubectl -n ibm-observe rollout restart ds/logs-agent
    

    OpenShift 클러스터의 경우 실행합니다:

    oc -n ibm-observe rollout restart ds/logs-agent
    

여러 런타임 및 구문 분석 요구 사항이 있는 클러스터에 대한 다중 줄 지원 구성하기

여러 다른 언어 또는 런타임을 사용하는 애플리케이션(예: Java, Go, Python )을 실행하는 클러스터가 있는 경우 다양한 소스의 여러 줄 로그를 처리해야 할 수 있습니다. Java 에 대한 사용자 정의 다중 줄 구문 분석기가 이미 있는 경우 이를 Go 및 Python 과 같은 다른 런타임용 기본 제공 구문 분석기와 결합할 수 있습니다. 이렇게 하면 모든 로그가 올바르게 구문 분석되어 올바르게 그룹화된 항목으로 IBM® Cloud Logs 으로 전달됩니다.

쉼표로 구분된 목록에 여러 구문 분석기(기본 제공 및 사용자 지정)를 지정하면 로깅 에이전트 에서 일치하는 구문 분석기를 찾을 때까지 각 구문 분석기를 순서대로 시도합니다.

다음을 사용하여 여러 구문 분석기를 구성합니다 Helm

Helm 를 사용하여 오케스트레이션 환경을 구성하는 경우 multilinePreprocessor 섹션을 업데이트하여 쉼표로 구분된 목록에 기본 제공 파서(예: go, python)와 사용자 지정 파서를 모두 참조하세요.

예를 들어, 다음과 같습니다.

multilinePreprocessor:
  - name: multiline
    multiline.parser: go, python, nodejs, ruby, multiline-java-example, multiline-nodejs-winston
    multiline.key_content: log

이전 버전의 로깅 에이전트 을 설치하고 클러스터에서 직접 구성 맵을 수정하여 상담원 구성을 업데이트한 경우에는 helm upgrade 명령을 실행하기 전에 클러스터에서 구성 맵의 복사본을 만드세요. 로깅 에이전트 이 업데이트되면 구성 맵의 모든 변경 사항을 덮어씁니다.

values.yaml 파일을 업데이트한 후 helm upgrade 을 실행하여 변경 사항을 적용합니다. IBM Cloud Logs 에서 여러 런타임의 로그를 확인하여 모든 구성에서 멀티라인 그룹화가 작동하는지 확인하여 구성을 검증하세요.

자세한 정보 및 예시

멀티라인 처리 구성에 대한 자세한 내용과 예제 시나리오가 포함된 튜토리얼은 다음 주제를 참조하세요.

로깅 에이전트 멀티라인 처리를 위한 추가 리소스
정보 다음을 참조하십시오.
로깅 에이전트 에서 멀티라인 지원 구성하기 Linux 주제
Windows에서 로깅 에이전트 에 대한 여러 줄 지원 구성하기 주제
다음을 사용하여 Java 애플리케이션을 위한 다중 줄 구문 분석 Log4j Tutorial
Java 애플리케이션에 대해 Helm 사용하여 다중 줄 구문 분석 Log4j Tutorial
Winston을 사용하는 Node.js 애플리케이션의 다중 줄 구문 분석 Tutorial
Winston을 사용하는 Node.js 애플리케이션에 대해 Helm 을 사용한 다중 줄 구문 분석 Tutorial