在TKE中LogListener是以DaemonSet模式运行,可通过CRD方式创建采集配置采集TKE集群日志。本文介绍如何通过CRD方式创建采集配置。
需要开启日志采集功能,详情请参考开启日志采集
您只需要定义 LogConfig CRD 即可创建采集配置,LogListener 根据 LogConfig CRD 的变化修改相应的日志服务 CLS 日志主题,并设置绑定的机器组。CRD 的格式如下:
apiVersion: cls.cloud.tencent.com/v1
kind: LogConfig ## 默认值
metadata:
name: test ## CRD资源名,在集群内唯一
spec:
clsDetail:
topicId: xxxxxx-xx-xx-xx-xxxxxxxx ## CLS日志主题的ID,日志主题需要在CLS中提前创建,且没有被其它采集配置占用
logType: minimalist_log ## 日志采集格式,json_log代表 json 格式,delimiter_log代表分隔符格式,minimalist_log代表单行全文格式,multiline_log代表多行全文格式,fullregex_log代表完全正则格式
extractRule: ## 提取、过滤规则
...
inputDetail:
type: container_stdout ## 采集日志的类型,包括container_stdout(容器标准输出)、container_file(容器文件)、host_file(主机文件)
containerStdout: ## 容器标准输出
namespace: default ## 采集容器的kubernetes命名空间,如果不指定,代表所有命名空间
allContainers: false ## 是否采集指定命名空间中的所有容器的标准输出
container: xxx ## 满足includeLabels的Pod中的容器名,只有在指定includeLabels时使用
includeLabels: ## 采集包含指定label的Pod
k8s-app: xxx ## 只采pod标签中配置"k8s-app=xxx"的pod产生的日志,与workloads、allContainers=true不能同时指定
workloads: ## 要采集的容器的Pod所属的kubernetes workload
- namespace: prod ## workload的命名空间
name: sample-app ## workload的名字
kind: deployment ## workload类型,支持deployment、daemonset、statefulset、job、cronjob
container: xxx ## 要采集的容器名,如果不指定,代表workload Pod中的所有容器
containerFile: ## 容器内文件
namespace: default ## 采集容器的kubernetes命名空间
container: xxx ## 采集容器名
includeLabels: ## 采集包含指定label的Pod
k8s-app: xxx ## 只采pod标签中配置"k8s-app=xxx"的pod产生的日志,与workload不能同时指定
workload: ## 要采集的容器的Pod所属的kubernetes workload
name: sample-app ## workload的名字
kind: deployment ## workload类型,支持deployment、daemonset、statefulset、job、cronjob
logPath: /opt/logs ## 日志文件夹,不支持通配符
filePattern: app_*.log ## 日志文件名,支持通配符 * 和 ? ,* 表示匹配多个任意字符,? 表示匹配单个任意字符
hostFile: ## 主机文件
logPath: /opt/logs ## 日志文件夹,支持通配符
filePattern: app_*.log ## 日志文件名,支持通配符 * 和 ? ,* 表示匹配多个任意字符,? 表示匹配单个任意字符
customLablels
k1: v1
[root@VM-1-24-centos ~]# kubectl get logconfigs
NAME AGE
cls-delimiter 48m
stdout-lgs 4h21m
www-nginx 75m
[root@VM-1-24-centos ~]# kubectl get logconfigs stdout-lgs -o yaml
apiVersion: cls.cloud.tencent.com/v1
kind: LogConfig
metadata:
creationTimestamp: "2021-04-07T09:33:42Z"
generation: 2
managedFields:
- apiVersion: cls.cloud.tencent.com/v1
......
name: stdout-lgs
spec:
clsDetail:
extractRule:
beginningRegex: (\S+)\s-[^-]+(\S+)\s\[([^\]]+)\]\s"(\w+)\s(\S+)\s([^"]+)"\s(\d+)\s(\d+)\s(\S+)[^-]+([^"]+)"\s"([^"]+)[^-]+([^"]+)"\s"([^"]+).*
keys:
- client_ip
- remote_user
- request_time
- request_method
- request_url
- http_protocol
- status_code
- body_bytes_sent
- handle_time
- http_referer
- http_user_agent
- real_ip
- log_time
logRegex: (\S+)\s-[^-]+(\S+)\s\[([^\]]+)\]\s"(\w+)\s(\S+)\s([^"]+)"\s(\d+)\s(\d+)\s(\S+)[^-]+([^"]+)"\s"([^"]+)[^-]+([^"]+)"\s"([^"]+).*
logType: fullregex_log
topicId: 4511efaa-2cad-4c3c-8c7c-d3bb5a58d903
inputDetail:
containerStdout:
includeLabels:
k8s-app: tke-cls-nginx-std
namespace: cls-wk
type: container_stdout
status:
status: Synced
apiVersion: cls.cloud.tencent.com/v1
kind: LogConfig
metadata:
# 配置名称,集群唯一
name: test123
spec:
# 消费端配置
clsDetail:
# 消费的topic id
topicId: 4224b4f3-9ee8-46e3-822a-xxxxxxxxx
# 提取模式
logType: minimalist_log
inputDetail:
# 采集类型
type: container_stdout
containerStdout:
# 所属namespace
namespace: cls-wk
# 对应容器的标签
includeLabels:
k8s-app: tke-cls-nginx
apiVersion: cls.cloud.tencent.com/v1
kind: LogConfig
metadata:
# 配置名称,集群唯一
name: stdout-lgs
spec:
clsDetail:
extractRule:
beginningRegex: (\S+)\s-[^-]+(\S+)\s\[([^\]]+)\]\s"(\w+)\s(\S+)\s([^"]+)"\s(\d+)\s(\d+)\s(\S+)[^-]+([^"]+)"\s"([^"]+)[^-]+([^"]+)"\s"([^"]+).*
# 提起的键值
keys:
- client_ip
- remote_user
- request_time
- request_method
- request_url
- http_protocol
- status_code
- body_bytes_sent
- handle_time
- http_referer
- http_user_agent
- real_ip
- log_time
# 正则表达式,会根据()捕获组提取对应的value
logRegex: (\S+)\s-[^-]+(\S+)\s\[([^\]]+)\]\s"(\w+)\s(\S+)\s([^"]+)"\s(\d+)\s(\d+)\s(\S+)[^-]+([^"]+)"\s"([^"]+)[^-]+([^"]+)"\s"([^"]+).*
# 日志采集格式:完全正则提取模式
logType: fullregex_log
topicId: 4511efaa-2cad-4c3c-8c7c-xxxxxxxxx
inputDetail:
containerStdout:
# pod 标签
includeLabels:
k8s-app: tke-cls-nginx-std
namespace: cls-wk
# 采集类型
type: container_stdout
应用配置后,日志服务的数据格式如下:
apiVersion: cls.cloud.tencent.com/v1
kind: LogConfig
metadata:
# 配置名称,集群唯一
name: www-nginx
spec:
clsDetail:
# 日志采集格式
logType: minimalist_log
topicId: 56a32d6f-77da-4c4a-a7d1-xxxxxxxxx
inputDetail:
containerFile:
container: nginx-logfile
# 文件名,支持通配符*和?
filePattern: '*.log'
logPath: /data/log/nginx
namespace: cls-wk
workload:
kind: deployment
name: nginx-logfile
# 采集类型为容器文件
type: container_file
apiVersion: cls.cloud.tencent.com/v1
kind: LogConfig
metadata:
# 配置名称,集群唯一
name: cls-delimiter
spec:
clsDetail:
# 分隔符
delimiter: '::'
# 提取的key
keys:
- remote_addr
- remote_user
- time_local
- request
- status
- body_bytes_sent
- request_time
- http_referer
- http_user_agent
- http_x_forwarded_for
- msec
# 日志时间使用日志中字段时间
timeFormat: '%d/%b/%Y %H:%M:%S'
timeKey: time_local
# 日志采集格式为分隔符模式
logType: delimiter_log
topicId: e850733e-f32b-4a8e-a246-xxxxxxxx
inputDetail:
containerFile:
container: nginxdelimiter
filePattern: '*.log'
logPath: /data/log/nginx
namespace: cls-wk
workload:
kind: deployment
name: nginxdelimiter
# 采集类型为容器文件
type: container_file
应用配置后,日志服务的数据格式如下:
更多CLS和TKE日志采集相关请参考如下链接:
友情提醒:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。