需求背景
需求:
k8s的应用日志解决方案,不同项目组的日志要采集到不同的logstore,并且只采集指定环境的日志(dev/test/prd)
方案:
- logtail使用daemonset方式
- 通过crd来自定义日志采集
1. 部署helm v3
helm: https://github.com/helm/helm/releases
wget https://get.helm.sh/helm-v3.3.4-linux-amd64.tar.gz \
&& tar xf helm-v3.3.4-linux-amd64.tar.gz \
&& \cp -a linux-amd64/helm /usr/local/bin/helm \
&& helm version
2. 部署logtail-daemonset
安装Logtail日志组件:https://help.aliyun.com/document_detail/157317.html
开通一个子账号专门用于管理日志服务,并创建project k8s-log-custom-logtail
,官方推荐"k8s-log-custom-"开头,咨询客服得知这个其实是可以随便自定义的
wget http://logtail-release-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/kubernetes/alicloud-log-k8s-custom-install.sh; \
&& chmod 744 ./alicloud-log-k8s-custom-install.sh; \
&& sh ./alicloud-log-k8s-custom-install.sh {your-project-suffix} {region-id} {aliuid} {access-key-id} {access-key-secret}
查看
helm status alibaba-log-controller
3. 配置aliyunlog-crd
file极简采集方式,配置多个crd来支持不同项目组使用不同logstore,容器的环境变量需要包含 ENV
和 GROUP
,用于筛选需要采集日志的容器
log-crd-dev-demo.yml
apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:
# 资源名,在集群内唯一
name: log-demo
namespace: log-crd
spec:
# [可选]Project名称,默认为安装时设置的Project,若指定Project请确保该Project未被使用
# project: k8s-log-custom-logtail
# Logstore名称,不存在时自动创建
logstore: k8s-demo
# [可选]Shard数量,默认为2,支持1-10
shardCount: 2
# 详细配置
logtailConfig:
# 采集的数据源类型,file(文本文件)或plugin(标准输出)
inputType: file
# 采集配置的名称,与资源名(metadata.name)保持一致
configName: log-demo
inputDetail:
# 极简模式日志,logType设置为"common_reg_log"
logType: common_reg_log
# 日志文件夹
logPath: /var/log/app
# 文件名, 支持通配符,例如log_*.log
filePattern: "*.log"
# 行首正则表达式
logBeginRegex: '\d+-\d+-\d+\s\d+:\d+:\d+\.\d+\s.*'
# 解析正则
regex: '(.*)'
# 提取出的key列表
key: ["content"]
# 采集容器内的文件,dockerFile设置为true
dockerFile: true
# 只采集包含指定环境变量的容器日志,多个变量时,只要满足其中一个就会被采集
dockerIncludeEnv:
GROUP: demo
# 排除包含指定变量
dockerExcludeEnv:
ENV: "^test|prd$"
查看
kubectl -n log-crd get aliyunlogconfigs
其他
行首正则可以在页面上选择简单多行模式,贴入一段日志自动生成,再复制出来(极简模式-多行 是特殊的完整正则 crd里面没有设置的参数)
crd和sls控制台配置最终生成的是logtail客户端的采集配置 /usr/local/ilogtail/user_log_config.json
"##1.0##k8s-log-custom-logtail$log-test-product" : {
"advanced" : {
"force_multiconfig" : false
},
"aliuid" : "1778178830505945",
"category" : "k8s-test-product",
"create_time" : 1621580904,
"defaultEndpoint" : "cn-shanghai-intranet.log.aliyuncs.com",
"delay_alarm_bytes" : 0,
"delay_skip_bytes" : 0,
"discard_none_utf8" : false,
"discard_unmatch" : true,
"docker_exclude_env" : {
"ENV" : "^dev|prd$"
},
"docker_exclude_label" : {},
"docker_file" : true,
"docker_include_env" : {
"GROUP" : "product"
},
"docker_include_label" : {},
"enable" : true,
"enable_tag" : true,
"file_encoding" : "utf8",
"file_pattern" : "*.log",
"filter_keys" : [],
"filter_regs" : [],
"group_topic" : "",
"keys" : [ "content" ],
"local_storage" : true,
"log_begin_reg" : "\\d+-\\d+-\\d+\\s\\d+:\\d+:\\d+\\.\\d+\\s.*",
"log_path" : "/var/log/intramirror",
"log_type" : "common_reg_log",
"log_tz" : "",
"max_depth" : 100,
"max_send_rate" : -1,
"merge_type" : "topic",
"preserve" : true,
"preserve_depth" : 0,
"priority" : 0,
"project_name" : "k8s-log-custom-logtail",
"raw_log" : false,
"regex" : [ "(.*)" ],
"region" : "cn-shanghai",
"send_rate_expire" : 0,
"sensitive_keys" : [],
"shard_hash_key" : [],
"tail_existed" : false,
"timeformat" : "",
"topic_format" : "none",
"tz_adjust" : false,
"version" : 2
}
},
"region_list" : [
{
"endpoint_list" : [
"cn-shanghai-intranet.log.aliyuncs.com",
"cn-shanghai.log.aliyuncs.com"
],
"name" : "cn-shanghai",
"primary" : true,
"profile_project" : "ali-cn-shanghai-sls-admin"
},
{
"endpoint_list" : [
"cn-shanghai-b-intranet.log.aliyuncs.com",
"cn-shanghai-b.log.aliyuncs.com"
],
"name" : "cn-shanghai-b",
"primary" : false,
"profile_project" : "ali-cn-shanghai-b-sls-admin"
}
]
}
查看配置可以看到控制台的配置为logtail自动生成了
"keys" : [ "content" ],
"regex" : [ "(.*)" ]
所以如果没有特殊需要,我们在配置crd时这2个参数也可以直接配置成这样
还需要注意的是,同一个文件只会被logtail采集一次,例如:按照配置,一个文件既会被A采集,也会被B采集,那么它只会被采集到其中一个里面去(比如只会被采集到A的logstore)。这时只有A排除了这个采集时,才会跑到B的logstore里。
除了通过容器ENV来筛选,还可以通过LABLE,参数 dockerIncludeLabel
dockerExcludeLabel
,用法和 dockerIncludeEnv
dockerExcludeEnv
差不多,要以 docker inspect
中的为准
参考链接
K8S 日志采集最佳实操
https://www.cnblogs.com/lihanlin/p/12657680.html
Kubernetes中Logtail日志采集CRD配置详解
https://blog.csdn.net/weixin_34406061/article/details/89700948
安装Logtail日志组件
https://help.aliyun.com/document_detail/157317.html
通过DaemonSet-CRD方式采集日志
https://help.aliyun.com/document_detail/74878.html
Logtail配置 详细参数
https://help.aliyun.com/document_detail/29058.html