文档

通过DaemonSet方式采集容器文本日志

更新时间:
重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

如果需要只使用一个Logtail实例收集Kubernetes节点上所有容器的日志,可以使用DaemonSet方式在Kubernetes集群上部署Logtail。本文介绍DaemonSet方式采集容器文本日志的工作原理、使用限制、前提条件、操作步骤等信息。

工作原理

image

DaemonSet模式

  • 在DaemonSet模式中,Kubernetes集群确保每个节点(Node)只运行一个Logtail容器,用于采集当前节点内所有容器(Containers)的日志。

  • 当新节点加入集群时,Kubernetes集群会自动在新节点上创建Logtail容器;当节点退出集群时,Kubernetes集群会自动销毁当前节点上的Logtail容器。通过DaemonSet的自动扩缩容机制以及标识型机器组,用户无需手动管理Logtail实例。

容器发现

  • Logtail容器采集其他容器的日志,必须发现和确定哪些容器正在运行,这个过程称为容器发现。

  • 容器发现阶段,Logtail容器不与Kubernetes集群的kube-apiserver进行通信,而是直接和节点上的容器运行时守护进程(Container Runtime Daemon)进行通信,从而获取当前节点上的所有容器信息,避免容器发现对集群kube-apiserver产生压力。kube-apiserver是集群的中央管理组件,负责提供Kubernetes API的服务,更多信息请参见kube-apiserver

  • Logtail支持通过Namespace名称Pod名称Pod标签、容器环境变量等条件指定或排除采集相应容器的日志。

容器文件路径映射

在Kubernetes集群中,因为Pod之间资源隔离,所以Logtail容器无法直接访问其他Pod中的容器的文件。但是,容器内的文件系统都是由宿主机的文件系统挂载形成,通过将宿主机根目录所在的文件系统挂载到Logtail容器,就可以访问宿主机上的任意文件,从而间接采集业务容器文件系统的文件。容器内文件路径与宿主机文件路径之间的关系被称为文件路径映射。

某个文件在当前容器内的路径是/log/app.log,假设映射后的宿主机路径是/var/lib/docker/containers/<container-id>/log/app.log。Logtail默认将宿主机根目录所在的文件系统挂载到自身的/logtail_host目录下,因此Logtail实际采集的文件路径为/logtail_host/var/lib/docker/containers/<container-id>/log/app.log

Logtail采集配置的管理方式

通过控制台管理Logtail采集配置

操作步骤简单,不需连接Kubernetes集群,使用阿里云账号进行鉴权。

(推荐)通过CRD管理Logtail采集配置

通过CRD可以自定义Kubernetes资源,为了便于通过云原生方式管理Logtail采集配置,日志服务定义了AliyunLogConfig这种CRD,它基本等价于Logtail采集配置。用户可以向kube-apiserver提交YAML配置文件来创建AliyunLogConfig资源,从而创建相应的Logtail采集配置。这种配置方式需要连接Kubernetes集群,并额外使用Kubernetes鉴权。

警告

通过CRD方式创建的配置,在控制台上对其修改不会同步到CRD中。因此,如需修改由CRD创建的配置内容,只能修改CRD资源,不要直接在控制台操作,避免配置不一致。

通过CRD管理Logtail采集配置的工作原理

image
  1. 日志服务通过Deployment部署了一个控制器alibaba-log-controller,该控制器负责监听 AliyunLogConfig 资源的变化。

  2. 当用户通过kubectl或其他Kubernetes管理工具创建、更新或删除AliyunLogConfig资源时,alibaba-log-controller会监测到这些变化,然后根据资源配置文件中的内容和服务端Logtail采集配置的状态,自动向日志服务提交各种请求,如采集配置变更等。

