오케스트레이션 환경에서 로깅 에이전트 에 대한 멀티라인 로그 지원
오류 및 스택 추적은 여러 줄에 걸쳐서 발생할 수 있으며 각 줄은 별도의 로그 항목으로 전송됩니다. 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 과 같이 오류 및 스택 추적이 여러 줄에 걸쳐 있고 각 줄이 별도의 로그 항목으로 전송되는 애플리케이션이 있는 경우 로깅 에이전트 에서 멀티라인 구문 분석기를 구성해야 합니다.
다음 옵션 중 하나를 선택하여 멀티라인 구문 분석기로 로깅 에이전트 을 구성합니다:
-
Helm 차트를 사용하여 에이전트를 배포하는 데 사용하는
logs-values.yaml파일에 새 값enableMultiline을 추가하여 로깅 에이전트 을 배포합니다. 자세한 내용은 로깅 에이전트 에 대한 Helm 차트 값 파일 구성하기 또는 Helm 에 대한 로깅 에이전트 차트 값 파일 구성하기를 참조하세요. -
로깅 에이전트 을 버전 1.4.1 이상으로 업데이트합니다. 멀티라인 지원을 사용 설정하려면 Helm 차트
logs-values.yaml파일을 상담원 버전으로 업데이트하고enableMultiline을true으로 설정해야 합니다. 자세한 내용은 로깅 에이전트에 대한 Helm 차트 값 파일 업데이트를 참조하세요.
사용자 지정 여러 줄 구문 분석기 추가하기
로깅 에이전트 에서 사용할 사용자 정의 멀티라인 구문 분석기를 만들려면 구성 가능한 멀티라인 구 문 분석기 의 지침을 따르세요. 사용자 지정 정규식을 정의하여 여러 줄 패턴을 결정합니다.
로깅 에이전트 구성은 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 와 같은 앱이 있는 경우 에이전트 구성을 업데이트하고 멀티라인 구문 분석기를 구성할 수 있습니다.
로깅 에이전트 에서 여러 줄 지원을 추가하려면 다음 단계를 완료하세요:
-
클러스터에 로그인하십시오. 자세한 내용은 클러스터에 액세스하기를 참조하세요.
-
로깅 에이전트 구성 맵(
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" ... -
상담원 포드를 다시 시작합니다.
Kubernetes 클러스터의 경우 실행합니다:
kubectl -n ibm-observe rollout restart ds/logs-agentOpenShift 클러스터의 경우 실행합니다:
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 |