tencent cloud

容器服务

LogConfig json 格式说明

Download
Focus Mode
Font Size
Last updated: 2024-12-03 15:12:15

LogConfig CR 字段说明

{
"kind": "cls.cloud.tencent.com/v1",
"apiVersion": "LogConfig",
"metadata": {
"name": "configName" // 采集规则名
},
"spec": {
"inputDetail": {...}, // 日志采集源定义
"clsDetail": {...}, // 采集到CLS的配置
"kafkaDetail": {...} // 采集到 Kafka 的配置
}
}

spec 内容说明

采集规则 spec 部分主要定义了日志的采集源以及日志输出端的配置信息。
注意:
clsDetail 和 kafkaDetail 在同一个采集规则中只能配置一种。
字段
是否必填
说明
inputDetail
是
定义采集源。
clsDetail
否
CLS 采集器配置,该配置信息将由日志组件 cls-provisioner 同步到 CLS 侧。
kafkaDetail
否
Kafka 采集器配置,定义日志采集格式等信息。

inputDetail 说明

{
"type": "host_file",
"containerStdout": {},
"containerFile": {},
"hostFile": {}
}
字段
类型
是否必填
说明
type
String
是
采集类型,取值如下:
container_file:容器内文件采集,该类型对应 containerFile 配置项。
container_stdout:采集容器标准输出。
host_file:采集节点日志,超级节点不支持该配置。
containerStdout
Object
否
容器标准输出采集配置。配置采集容器标准输出时,需指定采集类型为 container_stdout。
containerFile
Object
否
容器内路径采集。配置采集容器标准输出时,需指定采集类型为 container_file。
hostFile
Object
否
节点路径采集。配置采集容器标准输出时,需指定采集类型为 container_file。

containerStdout 对象结构说明

{
"includeLabels": {
"label1": "value1"
},
"excludeLabels": {
"label": "value"
},
"metadataLabels": [
"label1"
],
"metadataContainer": [
"namespace",
"pod_name",
"pod_ip",
"pod_uid",
"container_id",
"container_name",
"image_name",
"cluster_id"
],
"container": "container",
"workloads": [
{
"container": "kubernetes-proxy",
"kind": "deployment",
"name": "kubernetes-proxy",
"namespace": "default"
},
{
"container": "testlog11",
"kind": "deployment",
"name": "testlog1",
"namespace": "default"
}
],
"customLabels": {
"xx": "xx"
}
}
字段
类型
是否必填
说明
includeLabels
Map
否
采集包含指定 label:value 的 pod,不能与 workloads 同时配置。
excludeLabels
Map
否
排除包含指定 label:value 的 pod,不能与 workloads 同时配置。
metadataLabels
Array
否
定义将 pod 的哪些 label 作为元数据上报。不指定则全部上报。
metadataContainer
Array
否
定义将 pod、container 的哪些信息作为元数据上报。不指定则全部上报。
customLabels
Map
否
用户自定义元数据。
container
String
否
指定采集哪些容器的日志。不指定或配置 *,则采集命中 pod 的所有容器的标准输出。不能与 workloads 同时配置。
workloads
Array
否
指定需要采集哪些 workload 的标准输出,同时指定采集的容器名称。
workload 对象说明
字段
类型
是否必填
说明
container
String
否
需要采集的容器名称。不指定,则采集所有容器标准输出。
kind
String
是
workload 类型。
name
String
是
workload 名称。
namespace
String
是
workload 所在 namespace。

containerFile 对象结构说明

