tencent cloud

Tencent Kubernetes Engine

문서Tencent Kubernetes Engine

CRD를 사용하여 로그 수집 구성

다운로드
포커스 모드
폰트 크기
마지막 업데이트 시간: 2023-04-26 16:53:29

작업 시나리오

콘솔을 사용하여 로그 수집을 구성하거나 CRD(CustomResourceDefinitions) 방식으로 로그 수집을 구성할 수 있습니다. CRD는 다양한 형식의 컨테이너 표준 출력, 컨테이너 파일 및 호스트 파일 수집을 지원하고 이를 CLS, CKafka 또는 기타 소비자에게 전달합니다.

전제 조건

TKE 콘솔의 Ops 기능 관리에서 로그 수집을 활성화해야 합니다.

CRD 개요

구조 개요

apiVersion: cls.cloud.tencent.com/v1
kind: LogConfig ## 기본값
metadata:
name: test## 클러스터에서 고유한 CRD 리소스 이름
spec:
clsDetail:## CLS로 전달하기 위한 구성
...
inputDetail: ## 데이터 소스 수집 구성
...
kafkaDetail:## cKafka 또는 자체 구축 kafka 클러스터로 전달하기 위한 구성
...
status:## CRD 리소스 상태
status: ""
code: ""## 호출된 API에서 반환된 오류 코드
reason: ""## 오류 원인

clsDetail 설명

참고
지정된 topic은 수정할 수 없습니다.
clsDetail:
## 로그 토픽은 자동으로 생성되며 로그셋과 토픽 name을 모두 지정해야 합니다
logsetName: test ## CLS 로그셋의 name입니다. 이 name의 로그셋이 없으면 자동으로 생성됩니다. 이러한 로그셋이 있으면 그 아래에 로그 토픽이 생성됩니다
topicName: test ## CLS 로그 토픽의 name입니다. 이 이름을 가진 로그 토픽이 없으면 자동으로 생성됩니다.

# 기존 로그셋 및 로그 토픽을 선택합니다. 로그셋이 지정되었지만 로그 토픽이 지정되지 않은 경우 로그 토픽이 자동으로 생성됩니다.
logsetId: xxxxxx-xx-xx-xx-xxxxxxxx ## CLS 로그셋의 ID입니다. 로그셋은 CLS에서 미리 생성해야 합니다.
topicId: xxxxxx-xx-xx-xx-xxxxxxxx ## CLS 로그 토픽의 ID입니다. 로그 토픽은 CLS에서 미리 생성해야 하며 다른 컬렉션 구성에서 점유하지 않아야 합니다.

logType: json_log ## 로그 수집 형식. 유효한 값: json_log(json). delimiter_log(구분됨), minimalist_log(한 줄의 전체 텍스트), multiline_log(여러 줄의 전체 텍스트), fullregex_log(전체 정규 표현식). 기본값: minimalist_log
logFormat: xxx ## 로그 형식 메소드
period: 30 ## 라이프사이클(일). 값 범위: 1–3600. 3640은 영구 저장소를 나타냅니다
partitionCount: ## 로그 토픽 파티션의 수(Integer)입니다. 기본값: 1. 최대값: 10.
tags: ## 태그 설명 목록입니다. 이 매개변수는 태그를 로그 토픽에 바인딩하는 데 사용됩니다. 최대 9개의 태그 키-값 쌍이 지원되며 리소스는 하나의 태그 키에만 바인딩될 수 있습니다.
- key: xxx ## 태그 key
value: xxx ## 태그 value
autoSplit: false## 자동 분할 활성화 여부(boolean 유형). 기본값: true
maxSplitPartitions:
storageType: hot ## 로그 토픽 스토리지 클래스. 유효한 값: hot(STANDARD), cold(STANDARD_IA). 기본값: hot.
excludePaths: ## 수집 경로 블록리스트
- type: File ## 유형. 유효한 값: File 또는 Path
value: /xx/xx/xx/xx.log ## type의 값
indexs: ## topic을 생성할 때 인덱싱 방법과 필드를 사용자 정의할 수 있습니다
- indexName: ## 키 값 또는 메타 필드 인덱스를 구성할 필드입니다. Tencent Cloud 콘솔에 표시하기 위해 __TAG__. 접두사가 자동으로 추가되므로 메타 필드의 Key에 __TAG__. 접두사를 추가할 필요가 없으며 로그를 업로드할 때 해당 필드의 접두사를 사용할 수 있습니다.
indexType: ## 필드 유형. 유효한 값: long, text, double
tokenizer: ## 필드 구분자. 각 문자는 구분 기호를 나타냅니다; 영어 기호와 \\n\\t\\r만 지원됩니다; long 및 double 필드의 경우 비워 둡니다; text 필드의 경우 @&?|#()='",;:<>[]{}/ \\n\\t\\r\\를 구분 기호로 사용하는 것이 좋습니다;
sqlFlag: ## 필드에 대한 분석 기능 활성화 여부(boolean)
containZH: ## 중국어 포함 여부(boolean)
region: ap-xxx ## 리전 간 전달에 사용되는 topic 리전
userDefineRule: xxxxxx ## 직렬화된 Json 문자열인 사용자 지정 수집 규칙
extractRule: {} ## 추출 및 필터 규칙. ExtractRule이 설정되면 LogType도 설정해야 합니다.

