LogConfig json 格式说明

最近更新时间:2024-10-12 18:17:41

我的收藏

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"
}
}
}