{
"logPath": "/var/logs",
"filePattern": "*.log",
"filePaths": [
{
"path": "/var/logs",
"file": "*.log"
}
],
"customLabels": {
"key": "value1"
},
"namespace": "default",
"nsLabelSelector": "",
"excludeNamespace": "xxx,xx",
"includeLabels": {
"label": "value"
},
"excludeLabels": {
"exLabel": "exvalue"
},
"metadataLabels": [
"xx"
],
"metadataContainer": [
"namespace",
"pod_name",
"pod_ip",
"pod_uid",
"container_id",
"container_name",
"image_name",
"cluster_id"
],
"container": "xxx",
"workload": {
"name": "xxx",
"kind": "deployment"
}
}
字段
类型
是否必填
说明
logPath
String
否
采集路径。不可与 filePaths 同时配置。
filePattern
String
否
预期采集文件匹配模式,不可与 filePaths 同时配置。通配符支持 * 和 ?。
filePaths
Array
是
配置预期采集容器内的路径及文件匹配模式,可配置多个采集路径。
includeLabels
Map
否
采集包含指定 label:value 的 pod,不能与 workload 同时配置。
excludeLabels
Map
否
排除包含指定 label:value 的 pod,不能与 workload 同时配置。
metadataLabels
Array
否
定义将 pod 的哪些 label 作为元数据上报。不指定则全部上报。
metadataContainer
Array
否
定义将 pod、container 的哪些信息作为元数据上报。不指定则全部上报。
customLabels
Map
否
用户自定义元数据。
container
String
否
指定采集哪些容器的日志。
workload
Object
否
指定需要采集哪些 workload 的标准输出,同时指定采集的容器名称。
workload 字段说明
字段
类型
是否必填
说明
kind
String
是
workload 类型。
name
String
是
workload 名称。
filePath 对象字段说明
字段
类型
是否必填
说明
path
String
是
预期采集的日志所在路径。
file
String
是
预期采集的日志文件名称匹配模式,通配符支持 * 和 ?。

hostFile 对象结构说明

{
"logPath": "/var/logs",
"filePattern": "*.log",
"filePaths": [
{
"path": "/var/log",
"file": "*.log"
}
],
"customLabels": {
"key": "value"
}
}
字段
类型
是否必填
说明
logPath
String
否
采集路径。不可与 filePaths 同时配置。
filePattern
String
否
预期采集文件匹配模式,不可与 filePaths 同时配置。通配符支持 * 和 ?。
filePaths
Array
否
配置预期采集容器内的路径及文件匹配模式,可配置多个采集路径。
customLabels
Map
否
用户自定义元数据。

clsDetail 对象结构说明

{
"topicId": "",
"topicName": "",
"logsetId": "",
"logsetName": "",
"logFormat": "",
"logType": "",
"hotPeriod": 7,
"period": 30,
"partitionCount": 1,
"tags": [
{
"key": "key",
"value": "value"
}
],
"autoSplit": false,
"maxSplitPartitions": 50,
"storageType": "hot",
"extractRule": {...},
"excludePaths": [
{
"excludeType": "File",
"value": "/var/log/1.log"
},
{
"excludeType": "Path",
"value": "/var/log1/"
}
],
"fullTextIndex": {...},
"indexs": [
{...}
],
"indexStatus": "off",
"region": "ap-xxx",
"advancedConfig": {...}
}
字段名
类型
是否必填
说明
topicId
String
否
日志主题 ID。
topicName
String
否
日志主题名称。当 topicId 为空时,指定日志主题名称,可根据日志主题名称自动拉取日志主题 ID,或者自动创建日志主题。
logsetId
String
否
日志集 ID。
logsetName
String
否
日志集名称。当 logsetId 为空时,指定日志集名称,可根据日志集名称自动拉取日志集 ID,或者自动创建日志集。
region
String
否
日志主题所在 region。默认为集群所在 region。
logType
String
否
日志类型。可选值:json_log(json 格式)、delimiter_log(分隔符提取)、minimalist_log(单行全文格式)、multiline_log(多行全文格式)、fullregex_log(完全正则格式)。默认为 minimalist_log。
logFormat
String
否
日志格式化。
storageType
String
否
日志主题存储类型(仅在自动创建 topic 时生效)。可选值:hot(标准存储)、cold(低频存储)。默认 hot。
hotPeriod
Number
否
日志沉降开关(仅在自动创建 topic 时生效)。0:关闭日志沉降,非 0:开启日志沉降后标准存储的天数。HotPeriod 需要大于等于 7,且小于 Period。仅在 StorageType 为 hot 时生效。
period
Number
否
日志存储周期(单位天)(仅在自动创建 topic 时生效)。标准存储取值范围 1~3600,低频存储取值范围 7~3600 天。取值为 3640 时代表永久保存。默认 30 天。
partitionCount
Number
否
日志主题分区个数(仅在自动创建 topic 时生效)。默认创建 1 个,最大支持创建 10 个分区。
tags
Array
否
标签列表(仅在自动创建 topic 时生效)。
autoSplit
Bool
否
是否开启自动分裂,“false” 或 "true"(仅在自动创建 topic 时生效)。
maxSplitPartitions
Number
否
开启自动分裂后,每个日志主题能够容许的最大分区数,默认为 50 个(仅在自动创建 topic 时生效)。
extractRule
Object
否
采集规则相关配置。
excludePaths
Array
否
采集黑路径配置。
fullTextIndex
Object
否
全文索引配置(仅在自动创建 topic 时生效)。
indexs
Array
否
索引配置(仅在自动创建 topic 时生效)。
indexStatus
String
否
索引状态(仅在自动创建 topic 时生效)。
autoIndex
String
否
是否开启自动索引(仅在自动创建 topic 时生效)。
advancedConfig
Object
否
高级采集配置。