inputDetail 설명

inputDetail:
type: container_stdout ## container_stdout(컨테이너 표준 출력), container_file(컨테이너 파일), host_file(호스트 파일)을 포함한 로그 수집 유형

containerStdout: ## 컨테이너 표준 출력
namespace: default ## 수집할 컨테이너의 kubernetes 네임스페이스입니다. 여러 네임스페이스는 ","(쉼표)로 구분합니다(예: default,namespace). 이 필드를 지정하지 않으면 모든 네임스페이스를 나타냅니다. excludeNamespace가 지정된 경우 이 필드를 지정할 수 없습니다.
excludeNamespace: nm1,nm2 ## 제외할 컨테이너의 kubernetes 네임스페이스입니다. 여러 네임스페이스를 ","(쉼표)로 구분합니다(예: nm1,nm2). 이 필드를 지정하지 않으면 모든 네임스페이스를 나타냅니다. namespace가 지정된 경우 이 필드를 지정할 수 없습니다.
nsLabelSelector: environment in (production),tier in (frontend) ## 네임스페이스 label로 namespace 필터링
allContainers: false ## 지정된 네임스페이스에 있는 모든 컨테이너의 표준 출력 수집 여부입니다. allContainers=true인 경우 workloa, includeLabels 및 excludeLabels를 동시에 지정할 수 없습니다.
container: xxx ## 수집할 컨테이너의 이름입니다. 이 필드가 비어 있으면 수집할 모든 컨테이너의 이름을 나타냅니다.
excludeLabels: ## 지정된 label이 있는 Pod가 제외됩니다. workload, namespace 및 excludeNamespace가 지정된 경우 이 필드를 지정할 수 없습니다.
key2: value2 ## 동일한 key의 여러 value를 가진 pod를 매칭할 수 있습니다. 예를 들어 enviroment = production,qa를 입력하면 environment key의 production 또는 qa value를 가진 pod가 제외됩니다. 여러 value를 쉼표로 구분합니다. includeLabels도 지정하면 includeLabels와 교차하는 pod와 매칭됩니다.

includeLabels: ## 지정된 label이 있는 Pod가 수집됩니다. workload, namespace 및 excludeNamespace가 지정된 경우 이 필드를 지정할 수 없습니다.
key: value1 ## metadata는 수집 규칙에 따라 수집된 로그에 담겨 소비자에게 리포트됩니다. 동일한 key의 여러 value가 있는 pod를 매칭할 수 있습니다. 예를 들어 enviroment = production,qa를 입력하면 enviroment key의 production 또는 qa value가 있는 pod가 매칭됩니다. 여러 value를 쉼표로 구분합니다. excludeLabels도 지정하면 includeLabels와 교차하는 pod와 매칭됩니다.

metadataLabels: ## 메타데이터로 수집할 pod label을 지정합니다. 이 필드를 지정하지 않으면 모든 pod label이 메타데이터로 수집됩니다.
- label1
customLabels: ## 사용자 지정 metadata
label: l1

workloads:
- container: xxx ## 수집할 컨테이너의 이름입니다. 이 필드를 지정하지 않으면 workload Pod의 모든 컨테이너가 수집됩니다.
kind: deployment ## workload 유형. 유효한 값: deployment, daemonset, statefulset, job, cronjob
name: sample-app ## workload 이름
namespace: prod ## workload 네임스페이스

containerFile: ## 컨테이너 파일
namespace: default ## 수집할 컨테이너의 kubernetes 네임스페이스입니다. 네임스페이스를 지정해야 합니다.
excludeNamespace: nm1,nm2 ## 제외할 컨테이너의 kubernetes 네임스페이스입니다. 여러 네임스페이스를 ","(쉼표)로 구분합니다(예: nm1,nm2). 이 필드를 지정하지 않으면 모든 네임스페이스를 나타냅니다. namespace가 지정된 경우 이 필드를 지정할 수 없습니다.
nsLabelSelector: environment in (production),tier in (frontend) ## 네임스페이스 label로 namespace 필터링
container: xxx ## 수집할 컨테이너의 이름입니다. 이 필드가 비어 있으면 수집할 모든 컨테이너의 이름을 나타냅니다.
logPath: /var/logs ## 로그 폴더. 와일드카드는 지원되지 않습니다.
filePattern: app_*.log ## 로그 파일 이름. 와일드카드 * 및 ?가 지원됩니다. *는 모든 문자 수와 매칭됨을 나타내고 ?는 단일 문자와 매칭됨을 나타냅니다.
customLabels: ## 사용자 지정 metadata
key: value
excludeLabels: ## 지정된 label이 있는 Pod가 제외됩니다. workload가 지정된 경우 이 필드를 지정할 수 없습니다.
key2: value2 ## 동일한 key의 여러 value를 가진 pod를 매칭할 수 있습니다. 예를 들어 enviroment = production,qa를 입력하면 environment key의 production 또는 qa value를 가진 pod가 제외됩니다. 여러 value를 쉼표로 구분합니다. includeLabels도 지정하면 includeLabels와 교차하는 pod와 매칭됩니다.

