采集原理
通过 DaemonSet 模式在每个 node 上运行 logtail client,客户端启动后加入指定 machine-group,通过 docker.sock 与 ecs 上的 docker daemon 通讯,通过检索 container 环境变量来查找符合采集规则的 container,以及定位内部文件和容器 stdout 日志,在通过监听内核 inotify 事件来进行日志文件变化监听。
Pod 日志接入模式(环境变量注入)
通过在pod中注入环境变量aliyun_logs_{key} 来接入aliyun SLS日志系统,如未指定project 则使用在DaemonSet 模式默认部署的 logtail 默认配置。
logtail-ds configMap
采集插件安装不再赘述
1 | apiVersion: v1 |
环境变量
支持的环境变量 | ||
---|---|---|
aliyun_logs_{key} | 必选项。{key}只能包含小写字母、数字和-。若不存在aliyun_logs_{key}_logstore,则默认创建并采集到名为{key}的logstore。当值为stdout表示采集容器的标准输出;其他值为容器内的日志路径。 | 默认采集方式为极简模式, {key}需保持在K8s集群内唯一。 |
aliyun_logs_{key}_tags | 可选。值为{tag-key}={tag-value}类型,用于对日志进行标识。 | - |
aliyun_logs_{key}_project | 可选。值为指定的日志服务Project。当不存在该环境变量时为您安装时所选的Project。 | Project需与您的Logtail工作所在Region一致。 |
aliyun_logs_{key}_logstore | 可选。值为指定的日志服务Logstore。当不存在该环境变量时Logstore和{key}一致。 | - |
aliyun_logs_{key}_shard | 可选。值为创建Logstore时的shard数,有效值为1~10。当不存在该环境变量时值为2。 | - |
aliyun_logs_{key}_ttl | 可选。值为指定的日志保存时间,有效值为1~3650。当取值为3650时,指定日志的保存时间为永久保存。当不存在该环境变量时,默认指定日志的保存时间为90天。 | - |
aliyun_logs_{key}_machinegroup | 可选。值为应用的机器组。当不存在该环境变量时与安装Logtail的默认机器组一致。 | - |
Example
Step1
创建测试容器,并注入环境变量
1 | template: |
Step 2
此时阿里云SLS日志服务中即会创建logStore,默认 logtail 为极简模式,日志未进行解析。
1 | { |
Step 3
进行日志拆分极细,aliyun支持多种解析插件,当前使用自定义的正则来演示,logtail 配置如下。
插件可参考:https://help.aliyun.com/document_detail/64957.html?spm=a2c4g.11186623.6.640.60a31de3orfOsD
1 | { |
需要注意:当使用 regex 进行分组时,请务必不要使用 (()())
类似嵌套表达式会导致日志解析结果和 Key 对应关系错乱,日志数据混乱。如下例子:
1 | ((\d+\.){3}(\d+)) --替换-> (\S+) |
Step 4
此时如果正则解析无问题的情况下即可查看拆分后的日志,如没有查看到拆分的日志,可点击诊断按钮查看客户端错误进行debug。