tag 对象结构说明

{
"key": "key",
"value": "value"
}
字段
类型
是否必填
说明
key
String
是
标签名称。
value
String
是
标签值。

extractRule 对象结构说明

{
"timeKey": "xxx",
"timeFormat": "xxx",
"delimiter": "xxx",
"logRegex": "xxx",
"beginningRegex": "xxx",
"keys": [
"xx"
],
"filterKeys": [
"xx"
],
"filterRegex": [
"xx"
],
"unMatchUpload": "true",
"unMatchedKey": "parseFailed",
"backtracking": "-1",
"isGBK": "true",
"jsonStandard": "true",
"advancedFilters": [
{
"key": "level",
"rule": 0,
"value": "info"
}
]
}
字段名
类型
是否必填
说明
timeKey
String
否
时间字段的 key 名字,timeKey 和 timeFormat 必须成对出现。
timeFormat
String
否
时间字段的格式,参考 C 语言的 strftime 函数对于时间的格式说明输出参数。
delimiter
String
否
分隔符类型日志的分隔符,只有 logType 为 delimiter_log 时有效。
logRegex
String
否
整条日志匹配规则,只有 logType 为 fullregex_log 时有效。
beginningRegex
String
否
行首匹配规则,只有 logType 为 multiline_log 或 fullregex_log 时有效。
keys
Array
否
取的每个字段的 key 名字,为空的 key 代表丢弃这个字段,只有 logType 为 delimiter_log 时有效,json_log 的日志使用 json 本身的 key。
filterKeys
Array
否
需要过滤日志的 key,与 filterRegex 按下标进行对应。
filterRegex
Array
否
需要过滤日志的 key 对应的 regex,与 filterKeys 按下标进行对应。
unMatchUpload
String
否
解析失败日志是否上传,true 表示上传,false 表示不上传。
unMatchedKey
String
否
失败日志的 key。
backtracking
String
否
增量采集模式下的回溯数据量,默认 -1(全量采集),0 表示增量。
isGBK
String
否
是否为 GBK 编码。可选值:"false":否;"true":是。注意:此字段可能返回 null,表示取不到有效值。
jsonStandard
String
否
是否为标准 JSON。可选值:"false":否;"true":是。注意:此字段可能返回 null,表示取不到有效值。
advancedFilters
Array
否
高级过滤规则,该字段仅适用于 v1.1.15 及以上的采集组件版本,低于 v1.1.15 请使用 filterKeys 与 filterRegex。

advancedFilters 对象结构说明

{
"key": "level", // 需要过滤的key
"rule": 0, // 过滤规则 0(等于),1(字段存在),2(字段不存在), 3(不等于)
"value": "info" // 需要过滤的值value。 其中当rule为1或2时, value无需指定
}

excludePath 对象结构说明

{
"excludeType": "File",
"value": "/var/log/1.log"
}
字段
类型
是否必填
说明
excludeType
String
是
排除类型。取值 File、Path。
excludeType
String
是
排除的日志路径或者路径。

fullTextIndex 对象结构说明

