文档

通过DaemonSet-控制台方式采集容器文本日志

更新时间:

本文介绍通过DaemonSet方式在容器上部署Logtail后,如何在日志服务控制台上创建Logtail配置采集容器文本日志。

前提条件

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

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

  • 目标容器持续产生日志。

    重要

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

限制说明

  • 采集停止策略:当容器被停止后,Logtail监听到容器die的事件后会停止该容器日志的采集。如果此时采集出现延迟,则可能丢失停止前的部分日志。

  • Docker存储驱动限制:目前只支持overlay、overlay2,其他存储驱动需将日志所在目录通过数据卷挂载为临时目录。

    如果日志目录是以PVC方式挂载到NAS,则不支持使用Daemonset方式部署Logtail,建议使用Sidecar方式部署Logtail,并完成日志采集。具体操作,请参见通过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,请确保该路径存在且具备访问权限。

操作步骤

  1. 登录日志服务控制台

  2. 接入数据区域,找到并单击Kubernetes-文件

  3. 选择目标Project和Logstore,单击下一步

    选择您在安装Logtail组件时所使用的Project。Logstore为您自定义创建的Logstore。

  4. K8s场景 > ACK Daemonset页签中,单击使用现有机器组

    安装Logtail组件后,日志服务自动创建名为k8s-group-${your_k8s_cluster_id}的机器组,您可以直接使用该机器组。

  5. 选中目标机器组(k8s-group-${your_k8s_cluster_id}),将该机器组从源机器组移动到应用机器组,单击下一步

    重要

    如果机器组心跳为FAIL,您可单击自动重试。如果还未解决,请参见Logtail机器组无心跳进行排查。

  6. 创建Logtail配置,单击下一步

    全局配置

    参数名称

    说明

    配置名称

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

    日志样例

    待采集日志的样例,请务必使用实际场景的日志。日志样例可协助您配置日志处理相关参数,降低配置难度。例如:

    [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)

    支持添加多条样例,总长度不超过1500个字符。

    日志主题类型

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

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

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

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

    输入配置

    参数名称

    说明

    Logtail部署模式

    Logtail部署模式,选择Daemonset。

    文件路径类型

    选择采集容器日志还是宿主机日志。本文以采集容器日志为例。

    文件路径

    根据日志文件的位置,设置日志目录和文件名称。

    • 如果目标容器节点是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 1.0.34以下版本,只支持通过环境变量、容器Label进行容器过滤。

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

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

    重要
    • 容器Label为Docker inspect中的Label,不是Kubernetes中的Label。如何获取,请参见获取容器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标签满足任一键值对即可被排除。

    日志标签富化

    设置日志标签。

    环境变量相关

    添加环境变量相关的标签后,日志服务将在日志中新增环境变量相关字段。例如设置环境变量名VERSION,设置Tag名env_version,当容器中包含环境变量VERSION=v1.0.0时,会将该信息添加到日志中,即添加字段__tag__:__env_version__: v1.0.0

    Pod标签相关

    添加Pod相关的标签后,日志服务将在日志中新增Pod标签相关字段。例如设置Pod标签名environment,设置Tag名env,当容器中包含Pod标签为environment=pre时,会将该信息添加到日志中,即添加字段__tag__:__env__: pre

    文件编码

    选择日志文件的编码格式。

    首次采集大小

    配置首次生效时,匹配文件的起始采集位置距离文件结尾的大小。首次采集大小设定值为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会根据插件配置顺序逐一执行,将日志解析为结构化数据。Logtail原生插件如下所示,相关的使用限制,请参见使用限制

    当您的业务日志太复杂或不固定,原生插件无法满足日志解析需求时,您可以使用Logtail拓展插件。更多信息,请参见Logtail插件概述

    单击下一步表示创建Logtail配置,日志服务开始采集日志。

    说明

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

  7. 预览数据及创建索引,然后单击下一步

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

    重要

    如果您要查询和分析日志,那么全文索引和字段索引必须至少启用一种。同时启用时,以字段索引为准。

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

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

默认字段

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

字段名称

说明

_image_name_

镜像名

_container_name_

容器名

_pod_name_

Pod名

_namespace_

Pod所在的命名空间

_pod_uid_

Pod的唯一标识

_container_ip_

Pod的IP地址

问题排查

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

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