本文介绍如何在控制台上创建Logtail配置,并以DaemonSet方式采集容器文件日志。
前提条件
- 已安装Logtail组件。具体操作,请参见安装Logtail组件(Kubernetes集群)。
- 在您安装Logtail组件时所使用的Project中已完成Logstore创建。具体操作,请参见创建Logstore。
- 目标容器持续产生日志。重要 Logtail只采集增量日志。如果下发Logtail配置后,日志文件无更新,则Logtail不会采集该文件中的日志。更多信息,请参见读取文件。
功能特点
- 采集文本日志时,只需配置容器内的日志文件路径,无需关心该路径到宿主机的映射。
- 支持通过容器Label白名单指定待采集的容器。
- 支持通过容器Label黑名单排除不要采集的容器。
- 支持通过环境变量白名单指定待采集的容器。
- 支持通过环境变量黑名单排除不要采集的容器。
- 支持采集多行日志(例如Java Stack日志)。
- 支持上报容器日志时自动关联Meta信息(例如容器名、镜像、Pod、Namespace、环境变量等)。
- 当容器运行于Kubernetes时,Logtail还具有以下功能。
- 支持通过Kubernetes Namespace名称、Pod名称、容器名称指定待采集的容器。
- 支持通过Kubernetes Label白名单指定待采集的容器。
- 支持通过Kubernetes Label黑名单排除不要采集的容器。
- 支持上报容器日志时自动关联Kubernetes Label信息。
限制说明
- 采集停止策略:当容器被停止后,Logtail监听到容器
die
的事件后会停止该容器日志的采集。如果此时采集出现延迟,则可能丢失停止前的部分日志。 - Docker存储驱动限制:目前只支持overlay、overlay2,其他存储驱动需将日志所在目录通过数据卷挂载为临时目录。
如果日志目录是以PVC方式挂载到NAS,则不支持使用Daemonset方式采集日志,建议使用Sidecar方式采集。具体操作,请参见通过Sidecar-CRD方式采集容器文本日志、通过Sidecar-控制台方式采集容器文本日志。
- 不支持采集软链接:目前Logtail无法访问业务容器的软链接,请按真实路径配置采集目录。
- 如果业务容器的数据目录是通过数据卷(Volume)挂载的,则不支持采集它的父目录,需设置采集目录为完整的数据目录。
例如/var/log/service目录是数据卷挂载的路径,则设置采集目录为/var/log将采集不到该目录下的日志,需设置采集目录为/var/log/service。
- Kubernetes默认将宿主机根目录挂载到Logtail容器的
/logtail_host
目录。如果您要采集宿主机文本日志,则配置日志文件路径时,需加上/logtail_host
前缀。例如需要采集宿主机上
/home/logs/app_log/
目录下的日志,则设置日志路径为/logtail_host/home/logs/app_log/
。 - Logtail支持Docker和Containerd两种容器引擎的数据采集,访问路径说明如下:
- Docker:Logtail通过/run/docker.sock访问Docker,请确保该路径存在且具备访问权限。
- Containerd:Logtail通过/run/containerd/containerd.sock访问Containerd,请确保该路径存在且具备访问权限。
操作视频
本视频介绍通过日志服务Logtail采集容器文本日志的操作步骤。
创建Logtail配置
- 登录日志服务控制台。
- 在接入数据区域,单击Kubernetes-文件。
- 选择目标Project和Logstore,单击下一步。选择您在安装Logtail组件时所使用的Project。Logstore为您自定义创建的Logstore。
- 单击使用现有机器组。安装Logtail组件后,日志服务自动创建名为
k8s-group-${your_k8s_cluster_id}
的机器组,您可以直接使用该机器组。 - 选中目标机器组(
k8s-group-${your_k8s_cluster_id}
),将该机器组从源机器组移动到应用机器组,单击下一步。 - 设置Logtail配置,单击下一步。
- 预览数据及创建索引,然后单击下一步。日志服务默认开启全文索引。您也可以根据采集到的日志,手动创建字段索引,或者单击自动生成索引,日志服务将自动生成字段索引。更多信息,请参见创建索引。重要 如果您要查询和分析日志,那么全文索引和字段索引必须至少启用一种。同时启用时,以字段索引为准。
- 单击查询日志,系统将跳转至Logstore查询分析页面。您需要等待1分钟左右,待索引生效后,才能在原始日志页签中,查看已采集到的日志。更多信息,请参见查询和分析日志。
配置示例
通过环境变量黑白名单过滤容器
采集环境变量为NGINX_SERVICE_PORT=80
且不为POD_NAMESPACE=kube-system
的容器的文本日志,日志文件路径为/var/log/nginx/access.log
,采集模式为极简模式。
- 获取环境变量。
您可以登录容器所在的宿主机查看容器的环境变量。具体操作,请参见获取容器环境变量。
- 创建Logtail配置。Logtail配置示例如下图所示。极简模式的相关配置说明请参见使用极简模式采集日志。
通过容器Label黑白名单过滤容器
采集容器Label为io.kubernetes.container.name=nginx
的容器的文本日志,日志文件路径为/var/log/nginx/access.log
,采集模式为极简模式。
- 获取容器Label。
您可以登录容器所在的宿主机查看容器的Label。具体操作,请参见获取容器Label。
- 创建Logtail配置。Logtail配置示例如下图所示。极简模式的相关配置说明请参见使用极简模式采集日志。
通过Kubernetes Namespace名称、Pod名称和容器名称过滤容器
采集default命名空间下以nginx-log-demo开头的Pod中的nginx-log-demo-0容器的文本日志。
- 获取Kubernetes层级的信息。
- 获取Pod信息。
- 获取Namespace等信息。
- 获取Pod信息。
- 创建Logtail配置。
Logtail配置示例如下图所示。极简模式的相关配置说明请参见使用极简模式采集日志。
通过Kubernetes Label过滤容器
采集Kubernetes Label中Key为job-name,Value以nginx-log-demo开头的所有容器中的文本日志。
- 获取Kubernetes Label。
- 创建Logtail配置。Logtail配置示例如下图所示。极简模式的相关配置说明请参见使用极简模式采集日志。
采集多行日志
采集Kubernetes Label中Key为job-name,Value以nginx-log-demo开头的所有容器中的文本日志,且该日志为多行日志。采集模式为极简模式-多行。
- 获取Kubernetes Label。
- 创建Logtail配置。Logtail配置示例如下图所示。极简模式(多行)的相关配置说明请参见使用极简模式采集日志。
默认字段
字段名称 | 说明 |
---|---|
_image_name_ | 镜像名 |
_container_name_ | 容器名 |
_pod_name_ | Pod名 |
_namespace_ | Pod所在的命名空间 |
_pod_uid_ | Pod的唯一标识 |
_container_ip_ | Pod的IP地址 |