{
"caseSensitive": false,
"containZH": false,
"status": "on",
"tokenizer": "@&()='\\",;:<>[]{}\\/ \\n\\t\\r"
}
字段名
类型
是否必填
说明
caseSensitive
bool
否
是否大小写敏感。
containZH
bool
否
是否包含中文。
status
String
否
全文索引开关。如果不设置,则会默认打开全文索引;如果设置为 on 打开,不设置其他参数,则 caseSensitive 和 tokenizer 都会是默认值;如果设置为 off 关闭,则不打开全文索引。
tokenizer
String
否
全文索引的分词符。如果全文索引开关打开,则必须设置 tokenizer。可以设置为 @&()='",;:<>[]{}/ \\n\\t\\r,为默认设置。

index 对象结构说明

{
"indexName": "xxx",
"indexType": "text",
"tokenizer": "@&()='\\",;:<>[]{}/ \\n\\t\\r",
"sqlFlag": true,
"containZH": false
}
字段名
类型
是否必填
说明
indexName
String
是
索引名称。
indexType
String
是
索引类型。可选值:long、text、double。
tokenizer
String
否
字段分词符。
sqlFlag
bool
否
字段是否开启分析功能。
containZH
bool
否
是否包含中文。

advancedConfig 对象结构说明

{
"ClsAgentMaxDepth": 1,
"ClsAgentFileTimeout": 60,
"ClsAgentParseFailMerge": false,
}
字段名
类型
是否必填
说明
ClsAgentMaxDepth
Number
否
当前配置采集时下钻的深度。
ClsAgentFileTimeout
Number
否
当前配置在采集文件时,当文件在指定时间未写入日志时,采集器释放文件句柄。
ClsAgentParseFailMerge
bool
否
采集器解析文件失败后是否合并日志上报。

kafkaDetail 对象结构说明

{
"brokers": "127.0.0.1:9092",
"topic": "test_log",
"timestampKey": "@timestamp",
"timestampFormat": "double",
"extractRule": {
"beginningRegex": "xxxx"
},
"logType": "minimalist_log",
"metadata": {
"formatType": "json"
}
}
字段名
类型
是否必填
说明
brokers
String
是
Kafka brokers。
topic
String
是
Kafka topic。
timestampKey
String
否
时间戳的 key,默认 @timestamp。
timestampFormat
String
否
时间戳格式。可选值:double、iso8601。默认 double。
extractRule.beginningRegex
String
否
行首匹配规则。logType 为 multiline_log 时,该项需要配置。
logType
String
否
日志提取模式。默认单行全文。可选值:minimalist_log(单行全文)、multiline_log(多行全文)、json(json 格式)。
metadata.formatType
String
否
元数据格式。可选值:fluent-bit(fluent-bit 原生格式)、fluent-bit-string(字符串类型)。

日志采集源配置示例

容器标准输出

采集 default 命名空间中的所有容器的标准输出:
{
"apiVersion": "cls.cloud.tencent.com/v1",
"kind": "LogConfig",
"metadata": {
"name": "test"
},
"spec": {
"inputDetail": {
"containerStdout": {
"allContainers": true,
"namespace": "default"
},
"type": "container_stdout"
},
...
}
}
采集 production 命名空间中属于 ingress-gateway deployment 的 pod 中的所有容器的标准输出:
{
"apiVersion": "cls.cloud.tencent.com\\/v1",
"kind": "LogConfig",
"spec": {
"inputDetail": {
"containerStdout": {
"allContainers": false,
"workloads": [
{
"kind": "deployment",
"name": "ingress-gateway",
"namespace": "production"
}
]
},
"type": "container_stdout"
},
...
}
}
采集 production 命名空间中 pod 标签中包含 k8s-app=nginx 的 pod 中的所有容器的标准输出:
{
"apiVersion": "cls.cloud.tencent.com\\/v1",
"kind": "LogConfig",
"spec": {
"inputDetail": {
"containerStdout": {
"allContainers": false,
"includeLabels": {
"k8s-app": "nginx"
},
"namespace": "production"
},
"type": "container_stdout"
},
...
}
}
采集 production 命名空间中属于 ingress-gateway 工作负载的 pod 中,名称为 ingress 的容器的标准输出:
{
"apiVersion": "cls.cloud.tencent.com\\/v1",
"kind": "LogConfig",
"spec": {
"inputDetail": {
"containerStdout": {
"allContainers": false,
"includeLabels": {
"k8s-app": "nginx"
},
"namespace": "production"
},
"type": "container_stdout"
},
...
}
}

