使用CRD配置采集规则
更新时间:2024-09-05
操作场景
您不仅可以控制台配置日志采集,还可通过自定义资源(CustomResourceDefinitions,CRD)的方式配置日志采集。CRD支持采集容器标准输出、容器内部日志,日志源支持采集主机和容器日志,支持多种日志采集格式,支持投递到 BLS 和 BES等不同消费端。
前提条件
CRD 介绍
CRD 定义的各个字段的具体含义,如下
CRD 资源类型
LogConfig 定义
字段 | 描述 |
---|---|
apiVersion string |
cce.baidubce.com/v1 |
kind string |
LogConfig |
metadata ObjectMeta |
详情看 Kubernetes API metadata . |
spec LogConfigSpec |
|
status LogConfigStatus |
LogConfigSpec 定义
字段 | 描述 |
---|---|
srcConfig SrcConfig |
|
dstConfig DstConfig |
SrcConfig 定义
字段 | 描述 |
---|---|
srcType SrcType |
srcType, 可选值 host, container,必填 |
logType ContainerLogType |
logType 只有 srcType 字段为 container 时,logType 才有用 可选值 stdout,internal,分别表示标准输出日志和容器内部日志,必填 |
srcDir string |
srcDir 日志采集目录,注意是目录,当 srcType=container,logType=stdout 时 不需要指定 srcDir,选填 |
matchPattern string |
matchPattern srcDir 下日志文件匹配规则,选填 |
ignorePattern string |
ignorePattern srcDir 下日志文件就忽略规则,选填 |
timeFormat string |
timeFormat 用于投 BOS 时,原文件路径日期解析,选填 |
ttl integer |
ttl agent 采集日志时间范围,单位为天 ,必填 |
useMultiline boolean |
useMultiline 是否启用多行模式,选填 |
multilineRegex string |
multilineRegex 多行模式首行模式,选填 |
recursiveDir boolean |
recursiveDir 是否递归采集 srcDir 下满足 matchPattern 的所有文件,包括子目录,选填 |
logTime LogTimeType |
logTime 日志时间,可选值 system, logTime, 分别表示使用系统时间和使用日志时间,选填 |
timestampKey string |
timestampKey 指定解析后的字段作为日志时间,选填 |
dateFormat string |
dateFormat 指定时间戳字段的时间解析格式,format格式参考https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'Z" ,选填 |
filterExpr string |
filterExpr 日志匹配表达式,符合规则的日志,将被采集,选填 |
processType ProcessType |
processType 解析类型,选填 |
processConfig ProcessConfig |
processConfig 对应 processType 的 process 参数,选填 |
matchLabels KVPair array |
matchLabels 容器环境匹配 labels,这里的 label 对应 docker inspect 上的 label, 不是 pod 上的 label,选填 |
ignoreLabels KVPair array |
ignoreLabels 容器环境忽略 labels,具体同上,选填 |
matchEnvs KVPair array |
matchEnvs 容器环境匹配的 env,选填 |
ignoreEnvs KVPair array |
matchEnvs 容器环境忽略匹配的 env,选填 |
matchLabels/matchEnvs 两者必须要填一个
DstConfig 定义
设置日志数据投递目的端。产品当前提供日志集、BES两种目的端,各端对应的具体参数配置分别如下:
设置日志集作为目的端
字段 | 描述 |
---|---|
dstType DstType |
dstType 目的端存储类型,当前支持 BLS ,必填 |
logStore string |
logStore BLS 日志集名字,必填 |
retention integer |
retention 日志存储时间,单位为 天 ,必填 |
rateLimit integer |
日志上传带宽限制,输入范围 1-100 ,单位为 MB ,必填 |
设置BES(Elasticsearch)作为目的端
字段 | 描述 |
---|---|
dstType DstType |
dstType 目的端存储类型,当前支持 BES ,必填 |
besClusterID string |
BES 集群ID,需要在同一地域,必填 |
besUser string |
BES 集群的登录用户名,必填 |
besPasswd string |
BES 集群登录密码,必填 |
besIndexPrefix string |
自定义 indes 前缀。index Rolling 开启状态下,BES 集群中的 index 名称由“index前缀+采集日期”组成,关闭状态下,index 名称由 index 前缀组成。采集日期是指数据写入 BES 时的日期,日期格式为:YYYY-MM-DD,必填 |
besIndexRolling string |
设定 BES 集群自动生成新 index 的频率。可选值为 none(不滚动生成 index);day(每天0时生成);week(每周一0时生成);month(每月1号0时生成),必填 |
besIsPwChange boolean |
仅支持输入 true ,必填 |
ProcessConfig 定义
字段 | 描述 |
---|---|
regex string |
regex 正则规则 ,选填 |
separator string |
separator 分隔符,选填 |
quote string |
quote 分隔符场景可指定引用符,可选值包括:空,双引号",单引号'和自定义 ,选填 |
sampleLog string |
sampleLog 解析日志样例, 解析后用于在 console 配置 keys 与 dataType ,选填 |
keys string |
keys 解析结果的列名;@message 为系统保留字,不允许设置为 key,选填 |
dataType string |
dataType 解析结果每列对应的数据类型,支持string/int/float/bool, 必须要与 keys 一一对应,选填 |
discardOnFailure boolean |
discardOnFailure 日志解析失败是否丢弃 true: 丢弃 false: 返回原值,选填 |
KeepOriginal boolean |
keepOriginal 是否保留原日志 true: 保留原日志到 kafka 中的 @message 字段,bls 日志集中的 @raw 字段 false: 解析成功则不保留原日志,选填 |
CRD 示例
配置容器标准输出 CRD 示例
采集所有 namespace 下所有容器
apiVersion: cce.baidubce.com/v1
kind: LogConfig
metadata:
name: all-container-stdout-log
namespace: kube-system
spec:
srcConfig:
srcType: container
logType: stdout
ttl: 3
matchLabels:
- key: io.kubernetes.container.name
value: .*
- key: io.kubernetes.pod.namespace
value: .*
dstConfig:
dstType: BLS
logStore: container-stdout-log
retention: 10
rateLimit: 10
采集指定 namespace 下所有容器
apiVersion: cce.baidubce.com/v1
kind: LogConfig
metadata:
name: kube-system-container-stdout-log
namespace: kube-system
spec:
srcConfig:
srcType: container
logType: stdout
ttl: 3
matchLabels:
- key: io.kubernetes.container.name
value: .*
- key: io.kubernetes.pod.namespace
value: kube-system
dstConfig:
dstType: BLS
logStore: kube-system-container-stdout-log
retention: 10
rateLimit: 10
采集指定 namespace 指定容器
apiVersion: cce.baidubce.com/v1
kind: LogConfig
metadata:
name: kube-state-metrics-log
namespace: kube-system
spec:
srcConfig:
srcType: container
logType: stdout
ttl: 3
matchLabels:
- key: io.kubernetes.container.name
value: kube-state-metrics
- key: io.kubernetes.pod.namespace
value: kube-system
dstConfig:
dstType: BLS
logStore: kube-state-metrics-log
retention: 10
rateLimit: 10
配置容器文件路径 CRD 示例
采集指定 namespace 指定容器内部文件路径
apiVersion: cce.baidubce.com/v1
kind: LogConfig
metadata:
name: tomocat-log
namespace: default
spec:
srcConfig:
srcType: container
logType: internal
srcDir: /usr/local/tomcat/logs/ # 容器内文件路径,注意 /usr/local/tomcat/logs/ 需要 mount emptyDir
matchPattern: catalina.*.log # 容器内日志文件名(支持正则)
ttl: 3
matchLabels:
- key: io.kubernetes.container.name
value: tomcat
- key: io.kubernetes.pod.namespace
value: default
dstConfig:
dstType: BLS
logStore: tomocat-log
retention: 10
rateLimit: 10
Tomcat deployment 参考示例
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcat
spec:
selector:
matchLabels:
app: tomcat
replicas: 4
template:
metadata:
labels:
app: tomcat
spec:
containers:
- name: tomcat
image: "tomcat:7.0"
volumeMounts:
- name: tomcat-log
mountPath: /usr/local/tomcat/logs # 挂载 emptyDir
volumes:
- name: tomcat-log # 日志
emptyDir: {}
配置节点文件路径 CRD 示例
采集节点上指定目录下日志文件
apiVersion: cce.baidubce.com/v1
kind: LogConfig
metadata:
name: host-messages
namespace: kube-system
spec:
srcConfig:
srcType: host
srcDir: /logbeat_host/var/log # 注意,host 日志需要添加 /logbeat_host 前缀
matchPattern: messages # 采集 message 日志文件
ttl: 3
dstConfig:
dstType: BLS
logStore: host-messages
retention: 10
rateLimit: 10