使用限制

  • 容器运行时:Logtail只支持Docker和Containerd两种容器引擎。对于Docker只支持overlay、overlay2这两种存储驱动,其他存储驱动需将日志所在目录通过数据卷挂载为临时目录。

  • 存储卷挂载方式:如果NAS以PVC的方式挂载到数据目录,不支持使用Daemonset方式部署Logtail,建议使用Sidecar方式或Deployment方式部署Logtail并完成日志采集。具体操作,请参见通过Sidecar方式采集容器文本日志通过业务容器和Logtail容器共享PVC实现日志采集

  • 日志文件路径:

    • 容器内文件路径暂不支持存在软链接,请按实际路径配置采集目录。

    • 如果业务容器的数据目录通过数据卷(Volume)挂载,则填写的文件路径不能短于挂载点路径。例如/var/log/service目录是数据卷挂载的路径,则设置采集目录为/var/log将无法采集该目录下的日志,因为采集目录比挂载路径短。必须设置采集目录为/var/log/service或更深的目录。

  • 日志文件采集停止:

    • docker:当容器被停止时,Logtail会立刻释放容器文件句柄,容器可正常退出。如果在容器停止前,出现因网络延迟、资源占用多等原因导致的采集延时,可能会丢失容器停止前的部分日志。

    • containerd:当容器被停止时,Logtail会持续持有容器内文件的句柄(即保持对日志文件的打开状态),直至所有日志文件内容发送完毕。因此,当出现网络延迟、资源占用多等原因导致的采集延时时,可能会导致业务容器不能及时销毁。

前提条件

  • 已安装Logtail组件。具体操作,请参见安装Logtail组件(阿里云Kubernetes集群)

  • 在安装Logtail组件时所使用的Project中已创建Logstore。具体操作,请参见创建Logstore

  • 安装Logtail的主机需开放80(HTTP)端口和443(HTTPS)端口。ECS实例的端口由安全组控制,创建安全组的步骤请参见创建安全组

  • 目标容器持续新增日志。Logtail只采集增量日志。如果下发logtail采集配置后,日志文件无更新,则Logtail不会采集该文件中的日志。更多信息,请参见读取日志

  • 对于不同容器引擎,必须确认对应的UNIX域套接字存在,而且确保Logtail有相应UNIX域套接字的访问权限。

    • Docker:/run/docker.sock

    • Containerd:/run/containerd/containerd.sock

创建Logtail采集配置

警告

通过CRD方式创建的配置,在控制台上对其修改不会同步到CRD中。因此,如需修改由CRD创建的配置内容,只能修改CRD资源,不要直接在控制台操作,避免导致配置不一致。

