릴리스 노트
제품 릴리스 기록
clsDetail:## 로그 테마가 자동으로 생성되면 로그셋과 토픽의 name을 동시에 지정해야 합니다.logsetName: test ## CLS 로그셋 name입니다. name에 대한 로그셋이 없으면 자동으로 생성됩니다. 로그셋이 있으면 그 아래에 로그 테마가 생성됩니다.topicName: test ## CLS 로그 테마 name입니다. 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_loglogFormat: xxx ## 로그 형식화 방법period: 30 ## 라이프사이클, 일 단위이며, 1~3600 사이의 값을 가질 수 있습니다. 값이 3640이면 영구 보관을 나타냅니다.partitionCount: ## Integer 유형. 로그 테마의 파티션 수입니다. 기본값은 1이며, 최대 10개의 파티션을 생성할 수 있습니다.tags: ## 태그 설명 목록. 이 매개변수는 태그를 로그 주제에 바인딩하는 데 사용됩니다. 최대 9개의 태그 키-값 쌍이 지원되며 리소스는 하나의 태그 키에만 바인딩될 수 있습니다.- key: xxx ## 태그 keyvalue: xxx ## 태그 valueautoSplit: false ## boolean 유형, 자동으로 분할 기능 활성화 여부를 나타냅니다. 기본값은 true입니다.maxSplitPartitions:storageType: hot ## 로그 테마의 스토리지 유형, hot(표준 저장)와 cold(저주파 저장) 중에서 선택할 수 있습니다. 기본값은 hot입니다.excludePaths: ## 블록리스트 경로 목록 수집- type: File ## 유형, 선택 사항: File 또는 Pathvalue: /xx/xx/xx/xx.log ## type에 해당하는 값indexs: ## topic 생성 시 인덱스 방법 및 필드를 사용자 정의할 수 있습니다- indexName: ## 필드에 대해 키 값 또는 메타 필드 인덱스를 구성해야 할 때, 메타 필드 Key는 __TAG__.로 접두사를 추가할 필요가 없으며 로그를 업로드할 때와 일치하면 됩니다. 콘솔에서 표시할 때 __TAG__.가 자동으로 접두사로 추가됩니다.indexType: ## 필드 유형, 현재 지원되는 유형: long, text, doubletokenizer: ## 필드 구분자. 각 문자는 구분 기호를 나타냅니다. 영문 기호 및 \\n\\t\\r만 지원됩니다. long 및 double 필드의 경우 비워 둡니다. text 필드의 경우 @&?|#()='",;:<>[]{}/ \\n\\t\\r\\를 구분 기호로 사용하는 것이 좋습니다.sqlFlag: ## 필드에 대한 분석 기능 활성화 여부(boolean)containZH: ## 한자 포함 여부(boolean)region: ap-xxx ## 리전 간 배송에 대한 topic 리전userDefineRule: xxxxxx ## 직렬화된 Json 문자열인 사용자 정의 수집 규칙extractRule: {} ## 추출 및 필터 규칙. ExtractRule이 설정되면 LogType도 설정해야 합니다
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를 입력하면 enviroment key의 production 또는 qa value를 가진 pod가 제외됩니다. 여러 value를 쉼표로 구분합니다. 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도 지정하면 교차에 있는 pod가 일치합니다.metadataLabels: ## 메타데이터로 수집할 pod label을 지정합니다. 이 필드를 지정하지 않으면 모든 pod label이 메타데이터로 수집됩니다.- label1customLabels: ## 사용자 정의 metadatalabel: l1workloads:- 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: ## 사용자 정의 metadatakey: valueexcludeLabels: ## 지정된 label이 있는 Pod가 제외됩니다. workload가 지정된 경우 이 필드를 지정할 수 없습니다.key2: value2 ## 동일한 key의 여러 value를 가진 pod를 매칭할 수 있습니다. 예를 들어 enviroment = production,qa를 입력하면 enviroment key의 production 또는 qa value를 가진 pod가 제외됩니다. 여러 value를 쉼표로 구분합니다. includeLabels도 지정하면 교차에 있는 pod가 일치합니다.includeLabels: ## 지정된 label이 있는 Pod가 수집됩니다. workload가 지정된 경우 이 필드를 지정할 수 없습니다.key: value1 ## metadata는 수집 규칙에 따라 수집된 로그에 담겨 소비자에게 보고됩니다. 동일한 key의 여러 value가 있는 pod를 일치시킬 수 있습니다. 예를 들어 enviroment = production,qa를 입력하면 enviroment key의 production 또는 qa value가 있는 pod가 일치합니다. 여러 value를 쉼표로 구분합니다. excludeLabels도 지정하면 교차에 있는 pod가 일치합니다.metadataLabels: ## 메타데이터로 수집할 pod label을 지정합니다. 이 필드를 지정하지 않으면 모든 pod label이 메타데이터로 수집됩니다.- label1 ## pod labelworkload:container: xxx ## 수집할 컨테이너의 이름. 이 매개변수를 지정하지 않으면 workload Pod의 모든 컨테이너가 수집됨을 나타냅니다.name: sample-app ## workload 이름
\\n을 줄 바꿈으로 사용하여 로그를 종료합니다. 더 쉬운 구조 관리를 위해 각 로그에는 기본 키 값 __CONTENT__가 제공됩니다. 그러나 로그 데이터 자체는 더 이상 구조화되지 않으며 로그 필드는 추출되지 않습니다. 시간 로그 속성은 로그가 수집되는 시간에 따라 다릅니다. 자세한 내용은 단일 행 전체 텍스트를 참고하십시오.Tue Jan 22 12:08:15 CST 2019 Installed: libjpeg-turbo-static-1.2.90-6.el7.x86_64
apiVersion: cls.cloud.tencent.com/v1kind: LogConfigspec:clsDetail:topicId: xxxxxx-xx-xx-xx-xxxxxxxx# 단일 행 로그logType: minimalist_log
__CONTENT__:Tue Jan 22 12:08:15 CST 2019 Installed: libjpeg-turbo-static-1.2.90-6.el7.x86_64
\\n은 로그의 끝 표시로 사용할 수 없습니다. CLS 시스템에서 로그를 구별할 수 있도록 첫 행 정규 표현식이 일치에 사용됩니다. 행의 로그가 미리 설정된 정규 표현식과 일치하면 로그의 시작으로 간주되며 일치하는 다음 행은 로그의 끝 표시가 됩니다. 이 형식에서는 기본 키 값 __CONTENT__도 설정됩니다. 그러나 로그 데이터 자체는 더 이상 구조화되지 않으며 로그 필드는 추출되지 않습니다. 시간 로그 속성은 로그가 수집되는 시간에 따라 다릅니다. 자세한 내용은 다중 행의 전체 텍스트를 참고하십시오.2019-12-15 17:13:06,043 [main] ERROR com.test.logging.FooFactory:java.lang.NullPointerExceptionat com.test.logging.FooFactory.createFoo(FooFactory.java:15)at com.test.logging.FooFactoryTest.test(FooFactoryTest.java:11)
apiVersion: cls.cloud.tencent.com/v1kind: LogConfigspec:clsDetail:topicId: xxxxxx-xx-xx-xx-xxxxxxxx#다중 행 로그logType: multiline_logextractRule:#날짜 시간으로 시작하는 행만 새 로그의 시작으로 간주됩니다. 그렇지 않으면 현재 로그 끝에 줄 바꿈 \\n을 추가합니다.beginningRegex: \\d{4}-\\d{2}-\\d{2}\\s\\d{2}:\\d{2}:\\d{2},\\d{3}\\s.+
\\_\\_CONTENT__:2019-12-15 17:13:06,043 [main] ERROR com.test.logging.FooFactory:\\njava.lang.NullPointerException\\n at com.test.logging.FooFactory.createFoo(FooFactory.java:15)\\n at com.test.logging.FooFactoryTest.test(FooFactoryTest.java:11)
10.135.46.111 - - [22/Jan/2019:19:19:30 +0800] "GET /my/course/1 HTTP/1.1" 127.0.0.1 200 782 9703 "http://127.0.0.1/course/explore?filter%5Btype%5D=all&filter%5Bprice%5D=all&filter%5BcurrentLevelId%5D=all&orderBy=studentNum" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:64.0) Gecko/20100101 Firefox/64.0" 0.354 0.354
apiVersion: cls.cloud.tencent.com/v1kind: LogConfigspec:clsDetail:topicId: xxxxxx-xx-xx-xx-xxxxxxxx# 완전한 정규식logType: fullregex_logextractRule:# () 캡처 그룹을 기준으로 해당 value를 추출하는 정규 표현식logRegex: (\\S+)[^\\[]+(\\[[^:]+:\\d+:\\d+:\\d+\\s\\S+)\\s"(\\w+)\\s(\\S+)\\s([^"]+)"\\s(\\S+)\\s(\\d+)\\s(\\d+)\\s(\\d+)\\s"([^"]+)"\\s"([^"]+)"\\s+(\\S+)\\s(\\S+).*beginningRegex: (\\S+)[^\\[]+(\\[[^:]+:\\d+:\\d+:\\d+\\s\\S+)\\s"(\\w+)\\s(\\S+)\\s([^"]+)"\\s(\\S+)\\s(\\d+)\\s(\\d+)\\s(\\d+)\\s"([^"]+)"\\s"([^"]+)"\\s+(\\S+)\\s(\\S+).*# 추출된 value와 일대일 대응하는 추출된 key 목록keys: ['remote_addr','time_local','request_method','request_url','http_protocol','http_host','status','request_length','body_bytes_sent','http_referer','http_user_agent','request_time','upstream_response_time']
body_bytes_sent: 9703http_host: 127.0.0.1http_protocol: HTTP/1.1http_referer: http://127.0.0.1/course/explore?filter%5Btype%5D=all&filter%5Bprice%5D=all&filter%5BcurrentLevelId%5D=all&orderBy=studentNumhttp_user_agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:64.0) Gecko/20100101 Firefox/64.0remote_addr: 10.135.46.111request_length: 782request_method: GETrequest_time: 0.354request_url: /my/course/1status: 200time_local: [22/Jan/2019:19:19:30 +0800]upstream_response_time: 0.354
[2018-10-01T10:30:01,000] [INFO] java.lang.Exception: exception happenedat TestPrintStackTrace.f(TestPrintStackTrace.java:3)at TestPrintStackTrace.g(TestPrintStackTrace.java:7)at TestPrintStackTrace.main(TestPrintStackTrace.java:16)
apiVersion: cls.cloud.tencent.com/v1kind: LogConfigspec:clsDetail:topicId: xxxxxx-xx-xx-xx-xxxxxxxx#다중 행-전체 정규식logType: multiline_fullregex_logextractRule:#첫 행 전체 정규 표현식: 날짜 시간으로 시작하는 행만 새 로그의 시작으로 간주됩니다. 그렇지 않으면 현재 로그 끝에 줄 바꿈 \\n을 추가합니다.beginningRegex: \\[\\d+-\\d+-\\w+:\\d+:\\d+,\\d+\\]\\s\\[\\w+\\]\\s.*#() 캡처 그룹을 기준으로 해당 value를 추출하는 정규 표현식logRegex: \\[(\\d+-\\d+-\\w+:\\d+:\\d+,\\d+)\\]\\s\\[(\\w+)\\]\\s(.*)# 추출된 value와 일대일 대응하는 추출된 key 목록keys:- time- level- msg
time: 2018-10-01T10:30:01,000`level: INFO`msg:java.lang.Exception: exception happenedat TestPrintStackTrace.f(TestPrintStackTrace.java:3)at TestPrintStackTrace.g(TestPrintStackTrace.java:7)at TestPrintStackTrace.main(TestPrintStackTrace.java:16)
\\n으로 끝납니다. 자세한 내용은 JSON 형식을 참고하십시오.{"remote_ip":"10.135.46.111","time_local":"22/Jan/2019:19:19:34 +0800","body_sent":23,"responsetime":0.232,"upstreamtime":"0.232","upstreamhost":"unix:/tmp/php-cgi.sock","http_host":"127.0.0.1","method":"POST","url":"/event/dispatch","request":"POST /event/dispatch HTTP/1.1","xff":"-","referer":"http://127.0.0.1/my/course/4","agent":"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:64.0) Gecko/20100101 Firefox/64.0","response_code":"200"}
apiVersion: cls.cloud.tencent.com/v1kind: LogConfigspec:clsDetail:topicId: xxxxxx-xx-xx-xx-xxxxxxxx# JSON 형식 로그logType: json_log
agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:64.0) Gecko/20100101 Firefox/64.0body_sent: 23http_host: 127.0.0.1method: POSTreferer: http://127.0.0.1/my/course/4remote_ip: 10.135.46.111request: POST /event/dispatch HTTP/1.1response_code: 200responsetime: 0.232time_local: 22/Jan/2019:19:19:34 +0800upstreamhost: unix:/tmp/php-cgi.sockupstreamtime: 0.232url: /event/dispatchxff: -
\\n으로 끝납니다. CLS에서 세퍼레이터 로그를 처리할 때 개별 필드마다 고유 key를 정의해야 합니다. 자세한 내용은 세퍼레이터 형식을 참고하십시오.10.20.20.10 ::: [Tue Jan 22 14:49:45 CST 2019 +0800] ::: GET /online/sample HTTP/1.1 ::: 127.0.0.1 ::: 200 ::: 647 ::: 35 ::: http://127.0.0.1/
apiVersion: cls.cloud.tencent.com/v1kind: LogConfigspec:clsDetail:topicId: xxxxxx-xx-xx-xx-xxxxxxxx#세퍼레이터 로그logType: delimiter_logextractRule:#세퍼레이터delimiter: ':::'#분리된 필드에 일대일로 대응되는 추출된 key 목록keys: ['IP','time','request','host','status','length','bytes','referer']
IP: 10.20.20.10bytes: 35host: 127.0.0.1length: 647referer: http://127.0.0.1/request: GET /online/sample HTTP/1.1status: 200time: [Tue Jan 22 14:49:45 CST 2019 +0800]
apiVersion: cls.cloud.tencent.com/v1kind: LogConfigspec:inputDetail:type: container_stdoutcontainerStdout:namespace: defaultallContainers: true...
apiVersion: cls.cloud.tencent.com/v1kind: LogConfigspec:inputDetail:type: container_stdoutcontainerStdout:allContainers: falseworkloads:- namespace: productionname: ingress-gatewaykind: deployment...
apiVersion: cls.cloud.tencent.com/v1kind: LogConfigspec:inputDetail:type: container_stdoutcontainerStdout:namespace: productionallContainers: falseincludeLabels:k8s-app: nginx...
/data/nginx/log/ 경로에서 access.log 파일 수집apiVersion: cls.cloud.tencent.com/v1kind: LogConfigspec:topicId: xxxxxx-xx-xx-xx-xxxxxxxxinputDetail:type: container_filecontainerFile:namespace: productionworkload:name: ingress-gatewaytype: deploymentcontainer: nginxlogPath: /data/nginx/logfilePattern: access.log...
/data/nginx/log/ 경로에서 access.log 파일 수집apiVersion: cls.cloud.tencent.com/v1kind: LogConfigspec:inputDetail:type: container_filecontainerFile:namespace: productionincludeLabels:k8s-app: ingress-gatewaycontainer: nginxlogPath: /data/nginx/logfilePattern: access.log...
필드 이름 | 의미 |
cluster_id | 로그가 속한 클러스터의 ID. |
container_name | 로그가 속한 컨테이너의 이름. |
image_name | 로그가 속한 컨테이너의 이미지 이름 IP. |
namespace | 로그가 속한 pod의 namespace. |
pod_uid | 로그가 속한 pod의 UID. |
pod_name | 로그가 속한 pod의 이름. |
pod_ip | 로그가 속한 pod의 IP. |
pod_lable_{label name} | 로그가 속한 pod의 label(예를 들어 pod에 label: app=nginx, env=prod라는 두 개의 레이블이 있는 경우 보고된 로그에는 두 개의 메타데이터 항목 metedata: pod_label_app:nginx, pod_label_env:prod이 첨부됩니다). |
피드백