DataKit 로그 처리 개요
이 문서는 DataKit이 로그를 처리하는 방법을 소개하는 데 사용됩니다. 다른 문서에서는 DataKit이 로그를 수집하는 방법을 소개했습니다. 이 두 문서는 함께 읽을 수 있습니다. 우리는 모든 사람이 전체 로그 처리에 대해 보다 포괄적으로 이해할 수 있기를 바랍니다.
핵심 질문:
- 로그 수집 구성이 왜 그렇게 복잡합니까?
- 로그 데이터 처리 방법
로그 수집 설정이 복잡한 이유¶
이 문서를 보면 로그 소스가 다양하기 때문에 로그 구성 방법도 다양하다는 사실을 알 수 있습니다. 모든 사람의 이해를 돕기 위해 여기서는 이를 정리할 필요가 있습니다.
로그 수집 프로세스 중에 DataKit에는 활성 및 수동이라는 두 가지 주요 수집 방법이 있습니다.
-
활성 컬렉션
-
수동적 수집
이러한 다양한 형태의 로그 수집 방법 중에서 모두 동일한 핵심 문제인 DataKit은 이 로그를 사용하여 다음으로 무엇을 합니까?를 해결해야 합니다.
이 핵심 문제는 다음과 같은 하위 문제로 분류될 수 있습니다.
source가 무엇인지 확인: 이후의 모든 로그 처리는 이 필드에 따라 달라집니다. (추가service필드가 있지만 지정하지 않으면 해당 값이 source 값과 동일하게 설정됩니다.)- Pipeline 구성 방법: 구성이 필수는 아니지만 널리 사용됩니다.
- 추가 태그 구성: 반드시 구성할 필요는 없으나, 가끔 특수한 기능을 가지고 있는 경우가 있습니다.
- 여러 줄의 로그를 분할하는 방법: 대상 로그가 각 로그를 분할하는 방법을 DataKit에 알려야 합니다. (DataKit은 기본적으로 공백이 아닌 문자로 시작하는 각 줄에 대한 새 로그를 지정합니다.)
- 특별한 무시 전략이 있습니까? DataKit에서 수집한 모든 데이터를 처리할 필요는 없습니다. 특정 조건이 충족되면 수집하지 않을 수 있습니다. (수집 조건을 만족하더라도)
- 기타 특수 구성: 색상 문자 필터링, 텍스트 인코딩 처리 등
현재 DataKit에 획득된 로그를 처리하는 방법을 알려주는 여러 가지 방법이 있습니다.
- 로그 수집기의 conf 구성
로그 수집기에서 conf를 통해 구성는 수집할 파일(또는 로그 스트림을 읽을 TCP/UDP 포트)을 나열합니다. conf에서 source/Pipeline/다라인 파싱/추가 태그 등 다양한 설정을 구성할 수 있습니다.
데이터가 TCP/UDP 형식으로 DataKit에 전송되면 후속 로그 처리는 login.conf를 통해서만 구성할 수 있습니다. TCP/UDP 프로토콜은 추가 설명 정보를 첨부하는 데 편리하지 않고 단순한 로그 스트림 데이터 전송만 담당하기 때문입니다.
이러한 형태의 로그 수집이 가장 이해하기 쉽습니다.
- 컨테이너 수집가의 conf 구성
현재 컨테이너 수집기 conf는 로그에 대한 가장 피상적인 구성(컨테이너/Pod 이미지 이름 기반)만 수행할 수 있으며 로그의 후속 처리(예: Pipeline/source 설정 등)는 여기에서 구성할 수 없습니다. 왜냐하면 이 구성은 현재 호스트의 모든 로그 컬렉션을 목표로 하고 컨테이너 환경에서는 호스트에 다양한 로그가 있으며 여기에서 하나씩 구성할 수 없기 때문입니다.
- 요청 시 DataKit에 로그 처리 구성 방법을 알려줌
HTTP를 통해 DataKit의 Log Streaming 서비스를 요청하고 요청에 다양한 요청 매개변수를 가져와 DataKit에 수신된 로그 데이터를 처리하는 방법을 알려줍니다.
- 수집된 객체(예: 컨테이너/Pod)에 특정 주석을 작성하여 생성된 로그를 처리하는 방법을 DataKit에 알려줍니다.
앞서 언급했듯이 단순히 컨테이너 수집기 conf에서 로그 수집을 구성하는 것은 세분화가 너무 거칠고 세부 구성에 도움이 되지 않기 때문입니다. 하지만 컨테이너/Pod 라벨 지정에 설정할 수 있으며 DataKit은 주도적으로 이러한 주석을 찾아보세요.가 되며, 그러면 각 컨테이너/Pod 로그를 처리하는 방법을 알게 됩니다.
설정 우선순위¶
일반적인 상황에서는 컨테이너/Pod의 주석이 가장 높은 우선순위를 가지며 conf/Env의 설정을 재정의합니다. 둘째, Env는 중간 우선순위를 가지며 conf의 구성을 덮어씁니다. conf의 구성은 우선순위가 가장 낮으며 언제든지 Env 또는 주석의 설정으로 해당 구성을 덮어쓸 수 있습니다.
현재 로그 수집/처리와 직접적으로 관련된 Env는 없으며, 향후 관련 환경변수가 추가될 수 있습니다.
예를 들어, Container.conf에서 'my_test'라는 이미지를 로그 수집에서 제외한다고 가정합니다.
현재 DataKit은 이미지 이름과 일치하는 모든 컨테이너 또는 포드를 수집하지 않습니다. 그러나 해당 주석이 해당 포드에 표시된 경우:
apiVersion: apps/v1
kind: Pod
metadata:
name: test-app
annotations:
datakit/logs: | # <----------
[
{
"source": "my-testing-app",
"pipeline": "test.p",
}
]
spec:
containers:
- name : mytest
image: my_test:1.2.3
컨테이너.conf에서 와일드카드 my_test.*가 있는 모든 이미지를 제외하더라도 포드에는 특정 레이블(datakit/logs)이 있으므로 DataKit은 계속해서 포드의 로그를 수집하고 Pipeline과 같은 많은 설정을 구성할 수 있습니다.
로그 데이터 처리 방법¶
DataKit에서 로그는 현재 다음 처리 단계를 거칩니다(처리 순서대로 나열).
- 수집단계
외부에서 로그를 읽어(수신) 받은 후, 수집단계에서 기본적인 처리를 진행합니다. 이러한 프로세스에는 로그 분할(큰 텍스트 섹션을 여러 개의 독립적인 기본 로그로 나누기), 인코딩 및 디코딩(UTF8 인코딩으로 통합 변환), 일부 간섭하는 색상 문자 제거 등이 포함됩니다.
- 개별 로그 파싱
해당 로그가 Pipeline 파싱으로 구성된 경우 각 로그(단일 및 다중 행 로그 포함)는 Pipeline으로 파싱됩니다. Pipeline은 주로 두 단계로 나뉩니다.
- Grok/JSON 파싱: Grok/JSON을 통해 단일 원시 로그를 구조화된 데이터로 파싱합니다.
-
블랙리스트(필터)
필터는 필터의 집합입니다.는 구조화된 데이터 세트를 수신하고 특정 논리적 판단을 통해 데이터 폐기 여부를 결정합니다. 필터는 센터에서 발행한 논리적 운영 규칙 세트입니다(DataKit에서 적극적으로 가져옴). 그 형태는 대략 다음과 같습니다.
센터에서 로그 블랙리스트를 구성하는 경우, 잘라낸 로그 100개 중 10개가 여기 조건을 충족한다고 가정하면(즉, source는 datakit이고 bar 필드의 값이 후속 목록에 나타납니다) 이 10개의 로그는 Guance에 보고되지 않고 자동으로 삭제됩니다. 폐기 통계는 DataKit Monitor에서 볼 수 있습니다.
- 보고서 Guance
위의 단계를 거쳐 최종적으로 로그 데이터가 Guance로 보고되고, 로그 보기 페이지에서 로그 데이터를 확인할 수 있습니다.
일반적인 상황에서는 로그가 생성된 후, 수집이 성공한 경우 해당 페이지에서 데이터를 볼 수 있을 때까지 약 30초 정도의 지연이 발생합니다. 이 기간 동안 DataKit 자체 데이터는 최대 10초에 한 번만 보고되며, 센터에서도 최종적으로 데이터베이스에 저장되기까지 일련의 과정을 거쳐야 합니다.