控制台

  1. 登录日志服务控制台

  2. 单击控制台右侧的快速接入数据,在接入数据区域单击Kubernetes-文件卡片。

    image

  3. 选择目标Project和Logstore,单击下一步。选择您在安装Logtail组件时所使用的Project。Logstore为您自定义创建的Logstore。

  4. 机器组配置页面。

    1. 根据实际场景,单击以下页签:

      • K8s场景 > ACK Daemonset

      • K8s场景 > 自建集群Daemonset

        重要

        不同页签的后续配置步骤不同,请根据实际需求正确选择。

    2. 确认目标机器组已在应用机器组列表中,然后单击下一步。在ACK中安装Logtail组件后,日志服务自动创建名为k8s-group-${your_k8s_cluster_id}的机器组,您可以直接使用该机器组。

      重要
  5. 创建Logtail采集配置,单击下一步创Logtail采集配置,日志服务开始采集日志。

    说明

    Logtail采集配置生效时间最长需要3分钟,请耐心等待。

    全局配置

    配置项

    说明

    配置名称

    Logtail配置名称,在其所属Project内必须唯一。创建Logtail配置成功后,无法修改其名称。

    日志主题类型

    选择日志主题(Topic)的生成方式。更多信息,请参见日志主题

    • 机器组Topic:设置为机器组的Topic属性,用于明确区分不同主机产生的日志。

    • 文件路径提取:设置为文件路径正则,则需要设置自定义正则,用正则表达式从路径里提取一部分内容作为Topic。用于区分不同用户或实例产生的日志。

    • 自定义:自定义日志主题。

    高级参数

    Logtail配置的部分参数需要手动输入,请参见创建Logtail流水线配置

    输入配置

    参数名称

    说明

    Logtail部署模式

    Logtail部署模式,选择DaemonSet。

    文件路径类型

    选择待采集的文件路径是容器内路径或宿主机路径。对于通过hostPath方式挂载数据卷的容器,如果您希望直接采集其在宿主机上映射的日志文件,请选择宿主机路径,其余情况请选择容器内路径。

    文件路径

    • 如果目标容器节点是Linux系统,则日志路径必须以正斜线(/)开头,例如/apsara/nuwa/**/app.Log

    • 如果目标容器节点是Windows系统,则日志路径必须以盘符开头,例如C:\Program Files\Intel\**\*.Log

    目录名和文件名均支持完整模式和通配符模式,文件名规则请参见Wildcard matching。其中,日志路径通配符只支持星号(*)和半角问号(?)。

    日志文件查找模式为多层目录匹配,即符合条件的指定目录(包含所有层级的目录)下所有符合条件的文件都会被查找到。例如:

    • /apsara/nuwa/**/*.log表示/apsara/nuwa目录(包含该目录的递归子目录)中后缀名为.log的文件。

    • /var/logs/app_*/**/*.log表示/var/logs目录下所有符合app_*格式的目录(包含该目录的递归子目录)中后缀名为.log的文件。

    • /var/log/nginx/**/access*表示/var/log/nginx目录(包含该目录的递归子目录)中以access开头的文件。

    最大目录监控深度

    设置日志目录被监控的最大深度,即文件路径中通配符**匹配的最大目录深度。0代表只监控本层目录。

    警告

    请按最小需要原则配置目录监控深度,过大的目录深度导致Logtail占用更多的监控资源,造成日志采集延迟。

    启用容器元信息预览

    打开启用容器元信息预览后,您可以在创建Logtail配置后,查看容器元信息,包括匹配容器信息和全量容器信息。

    容器过滤

    • Logtail版本

      • Logtail 1.0.34以下版本,只支持通过环境变量容器Label进行容器过滤。

      • Logtail 1.0.34及以上版本,推荐使用Kubernetes层级的信息(Pod名称Namespace容器名称容器Label等)进行容器过滤。

    • 过滤条件说明

      重要
      • 容器Label为Docker inspect中的Label,不是Kubernetes中的Label。如何获取,请参见获取容器Label

      • 环境变量为容器启动中配置的环境变量信息。如何获取,请参见获取容器环境变量

      1. Kubernetes中的Namespace和容器名称会映射到容器Label中,分别为io.kubernetes.pod.namespaceio.kubernetes.container.name,推荐使用这两个容器Label进行容器过滤。例如,某Pod所属的命名空间为backend-prod,容器名为worker-server,如果您要采集包含该容器的日志,可以设置容器Label白名单为io.kubernetes.pod.namespace : backend-prodio.kubernetes.container.name : worker-server

      2. 如果以上两个容器Label不满足过滤需求,请使用环境变量的黑白名单进行容器过滤。

    • K8s Pod名称正则匹配

      通过Pod名称指定待采集的容器,支持正则匹配。例如设置为^(nginx-log-demo.*)$,表示匹配以nginx-log-demo开头的Pod下的所有容器。

    • K8s Namespace正则匹配

      通过Namespace名称指定采集的容器,支持正则匹配。例如设置为^(default|nginx)$,表示匹配nginx命名空间、default命名空间下的所有容器。

    • K8s容器名称正则匹配

      通过容器名称指定待采集的容器(Kubernetes容器名称是定义在spec.containers中),支持正则匹配。例如设置为^(container-test)$,表示匹配所有名为container-test的容器。

    • 容器label白名单

      通过容器Label白名单指定待采集的容器。

      重要

      请勿设置相同的标签名,如果重名只生效一个。

      • 如果设置了标签名但不设置标签值,则容器Label中包含该标签名的容器都匹配。

      • 如果设置了标签名标签值,则容器Label中包含该标签名:标签值的容器才匹配。

        标签值默认为字符串匹配,即只有标签值和容器Label的值完全相同才会匹配。如果该值以^开头并且以$结尾,则为正则匹配。例如设置标签名app,设置标签值^(test1|test2)$,表示匹配容器Label中包含app:test1app:test2的容器。

      多个白名单之间为或关系,即只要容器Label满足任一白名单即可被匹配。

    • 容器label黑名单

      通过容器Label黑名单排除不采集的容器。

      重要

      请勿设置相同的标签名,如果重名只生效一个。

      • 如果设置了标签名但不设置标签值,则容器Label中包含该标签名的容器都被排除。

      • 如果设置了标签名标签值,则容器Label中包含该标签名:标签值的容器才会被排除。

        标签值默认为字符串匹配,即只有标签值和容器Label的值完全相同才会被排除。如果该值以^开头并且以$结尾,则为正则匹配。例如设置标签名app,设置标签值^(test1|test2)$,表示排除容器Label中包含app:test1、app:test2的容器。

      多个黑名单之间为或关系,即只要容器Label满足任一黑名单对即可被排除。

    • 环境变量白名单

      通过环境变量白名单指定待采集的容器。

      • 如果设置了环境变量名但不设置环境变量值,则容器环境变量中包含该环境变量名的容器都匹配。

      • 如果设置了环境变量名环境变量值,则容器环境变量中包含该环境变量名和值的容器才匹配。

        环境变量值默认为字符串匹配,即只有环境变量值和环境变量的值完全相同才会匹配。如果该值以^开头并且以$结尾,则为正则匹配,例如:设置环境变量名NGINX_SERVICE_PORT,设置环境变量值^(80|6379)$,表示可匹配服务端口为80、6379的容器。

      多个白名单之间为或关系,即只要容器的环境变量满足任一键值对即可被匹配。

    • 环境变量黑名单

      通过环境变量黑名单排除不采集的容器。

      • 如果设置了环境变量名但不设置环境变量值,则容器环境变量中包含该环境变量名的容器的日志都将被排除。

      • 如果设置了环境变量名环境变量值,则容器环境变量中包含该环境变量名和值的容器才会被排除。

        环境变量值默认为字符串匹配,即只有环境变量值和环境变量的值完全相同才会被排除。如果该值以^开头并且以$结尾,则为正则匹配,例如:设置环境变量名NGINX_SERVICE_PORT,设置环境变量值^(80|6379)$,表示可排除服务端口为80、6379的容器。

      多个黑名单之间为或关系,即只要容器的环境变量满足任一键值对即可被排除。

    • K8s Pod标签白名单

      通过Kubernetes Pod标签白名单指定待采集的容器。

      • 如果设置了标签名但不设置标签值,则Pod标签中包含该标签名的容器都匹配。

      • 如果设置了标签标签值,则Pod标签中包含该标签名:标签值的容器才匹配。

        标签值默认为字符串匹配,即只有标签值和Pod标签的值完全相同才会匹配。如果该值以^开头并且以$结尾,则为正则匹配,例如:设置标签名environment,设置标签值^(dev|pre)$,表示匹配Pod标签中包含environment:devenvironment:pre的容器。

      多个白名单之间为或关系,即只要Pod标签满足任一键值对即可。

    • K8s Pod标签黑名单

      通过Kubernetes Pod标签黑名单排除不采集的容器。

      • 如果设置了标签名但不设置标签值,则Pod标签中包含该标签名的容器都将被排除。

      • 如果设置了标签标签值,则Pod标签中包含该标签名和标签值的容器才会被排除。

        标签值默认为字符串匹配,即只有标签值和Pod标签的值完全相同才会被排除。如果该值以^开头并且以$结尾,则为正则匹配,例如:设置标签名environment,设置标签值^(dev|pre)$,表示排除Pod标签中包含environment:devenvironment:pre的容器。

      多个黑名单之间为或关系,即只要Pod标签满足任一键值对即可被排除。

    日志标签富化

    环境变量相关tag和Pod标签相关tag。

    文件编码

    日志文件的编码格式。

    首次采集大小

    配置首次生效时,匹配文件的起始采集位置距离文件结尾的大小。首次采集大小设定值为1024 KB。

    • 首次采集时,如果文件小于1024 KB,则从文件内容起始位置开始采集。

    • 首次采集时,如果文件大于1024 KB,则从距离文件末尾1024 KB的位置开始采集。

    您可以通过此处修改首次采集大小,取值范围为0~10485760,单位为KB。

    采集黑名单

    打开采集黑名单开关后,可进行黑名单配置,即可在采集时忽略指定的目录或文件。支持完整匹配和通配符匹配目录和文件名。其中,通配符只支持星号(*)和半角问号(?)。

    重要
    • 如果您在配置日志路径时使用了通配符,但又需要过滤掉其中部分路径,则需在采集黑名单中填写对应的完整路径来保证黑名单配置生效。

      例如您配置日志路径/home/admin/app*/log/*.log,但要过滤/home/admin/app1*目录下的所有子目录,则需选择目录黑名单,配置目录为/home/admin/app1*/** 。如果配置为/home/admin/app1*,黑名单不会生效。

    • 匹配黑名单过程存在计算开销,建议黑名单条目数控制在10条内。

    • 目录路径不能以正斜线(/)结尾,例如将设置路径为/home/admin/dir1/,目录黑名单不会生效。

    支持按照文件路径黑名单、文件黑名单、目录黑名单设置,详细说明如下:

    文件路径黑名单

    • 选择文件路径黑名单,配置路径为/home/admin/private*.log,则表示在采集时忽略/home/admin/目录下所有以private开头,以.log结尾的文件。

    • 选择文件路径黑名单,配置路径为/home/admin/private*/*_inner.log,则表示在采集时忽略/home/admin/目录下以private开头的目录内,以_inner.log结尾的文件。例如/home/admin/private/app_inner.log文件被忽略,/home/admin/private/app.log文件被采集。

    文件黑名单

    选择文件黑名单,配置文件名为app_inner.log,则表示采集时忽略所有名为app_inner.log的文件。

    目录黑名单

    • 选择目录黑名单,配置目录为/home/admin/dir1,则表示在采集时忽略/home/admin/dir1目录下的所有文件。

    • 选择目录黑名单,配置目录为/home/admin/dir*,则表示在采集时忽略/home/admin/目录下所有以dir开头的子目录下的文件。

    • 选择目录黑名单,配置目录为/home/admin/*/dir,则表示在采集时忽略/home/admin/目录下二级目录名为dir的子目录下的所有文件。例如/home/admin/a/dir目录下的文件被忽略,/home/admin/a/b/dir目录下的文件被采集。

    允许文件多次采集

    默认情况下,一个日志文件只能匹配一个Logtail配置。如果文件中的日志需要被采集多份,需打开允许文件多次采集开关。

    高级参数

    Logtail配置的部分参数需要手动输入,请参见创建Logtail流水线配置

    处理配置

    配置项

    说明

    日志样例

    待采集日志的样例,请务必使用实际场景的日志。日志样例可协助您配置日志处理相关参数,降低配置难度。支持添加多条样例,总长度不超过1500个字符。

    [2023-10-01T10:30:01,000] [INFO] java.lang.Exception: exception happened
        at TestPrintStackTrace.f(TestPrintStackTrace.java:3)
        at TestPrintStackTrace.g(TestPrintStackTrace.java:7)
        at TestPrintStackTrace.main(TestPrintStackTrace.java:16)

    多行模式

    • 多行日志的类型:

      • 自定义:通过行首正则表达式,合并多行日志为一条完整的日志信息。

      • 多行JSON:一个JSON对象跨多行。

    • 切分失败处理方式:

      • 丢弃:丢弃无法切分的日志。

      • 保留单行:保留单行日志。

    处理模式

    处理插件组合,包括原生插件拓展插件。有关处理插件的更多信息,请参见处理插件概述

    重要

    处理插件的使用限制,请以控制台页面的提示为准。

    • 低于2.0版本的Logtail:

      • 目前,原生插件仅可用于采集文本日志。

      • 不支持同时添加原生插件和扩展插件。

      • 使用原生插件时,须符合如下要求:

        • 第一个处理插件必须为正则解析插件、分隔符模式解析插件、JSON解析插件、NGINX模式解析插件、Apache模式解析插件或IIS模式解析插件。

        • 第一个处理插件之后仅允许存在1个时间解析处理插件,1个过滤插件和多个脱敏插件。

    • 2.0版本的Logtail:

      • 原生处理插件可任意组合。

      • 原生处理插件和扩展处理插件可同时使用,但扩展处理插件只能出现在所有的原生处理插件之后。

  6. 创建索引预览数据,然后单击下一步。日志服务默认开启全文索引。您也可以根据采集到的日志,手动创建字段索引,或者单击自动生成索引,日志服务将自动生成字段索引。更多信息,请参见创建索引

    重要

    如果需要查询日志中的所有字段,建议使用全文索引。如果只需查询部分字段、建议使用字段索引,减少索引流量。如果需要对字段进行分析(SELECT语句),必须创建字段索引。

  7. 单击查询日志,系统将跳转至Logstore查询分析页面。

    您需要等待1分钟左右,待索引生效后,才能在原始日志页签中,查看已采集到的日志。更多信息,请参见查询和分析日志