includeLabels: ## 지정된 label이 있는 Pod가 수집됩니다. workload가 지정된 경우 이 필드를 지정할 수 없습니다.
key: value1 ## metadata는 수집 규칙에 따라 수집된 로그에 담겨 소비자에게 리포트됩니다. 동일한 key의 여러 value가 있는 pod를 매칭할 수 있습니다. 예를 들어 enviroment = production,qa를 입력하면 enviroment key의 production 또는 qa value가 있는 pod가 매칭됩니다. 여러 value를 쉼표로 구분합니다. excludeLabels도 지정하면 includeLabels와 교차하는 pod와 매칭됩니다.
metadataLabels: ## 메타데이터로 수집할 pod label을 지정합니다. 이 필드를 지정하지 않으면 모든 pod label이 메타데이터로 수집됩니다.
- label1 ## pod label
workload:
container: xxx ## 수집할 컨테이너의 이름입니다. 이 필드를 지정하지 않으면 workload Pod의 모든 컨테이너가 수집됩니다.
name: sample-app ## workload 이름

hostFile: ## 노드 파일 경로
filePattern: '*.log' ## 로그 파일 이름. 와일드카드 * 및 ?가 지원됩니다. *는 모든 문자 수와 매칭됨을 나타내고 ?는 단일 문자와 매칭됨을 나타냅니다.
logPath: /tmp/logs ## 로그 폴더. 와일드카드는 지원되지 않습니다.
customLabels: ## 사용자 지정 metadata
label1: v1
extractRule 설명
이름
유형
필수 항목
설명
timeKey
String
No
시간 필드의 key 이름입니다. time_key 및 time_format은 쌍으로 나타나야 합니다.
timeFormat
String
No
시간 필드 형식. 자세한 내용은 C 언어에서 strftime 함수의 시간 형식 설명의 출력 매개변수를 참고하십시오.
delimiter
String
No
log_type이 delimiter_log인 경우에만 유효한 구분된 로그의 구분 기호입니다.
logRegex
String
No
log_type이 fullregex_log인 경우에만 유효한 전체 로그 매칭 규칙입니다.
beginningRegex
String
No
첫 번째 줄 매칭 규칙은 log_type이 multiline_log 또는 fullregex_log인 경우에만 유효합니다.
unMatchUpload
String
No
로그 업로드 여부를 파싱하지 못했습니다. 유효한 값: true(yes), false(no).
unMatchedKey
String
No
일치하지 않는 로그 key입니다.
backtracking
String
No
증분 수집 모드에서 되감기할 데이터의 크기입니다. 유효한 값: -1(전체 수집), 0(증분 수집). 기본값: -1.
keys
Array of String
No
추출된 각 필드의 key 이름입니다. 빈 key는 필드 삭제를 나타냅니다. 이 매개변수는 log_type이 delimiter_log인 경우에만 유효합니다. json_log 로그는 json 자체의 key를 사용합니다.
filterKeys
Array of String
No
필터링할 로그 key로, FilterRegex에 아래 첨자에 해당합니다.
filterRegex
Array of String
No
필터링할 로그 key의 regex로, FilterKeys 아래 첨자에 해당합니다.
isGBK
String
No
Gbk 인코딩 여부. 유효한 값: 0(No), 1(Yes).
참고: 이 필드는 유효한 값을 얻을 수 없음을 나타내는 null을 반환할 수 있습니다.
jsonStandard
String
No
표준 json 여부. 유효한 값: 0(No), 1(Yes).
참고: 이 필드는 유효한 값을 얻을 수 없음을 나타내는 null을 반환할 수 있습니다.

kafkaDetail 설명