容器文件采集

采集 production 命名空间中属于 ingress-gateway deployment 的 pod 中的 nginx 容器中 /data/nginx/log/ 路径下名为 access.log 的文件:
{
"apiVersion": "cls.cloud.tencent.com/v1",
"kind": "LogConfig",
"metadata": {
"name": "test"
},
"spec": {
"inputDetail": {
"containerFile": {
"container": "nginx",
"filePaths": [
{
"file": "access.log",
"path": "/data/nginx/log"
}
],
"namespace": "production",
"workload": {
"kind": "deployment",
"name": "ingress-gateway"
}
},
"type": "container_file"
},
...
}
}
采集 production 命名空间中 pod 标签包含 k8s-app=ingress-gateway 的 pod 中的 nginx 容器中 /data/nginx/log/ 路径下名为 access.log 的文件:
{
"apiVersion": "cls.cloud.tencent.com/v1",
"kind": "LogConfig",
"spec": {
"inputDetail": {
"containerFile": {
"container": "nginx",
"filePaths": [
{
"file": "access.log",
"path": "/data/nginx/log"
}
],
"includeLabels": {
"k8s-app": "ingress-gateway"
},
"namespace": "production"
},
"type": "container_file"
}
}
}

主机文件采集

采集主机 /data/ 路径下所有 .log 文件:
{
"apiVersion": "cls.cloud.tencent.com/v1",
"kind": "LogConfig",
"spec": {
"inputDetail": {
"containerStdout": {
"allContainers": false,
"includeLabels": {
"k8s-app": "nginx"
},
"namespace": "production"
},
"type": "container_stdout"
},
...
}
}

完整示例

投递到 CLS 的日志采集规则,采集 default 命名空间下 deployment/testlog1 的标准输出:
{
"apiVersion": "cls.cloud.tencent.com\\/v1",
"kind": "LogConfig",
"metadata": {
"name": "123"
},
"spec": {
"clsDetail": {
"extractRule": {
"backtracking": "0",
"isGBK": "false",
"jsonStandard": "false",
"unMatchUpload": "false"
},
"indexs": [
{
"indexName": "namespace"
},
{
"indexName": "pod_name"
},
{
"indexName": "container_name"
}
],
"logFormat": "default",
"logType": "minimalist_log",
"maxSplitPartitions": 0,
"region": "ap-chengdu",
"storageType": "",
"topicId": "c26b66bd-617e-4923-bea0-test"
},
"inputDetail": {
"containerStdout": {
"metadataContainer": [
"namespace",
"pod_name",
"pod_ip",
"pod_uid",
"container_id",
"container_name",
"image_name",
"cluster_id"
],
"nsLabelSelector": "",
"workloads": [
{
"kind": "deployment",
"name": "testlog1",
"namespace": "default"
}
]
},
"type": "container_stdout"
}
}
}
投递到 Kafka 的采集规则,采集 default 命名空间下的所有 pod 标准输出:
{
"apiVersion": "cls.cloud.tencent.com\\/v1",
"kind": "LogConfig",
"metadata": {
"name": "321"
},
"spec": {
"inputDetail": {
"containerStdout": {
"allContainers": true,
"namespace": "default",
"nsLabelSelector": ""
},
"type": "container_stdout"
},
"kafkaDetail": {
"brokers": "127.0.0.1:9092",
"extractRule": {},
"instanceId": "",
"kafkaType": "SelfBuildKafka",
"logType": "minimalist_log",
"messageKey": {
"value": "",
"valueFrom": {
"fieldRef": {
"fieldPath": ""
}
}
},
"metadata": {},
"timestampFormat": "double",
"timestampKey": "",
"topic": "test"
}
}
}


Help and Support

Was this page helpful?

Help us improve! Rate your documentation experience in 5 mins.

Feedback