CRD

创建Logtail采集配置

您只需要定义AliyunLogConfig CRD即可创建Logtail配置。创建完成后,系统自动应用该Logtail配置。如果您要删除Logtail配置只需删除对应的CRD资源即可。

  1. 登录Kubernetes集群。

  2. 执行如下命令创建一个YAML文件。

    cube.yaml为文件名,请根据实际情况替换。

    vim cube.yaml
  3. 在YAML文件输入如下脚本,并根据实际情况设置其中的参数。

    重要
    • 请确保configName字段值在安装Logtail组件的Project中唯一。

    • 如果多个CRD关联同一个Logtail配置,则删除或修改任意一个CRD均会影响到该Logtail配置,导致其他关联该Logtail配置的CRD状态与日志服务中Logtail配置的状态不一致。

    apiVersion: log.alibabacloud.com/v1alpha1      # 使用默认值,无需修改。
    kind: AliyunLogConfig                          # 使用默认值,无需修改。
    metadata:
      name: simple-stdout-example                  # 设置资源名,在当前Kubernetes集群内唯一。
    spec:
      project: k8s-my-project                      # [可选]设置Project名称。默认为安装Logtail组件时设置的Project。
      logstore: k8s-stdout                         # 设置Logstore名称。如果您所指定的Logstore不存在,日志服务会自动创建。
      logstoreMode: standard                       # [可选]设置Logstore类型,该参数值仅在新建Logstore时生效。
      shardCount: 2                                # [可选]设置Shard数量。默认值为2,取值范围1~10。
      lifeCycle: 90                                # [可选]设置Logstore中数据的存储时间,该参数值仅在新建Logstore时生效。默认值为90,取值范围为1~3650。其中,3650天为永久存储。
      logtailConfig:                               # 设置Logtail配置。
        inputType: plugin                          # 设置采集的数据源类型。file表示采集文本日志或plugin表示采集标准输出。
        configName: simple-stdout-example          # 设置Logtail配置的名称,必须与资源名(metadata.name)相同。
        inputDetail:                               # 设置Logtail配置的详细信息,具体配置请参见本文下方的示例。
          ...

    参数说明

    参数

    数据类型

    是否必填

    说明

    project

    string

    Project名称。默认为安装Logtail组件时设置的Project。

    logstore

    string

    Logstore名称。

    如果您所指定的Logstore不存在,日志服务会自动创建。

    logstoreMode

    string

    Logstore类型。更多信息,请参见管理Logstore。可选值:

    • query:查询型Logstore。

    • standard:标准型Logstore。

    重要
    • 该参数值仅在新建Logstore时生效,即您只能在创建Logstore时,指定Logstore类型。如果您在logstore参数中指定的Logstore已存在,则修改该参数值,不会生效。

    • 针对alibaba-log-controller 0.3.3及以上版本,该设置才会生效。

    shardCount

    int

    Shard数量。默认值为2,取值范围为1~10。

    lifeCycle

    int

    Logstore中数据的存储时间。默认值为90,取值范围为1~3650。其中,3650天为永久存储。

    重要

    该参数值仅在新建Logstore时生效,即您只能在创建Logstore时指定数据的存储时间。如果您在logstore参数中指定的Logstore已存在,则修改该参数值不会生效。

    machineGroups

    array

    机器组。安装Logtail组件时,日志服务会自动创建名为k8s-group-${your_k8s_cluster_id}的机器组。

    logtailConfig

    object

    • 详细的参数说明请参见Logtail配置。配置示例请参见文末的CRD配置示例

    • Logtail版本

      • Logtail 1.0.34以下版本,只支持通过环境变量容器Label进行容器过滤。

      • Logtail 1.0.34及以上版本,推荐使用Kubernetes层级的信息(Pod名称Namespace容器名称容器Label等)进行容器过滤。

    • 过滤条件说明

      重要
      1. Kubernetes中的Namespace和容器名称会映射到容器Label中,分别为io.kubernetes.pod.namespaceio.kubernetes.container.name,推荐使用这两个容器Label进行容器过滤。例如,某Pod所属的命名空间为backend-prod,容器名为worker-server,如果您要采集包含该容器的日志,可以设置容器Label白名单为io.kubernetes.pod.namespace : backend-prodio.kubernetes.container.name : worker-server

      2. 如果以上两个容器Label不满足过滤需求,请使用环境变量的黑白名单进行容器过滤。

  4. 执行如下命令使Logtail配置生效。Logtail配置生效后,Logtail开始采集各个容器上的标准输出或文本日志,并发送到日志服务中。

    cube.yaml为文件名,请根据实际情况替换。

    kubectl apply -f cube.yaml
    重要

    采集到日志后,您需要先创建索引,才能在Logstore中查询和分析日志。具体操作,请参见创建索引