kafkaDetail:
brokers: x.x.x.x:p ## (필수) broker 주소입니다. 일반적으로 도메인 이름:포트입니다. 주소가 둘 이상인 경우 쉼표(‘,’)로 구분합니다.
topic: test ##
kafkaType: CKafka ## kafka 유형, 유효한 값: CKafka(ckafka), SelfBuildKafka(자체 구축된 kafka)
instanceId: xxxx ## kafkaType = CKafka일 때, ckafka 인스턴스의 id
logType: minimalist_log ## 구문 분석된 kafka 로그의 유형입니다. 유효한 값: "minimalist_log" 또는 ""(한 줄의 전체 텍스트), "multiline_log"(여러 줄의 전체 텍스트), "json"(json)
timestampFormat: xxx ## 타임스탬프 형식. 기본값: double
timestampKey: xxx ## 타임스탬프 key. 기본값: "@timestamp"
metadata:
formatType: default ## metatdata 형식. 유효한 값: "default"(기본값, eks kafka 수집기와 동일), "filebeat"(filebeat), "fluent-bit"(fluent-bit)
messageKey: ## 로그를 지정된 파티션으로 보낼 Key를 지정합니다. 이 매개변수는 기본적으로 활성화되어 있지 않으며 로그는 임의로 전달됩니다. 활성화되면 동일한 Key를 가진 로그가 동일한 파티션으로 전달됩니다. Pod 필드를 Key로 선택할 수 있습니다. 예를 들어 Pod name을 입력하는 경우 Field>metadata.name을 선택합니다.
value: Field ## topicID(필수 항목)
valueFrom:
fieldRef:
fieldPath: metadata.name ## key가 Field인 경우 metadata.name,metadata.namespace,spec.nodeName,spec.serviceAccountName을 선택할 수 있습니다.

status 설명

status
설명
비어 있는 상태
초기 상태
Synced
컬렉션을 성공적으로 구성했습니다
Stale
컬렉션을 구성하지 못했습니다

CRD 샘플

컨테이너 표준 출력 구성을 위한 CRD 예시

모든 컨테이너
워크로드 지정
명명하다 pod Labels
네임스페이스 지정
apiVersion: cls.cloud.tencent.com/v1
kind: LogConfig
metadata:
name: "test"
spec:
clsDetail:
.......
topicId: xxxxxx-xx-xx-xx-xxxxxxxx
inputDetail:
containerStdout:
allContainers: true
namespace: default,kube-public
type: container_stdout

네임스페이스 제외
apiVersion: cls.cloud.tencent.com/v1
kind: LogConfig
metadata:
name: "test"
spec:
clsDetail:
........
topicId: xxxxxx-xx-xx-xx-xxxxxxxx
inputDetail:
containerStdout:
allContainers: true
excludeNamespace: kube-system,kube-node-lease
type: container_stdout

apiVersion: cls.cloud.tencent.com/v1
kind: LogConfig
metadata:
name: "test"
spec:
clsDetail:
......
topicId: xxxxxx-xx-xx-xx-xxxxxxxx
inputDetail:
containerStdout:
allContainers: false
workloads:
- container: prod
kind: deployment
name: sample-app
namespace: kube-system
type: container_stdout
apiVersion: cls.cloud.tencent.com/v1
kind: LogConfig
metadata:
name: test
spec:
clsDetail:
......
topicId: xxxxxx-xx-xx-xx-xxxxxxxx
inputDetail:
containerStdout:
container: prod
excludeLabels:
key2: v2
includeLabels:
key1: v1
namespace: default,kube-system
type: container_stdout

컨테이너 파일 경로 구성을 위한 CRD 예시

워크로드 지정
명명하다 pod Labels
apiVersion: cls.cloud.tencent.com/v1
kind: LogConfig
metadata:
name: test
spec:
clsDetail:
.......
topicId: xxxx-xx-xx-xx-xxxx
inputDetail:
containerFile:
container: prod
filePattern: '*.log'
logPath: /tmp/logs
namespace: kube-system
workload:
kind: deployment
name: sample-app
type: container_file
apiVersion: cls.cloud.tencent.com/v1
kind: LogConfig
metadata:
name: test
spec:
clsDetail:
.......
topicId: xxxx-xx-xx-xx-xxxx
inputDetail:
containerFile:
container: prod
filePattern: '*.log'
includeLabels:
key1: v1
excludeLabels:
key2: v2
logPath: /tmp/logs
namespace: default,kube-public
type: container_file

노드 파일 경로 구성을 위한 CRD 예시

apiVersion: cls.cloud.tencent.com/v1
kind: LogConfig
metadata:
creationTimestamp: "2022-03-13T12:48:49Z"
generation: 4
name: test
resourceVersion: "11729531"
selfLink: /apis/cls.cloud.tencent.com/v1/logconfigs/test
uid: 233f4b72-cfef-4a43-abb8-e4d033185097
spec:
clsDetail:
.......
topicId: xxxx-xx-xx-xx-xxxx
inputDetail:
hostFile:
customLabels:
testmetadata: v1
filePattern: '*.log'
logPath: /var/logs
type: host_file


도움말 및 지원

문제 해결에 도움이 되었나요?

피드백