本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
如果需要每个Pod使用单独的Logtail实例来收集Pod内所有容器的日志,可以使用Sidecar方式在Kubernetes集群上部署Logtail。本文介绍Sidecar方式采集容器文本日志的工作原理、使用限制、前提条件、操作步骤等信息。
工作原理
Sidecar模式
在Sidecar模式中,每个容器组(Pod)运行一个Logtail容器,用于采集当前容器组(Pod)所有容器(Containers)的日志。不同Pod的日志采集相互隔离。
为了采集同一Pod中其它容器的日志文件,需要通过共享存储卷的方式来完成,即将同一份存储卷分别挂载到业务容器和Logtail容器。Sidecar方式采集容器日志的更多信息,请参见Sidecar日志采集介绍和Sidecar模式示例。存储卷的更多信息,请参见存储基础知识。
前提条件
已安装Logtail组件。具体操作,请参见安装Logtail组件(阿里云Kubernetes集群)。
安装Logtail的主机需开放80(HTTP)端口和443(HTTPS)端口。ECS实例的端口由安全组规则控制,添加安全组规则的步骤请参见添加安全组规则。
目标容器持续新增日志。Logtail只采集增量日志。如果下发logtail采集配置后,日志文件无更新,则Logtail不会采集该文件中的日志。更多信息,请参见读取日志。
业务容器中待采集文件必须位于存储卷中,且该存储卷必须挂载到Logtail容器。
步骤一:为业务Pod注入Logtail容器
登录Kubernetes集群。
创建一个YAML文件。
sidecar.yaml
为文件的示例名称,请根据实际情况替换。vim sidecar.yaml
在YAML文件中输入如下脚本,并根据实际情况设置其中的参数。
警告YAML模板中,所有带有
${}
的占位符都需要替换为您环境中实际的值,其他参数禁止改动、删除。执行如下命令使
sidecar.yaml
文件配置生效。sidecar.yaml
为文件名,请根据实际情况替换。kubectl apply -f sidecar.yaml
创建Logtail采集配置
通过CRD方式创建的配置,在控制台上对其修改不会同步到CRD中。因此,如需修改由CRD创建的配置内容,只能修改CRD资源,不要直接在控制台操作,避免iLogtail采集配置不一致。
日志服务控制台
登录日志服务控制台。
单击控制台右侧的快速接入数据,在接入数据区域单击Kubernetes-文件卡片。
选择目标Project和Logstore,单击下一步。选择您在安装Logtail组件时所使用的Project。Logstore为您自定义创建的Logstore。
在机器组配置页面。
根据实际场景,单击以下页签:
- 重要
不同页签的后续配置步骤不同,请根据实际需求正确选择。
确认目标机器组已在应用机器组列表中,然后单击下一步。在ACK中安装Logtail组件后,日志服务自动创建名为
k8s-group-${your_k8s_cluster_id}
的机器组,您可以直接使用该机器组。重要如果需要新建机器组,请单击创建机器组,按照右侧面板进行创建。更多信息,请参见通过控制台配置。
如果机器组心跳为FAIL,您可单击自动重试。如果还未解决,请参见Logtail机器组无心跳进行排查。
创建Logtail采集配置,单击下一步创建Logtail采集配置,日志服务开始采集日志。
说明Logtail采集配置生效时间最长需要3分钟,请耐心等待。
创建索引和预览数据,然后单击下一步。日志服务默认开启全文索引。您也可以根据采集到的日志,手动创建字段索引,或者单击自动生成索引,日志服务将自动生成字段索引。更多信息,请参见创建索引。
重要如果需要查询日志中的所有字段,建议使用全文索引。如果只需查询部分字段、建议使用字段索引,减少索引流量。如果需要对字段进行分析(SELECT语句),必须创建字段索引。
单击查询日志,系统将跳转至Logstore查询分析页面。
您需要等待1分钟左右,待索引生效后,才能在原始日志页签中,查看已采集到的日志。更多信息,请参见查询和分析日志。
(推荐)CRD-AliyunPipelineConfig
创建Logtail采集配置
使用AliyunPipelineConfig,需要日志组件版本最低为0.5.1。
您只需要创建AliyunPipelineConfig CR即可创建iLogtail采集配置,创建完成后自动生效。对于通过CR创建的iLogtail采集配置,其修改只能通过更新相应的CR来实现。
执行如下命令创建一个YAML文件。
cube.yaml
为文件名,请根据实际情况替换。vim cube.yaml
在YAML文件输入如下脚本,并根据实际情况设置其中的参数。
重要请确保
configName
字段值在安装Logtail组件的Project中唯一。每个iLogtail采集配置必须单独设置一个对应的CR,如果多个CR关联同一个Logtail配置,后配置的CR将不会生效。
AliyunPipelineConfig
的参数,请参见【推荐】使用AliyunPipelineConfig管理采集配置。本文的iLogtail采集配置样例包含基础的文本日志采集功能,参数说明参见CreateLogtailPipelineConfig - 创建Logtail流水线配置。请确保config.flushers.Logstore参数配置的Logstore已存在,可以通过配置spec.logstore参数自动创建Logstore。
采集指定容器内的单行文本日志
创建名为
example-k8s-file
的iLogtail采集配置,对于集群内名称包含app
的所有容器,以单行文本模式采集/data/logs/app_1
路径下的test.LOG
文件,直接发送到名称为
k8s-file
的Logstore,该Logstore属于名称为k8s-log-test
的Project。apiVersion: telemetry.alibabacloud.com/v1alpha1 # 创建一个 ClusterAliyunPipelineConfig kind: ClusterAliyunPipelineConfig metadata: # 设置资源名,在当前Kubernetes集群内唯一。该名称也是创建出的iLogtail采集配置名 name: example-k8s-file spec: # 指定目标project project: name: k8s-log-test # 创建用于存储日志的 Logstore logstores: - name: k8s-file # 定义iLogtail采集配置 config: # 定义输入插件 inputs: # 使用input_file插件采集容器内文本日志 - Type: input_file # 容器内的文件路径 FilePaths: - /data/logs/app_1/**/test.LOG # 启用容器发现功能。 EnableContainerDiscovery: true # 添加容器信息过滤条件,多个选项之间为“且”的关系。 ContainerFilters: # 指定待采集容器所在 Pod 所属的命名空间,支持正则匹配。 K8sNamespaceRegex: default # 指定待采集容器的名称,支持正则匹配。 K8sContainerRegex: ^(.*app.*)$ # 定义输出插件 flushers: # 使用flusher_sls插件输出到指定Logstore。 - Type: flusher_sls # 需要确保该 Logstore 存在 Logstore: k8s-file # 需要确保 endpoint 正确 Endpoint: cn-hangzhou.log.aliyuncs.com Region: cn-hangzhou TelemetryType: logs
采集所有容器内的多行文本日志并正则解析
创建名为
example-k8s-file
的iLogtail采集配置,以多行文本模式采集集群内所有容器内的/data/logs/app_1
路径下的test.LOG
文件,对采集到的数据进行JSON解析,直接发送到名称为k8s-file
的Logstore,该Logstore属于名称为k8s-log-test
的Project。下面样例中的日志原文通过input_file插件读取后格式为
{"content": "2024-06-19 16:35:00 INFO test log\nline-1\nline-2\nend"}
,会被正则解析插件解析为{"time": "2024-06-19 16:35:00", "level": "INFO", "msg": "test log\nline-1\nline-2\nend"}
apiVersion: telemetry.alibabacloud.com/v1alpha1 # 创建一个 ClusterAliyunPipelineConfig kind: ClusterAliyunPipelineConfig metadata: # 设置资源名,在当前Kubernetes集群内唯一。该名称也是创建出的iLogtail采集配置名 name: example-k8s-file spec: # 指定目标project project: name: k8s-log-test # 创建用于存储日志的 Logstore logstores: - name: k8s-file # 定义iLogtail采集配置 config: # 日志样例(可不填写) sample: | 2024-06-19 16:35:00 INFO test log line-1 line-2 end # 定义输入插件 inputs: # 使用input_file插件采集容器内多行文本日志 - Type: input_file # 容器内的文件路径 FilePaths: - /data/logs/app_1/**/test.LOG # 启用容器发现功能。 EnableContainerDiscovery: true # 开启多行能力 Multiline: # 选择自定义行首正则表达式模式 Mode: custom # 配置行首正则表达式 StartPattern: \d+-\d+-\d+.* # 定义处理插件 processors: # 使用正则解析插件解析日志 - Type: processor_parse_regex_native # 源字段名 SourceKey: content # 解析用的正则表达式,用捕获组"()"捕获待提取的字段 Regex: (\d+-\d+-\d+\s*\d+:\d+:\d+)\s*(\S+)\s*(.*) # 提取的字段列表 Keys: ["time", "level", "msg"] # 定义输出插件 flushers: # 使用flusher_sls插件输出到指定Logstore。 - Type: flusher_sls # 需要确保该 Logstore 存在 Logstore: k8s-file # 需要确保 endpoint 正确 Endpoint: cn-hangzhou.log.aliyuncs.com Region: cn-hangzhou TelemetryType: logs
执行如下命令使iLogtail采集配置生效。iLogtail采集配置生效后,Logtail开始采集各个容器上的文本日志,并发送到日志服务中。
cube.yaml
为文件名,请根据实际情况替换。kubectl apply -f cube.yaml
重要采集到日志后,您需要先创建索引,才能在Logstore中查询和分析日志。具体操作,请参见创建索引。
CRD-AliyunLogConfig
您只需要创建AliyunLogConfig CR即可创建iLogtail采集配置,创建完成后自动生效。对于通过CR创建的iLogtail采集配置,其修改只能通过更新相应的CR来实现。
执行如下命令创建一个YAML文件。
cube.yaml
为文件名,请根据实际情况替换。vim cube.yaml
在YAML文件输入如下脚本,并根据实际情况设置其中的参数。
重要请确保
configName
字段值在安装Logtail组件的Project中唯一。如果多个CR关联同一个iLogtail采集配置,则删除或修改任意一个CR均会影响到该iLogtail采集配置,导致其他关联该iLogtail采集配置的CR状态与日志服务中iLogtail采集配置的状态不一致。
CR字段的格式请参见使用AliyunLogConfig管理采集配置。本文的iLogtail采集配置样例包含基础的文本日志采集功能,具体参数参见CreateConfig - 创建Logtail采集配置。
采集指定容器内的单行文本日志
“创建名为
example-k8s-file
的iLogtail采集配置,以单行文本模式采集集群内所有名称开头为app
的Pod的容器内的/data/logs/app_1
路径下的test.LOG
文件,直接发送到名称为k8s-file
的Logstore,该Logstore属于名称为k8s-log-test
的Project。”apiVersion: log.alibabacloud.com/v1alpha1 kind: AliyunLogConfig metadata: # 设置资源名,在当前Kubernetes集群内唯一。 name: example-k8s-file namespace: kube-system spec: # 设置目标project名称(可不填写,默认为k8s-log-<your_cluster_id>) project: k8s-log-test # 设置Logstore名称。如果您所指定的Logstore不存在,日志服务会自动创建。 logstore: k8s-file # 设置iLogtail采集配置。 logtailConfig: # 设置采集的数据源类型。采集文本日志时,需设置为file。 inputType: file # 设置iLogtail采集配置的名称。 configName: example-k8s-file inputDetail: # 指定通过极简模式采集文本日志。 logType: common_reg_log # 设置日志文件所在路径。 logPath: /data/logs/app_1 # 设置日志文件的名称。支持通配符星号(*)和半角问号(?),例如log_*.log。 filePattern: test.LOG # 采集容器的文本日志时,需设置dockerFile为true。 dockerFile: true #设置容器过滤条件。 advanced: k8s: K8sPodRegex: '^(app.*)$'
执行如下命令使其iLogtail采集配置生效。iLogtail采集配置生效后,Logtail开始采集各个容器上的文本日志,并发送到日志服务中。
cube.yaml
为文件名,请根据实际情况替换。kubectl apply -f cube.yaml
重要采集到日志后,您需要先创建索引,才能在Logstore中查询和分析日志。具体操作,请参见创建索引。
查看Logtail采集配置
控制台
登录日志服务控制台。
在Project列表区域,单击目标Project。
在 页签中,单击目标日志库前面的>,依次选择 。
单击目标Logtail采集配置,查看Logtail采集配置详情。
(推荐)CRD-AliyunPipelineConfig
查看由AliyunPipelineConfig创建的Logtail采集配置
查看由AliyunPipelineConfig创建的Logtail采集配置的详细信息
CRD-AliyunLogConfig
查看由AliyunLogConfig创建的iLogtail采集配置
查看由AliyunLogConfig创建的iLogtail采集配置的详细信息
查询分析已采集的日志
在Project列表中,单击目标Project,进入对应的Project详情页面。
在对应的日志库右侧的图标,选择查询分析,查看Kubernetes集群输出的日志。