查看Logtail采集配置

控制台

  1. 登录日志服务控制台

  2. 在Project列表区域,单击目标Project。

    image

  3. 日志存储 > 日志库页签中,单击目标日志库前面的>,依次选择数据接入 > Logtail配置
  4. 单击目标Logtail采集配置,查看Logtail采集配置详情。

CRD

查看当前Kubernetes集群中所有的Logtail采集配置

您可以执行kubectl get aliyunlogconfigs命令进行查看,返回结果如下图所示。查看Logtail采集配置

查看Logtail采集配置的详细信息和状态

您可以执行kubectl get aliyunlogconfigs config_name -o yaml命令进行查看。其中,config_name为Logtail配置的名称,请根据实际情况替换。 返回结果如下图所示。

执行结果中的status字段和statusCode字段表示Logtail配置的状态。

  • 如果statusCode字段的值为200,表示应用Logtail配置成功。

  • 如果statusCode字段的值为非200,表示应用Logtail配置失败。

查看logtail采集配置

CRD配置示例

采集容器文本日志时,需将inputType设置为file,并将具体信息填写到inputDetail内,具体字段及说明请参见上文的创建Logtail配置

通过Kubernetes信息过滤容器

  • 说明

    采集指定容器中/data/logs/app_1目录下simple.LOG文件中的日志。过滤容器的条件如下所示:

    • default命名空间。

    • 名称以nginx-log-demo开头的Pod。

    • 名称为nginx-log-demo-0的容器。

    • Kubernetes Label中Keyjob-nameValuenginx-log-demo为开头。

    说明

    Logtail 1.0.34及以上版本支持通过Kubernetes Namespace名称、Pod名称、容器名称或Kubernetes Label过滤容器。

  • 配置示例

    1. 获取Kubernetes层级的信息。

      1. 获取Pod信息。k8s资源

      2. 获取Namespace等信息。K8s资源

      3. 获取Kubernetes Label。K8s资源

    2. 创建Logtail配置

      配置示例如下所示。参数说明,请参见上文的创建Logtail采集配置CRD页签。

      说明

      IncludeK8sLabelExcludeK8sLabelK8sNamespaceRegexK8sPodRegexK8sContainerRegexExternalEnvTagExternalK8sLabelTag等Kubernetes信息相关的参数,必须配置在advanced参数的k8s参数下。

      apiVersion: log.alibabacloud.com/v1alpha1
      kind: AliyunLogConfig
      metadata:
        # 设置资源名,在当前Kubernetes集群内唯一。
        name: simple-file-example
      spec:
         # 设置Logstore名称。如果您所指定的Logstore不存在,日志服务会自动创建。
        logstore: k8s-file
        # 设置Logtail配置。
        logtailConfig:
          # 设置采集的数据源类型。采集文本日志时,需设置为file。
          inputType: file
          # 设置Logtail配置的名称,必须与资源名(metadata.name)相同。
          configName: simple-file-example
          inputDetail:
            # 指定通过极简模式采集文本日志。
            logType: common_reg_log
            # 设置日志文件所在路径。
            logPath: /data/logs/app_1
            # 设置日志文件的名称。支持通配符星号(*)和半角问号(?),例如log_*.log。
            filePattern: simple.LOG
            # 采集容器的文本日志时,需设置dockerFile为true。
            dockerFile: true
            #设置容器过滤条件。
            advanced:
              k8s:
                K8sNamespaceRegex: ^(default)$
                K8sPodRegex: '^(nginx-log-demo.*)$'
                K8sContainerRegex: ^(nginx-log-demo-0)$
                IncludeK8sLabel:
                  job-name: "^(nginx-log-demo.*)$"

容器日志文本默认字段

每条容器文本日志默认包含的字段如下表所示。

字段名称

说明

__tag__:__hostname__

容器宿主机的名称。

__tag__:__path__

容器内日志文件的路径。

__tag__:_container_ip_

容器的IP地址。

__tag__:_image_name_

容器使用的镜像名称。

__tag__:_pod_name_

Pod的名称。

__tag__:_namespace_

Pod所属的命名空间。

__tag__:_pod_uid_

Pod的唯一标识符(UID)。

问题排查

当您使用Logtail采集容器(标准容器、Kubernetes)日志遇到异常情况时,您可以参见如下内容进行排查。

  • 本页导读 (1)
文档反馈