全部产品
Search
文档中心

日志服务:使用分隔符模式采集日志

更新时间:Aug 29, 2023

日志服务提供Logtail分隔符模式快速采集日志。采集到日志后,您可以进行多维度分析、加工、投递等操作。本文介绍如何通过日志服务控制台创建分隔符模式的Logtail配置采集日志。

前提条件

  • 已创建Project和Logstore。更多信息,请参见创建Project创建Logstore
  • 用于安装Logtail的服务器具备访问远端服务器80端口和443端口的能力。
  • 目标服务器持续产生日志。
    重要 Logtail只采集增量日志。如果下发Logtail配置后,日志文件无更新,则Logtail不会采集该文件中的日志。更多信息,请参见读取文件

背景信息

Logtail分隔符模式支持通过分隔符将一条日志分割成多个Value,您需要为Value指定对应的Key。分隔符模式只适用于采集单行日志。如果您要采集多行日志,建议您使用极简多行模式完整正则模式

  • 原始日志

    05/May/2022:13:30:28,10.10.*.*,"POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1",200,18204,aliyun-sdk-java
  • 被采集到日志服务后的日志

    设置分隔符为半角逗号(,)。分隔符模式

操作步骤

  1. 登录日志服务控制台
  2. 接入数据区域,选择分隔符-文本日志

  3. 选择目标Project和Logstore,单击下一步
  4. 创建机器组。
    • 如果您已有可用的机器组,请单击使用现有机器组
    • 如果您还没有可用的机器组,请执行以下操作(以ECS为例)。
      1. ECS机器页签中,通过手动选择实例方式选择目标ECS实例,单击创建

        具体操作,请参见安装Logtail(ECS实例)

        重要 如果您的服务器是与日志服务属于不同账号的ECS、其他云厂商的服务器和自建IDC时,您需要手动安装Logtail。更多信息,请参见安装Logtail(Linux系统)安装Logtail(Windows系统)

        手动安装Logtail后,您必须在该服务器上手动配置用户标识。具体操作,请参见配置用户标识

      2. 安装完成后,单击确认安装完毕
      3. 创建机器组页面,输入名称,单击下一步

        日志服务支持创建IP地址机器组和用户自定义标识机器组,详细参数说明请参见创建IP地址机器组创建用户自定义标识机器组

  5. 选中目标机器组,将该机器组从源机器组移动到应用机器组,单击下一步
    重要 创建机器组后立刻应用,可能因为连接未生效,导致心跳为FAIL,您可单击自动重试。如果还未解决,请参见Logtail机器组无心跳进行排查。
  6. 创建Logtail配置,单击下一步

    参数

    描述

    配置名称

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

    您也可以单击导入其他配置,导入已创建的Logtail配置。

    日志路径

    根据日志在服务器上的位置,设置日志目录和文件名称。

    • 如果是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开头的文件。
    说明 日志路径通配符只支持星号(*)和半角问号(?)。
    • 星号(*)表示匹配多个任意字符。
    • 半角问号(?)表示匹配单个任意字符。

    是否为Docker文件

    如果是Docker容器中的文件,您可打开是否为Docker文件开关,配置内部路径与容器Tag。Logtail会自动监测容器的创建和销毁,并根据Tag进行容器过滤,采集指定容器的日志。具体操作,请参见通过DaemonSet-控制台方式采集容器文本日志

    设置采集黑名单

    打开设置采集黑名单开关后,可进行黑名单配置,即可在采集时忽略指定的目录或文件。支持完整匹配和通配符模式匹配目录和文件名。例如:

    • 选择按目录路径,配置路径为/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目录下的内容被采集。

    • 选择按文件路径,配置路径为/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文件被采集。

    说明
    • 目录通配符只支持星号(*)和半角问号(?)。
      • 星号(*)表示匹配多个任意字符。
      • 半角问号(?)表示匹配单个任意字符。
    • 如果您在配置日志路径时使用了通配符,但又需要过滤掉其中部分路径时,需在黑名单中填写对应的完整路径来保证过滤生效。

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

    • 匹配黑名单过程存在计算开销,建议黑名单条目数在10条内。
    • 目录路径不能以正斜线(/)结尾,例如将设置路径为/home/admin/dir1/,目录黑名单不会生效。

    模式

    采集模式,默认为分隔符模式,可修改为其它模式。

    日志样例

    请务必使用实际场景的日志。例如:

    127.0.0.1|#|-|#|13/Apr/2020:09:44:41 +0800|#|GET /1 HTTP/1.1|#|0.000|#|74|#|404|#|3650|#|-|#|curl/7.29.0

    分隔符

    请根据您的日志格式选择正确的分隔符,例如竖线(|)。更多信息,请参见附录:分隔符简介

    说明

    指定分隔符为不可见字符时,您需要查找不可见字符在ASCII码中对应的十六进制数,输入的格式为0x不可见字符在ASCII码中对应的十六进制数。例如ASCII码中排行为1的不可见字符填写为0x01

    引用符

    当日志字段内容中包含分隔符时,需要指定引用符进行包裹,被引用符包裹的内容会被日志服务解析为一个完整字段。请根据您的日志格式选择正确的引用符。

    说明

    指定引用符为不可见字符时,您需要查找不可见字符在ASCII码中对应的十六进制数,输入的格式为0x不可见字符在ASCII码中对应的十六进制数。例如ASCII码中排行为1的不可见字符填写为0x01

    日志抽取内容

    日志服务会根据您输入的日志样例及选择的分隔符提取日志内容,并将其定义为Value,您需要分别为Value指定对应的Key。

    Key只能包括字母、数字或下划线(_),且只能以字母或下划线(_)开头。最大长度为128字节。

    是否接受部分字段

    如果日志中分割出的字段数少于配置的Key数量,是否上传已解析的字段。开启表示上传,关闭表示丢弃本条日志。

    例如日志为11|22|33|44|55,分隔符为竖线(|),日志内容将被解析为1122334455,为其分别设置Key为ABCDE

    • 打开是否接受部分字段开关,则采集日志11|22|33|55时,55会作为Key D的Value被上传到日志服务。

    • 关闭是否接受部分字段开关,则采集日志11|22|33|55时,该条日志会因字段与Key不匹配而被丢弃。

      说明

      Linux Logtail 1.0.28及以上版本或Window Logtail 1.0.28.0及以上版本支持配置分隔符模式的是否接受部分字段参数。

    使用系统时间

    配置日志时间,具体说明如下:

    • 打开使用系统时间开关,则日志时间为采集日志时,Logtail所在主机或容器的系统时间。
    • 关闭使用系统时间开关,则日志时间为原始日志中自带的时间,即您需要配置指定时间字段Key名称为原始日志中的时间字段,还需根据时间内容配置时间转换格式。时间格式详情请参见时间格式

      例如原始日志中的时间信息为 "time": "05/May/2022:13:30:28",则您可以配置指定时间字段Key名称time时间转换格式%d/%b/%Y:%H:%M:%S

    重要
    • 当使用DaemonSet方式采集容器日志时,由于Logtail容器的时区为UTC,如果业务容器的时区为非UTC(例如设置了容器与节点使用相同时区),则必须在本Logtail配置的高级选项中,设置时区属性自定义时区,并选择时区为业务容器的时区,否则日志时间将错误偏移。
    • 默认情况下,日志服务中的日志时间戳精确到秒。如果原始日志中的时间具备更高的时间精度(毫秒、微秒或纳秒),并希望在日志服务中保留该时间精度,可在Logtail采集配置的扩展配置中添加enable_precise_timestamp参数完成设置。

    丢弃解析失败日志

    是否丢弃解析失败的日志,具体说明如下:

    • 打开丢弃解析失败日志开关,解析失败的日志不上传到日志服务。
    • 关闭丢弃解析失败日志开关,日志解析失败时,原始日志将作为__raw_log__字段的值上传到日志服务。

    最大监控目录深度

    设置日志目录被监控的最大深度。最大深度范围:0~1000,0代表只监控本层目录。

    请根据您的需求选择高级配置。如果没有特殊需求,建议保持默认配置。
    参数描述
    启用插件处理当您的业务日志太复杂或不固定,固定解析模式(Nginx模式、完整正则模式、JSON模式等)无法满足日志解析需求时,您可以打开启用插件处理开关,添加Logtail插件解析日志。
    日志服务会根据您选择的采集模式生成默认的插件配置,您可以在默认配置后面添加其他插件配置,即您可以添加多个processors配置。更多信息,请参见概述
    重要 打开启用插件处理开关后,上传原始日志、时区属性、丢弃解析失败日志、过滤器配置、接受部分字段(分隔符模式)等功能不可用。
    上传原始日志打开上传原始日志开关后,原始日志将作为__raw__字段的值与解析过的日志一起上传到日志服务。
    Topic生成方式设置Topic生成方式。更多信息,请参见日志主题
    • 空-不生成Topic:默认选项,表示设置Topic为空字符串,在查询日志时不需要输入Topic即可查询。
    • 机器组Topic属性:设置为机器组Topic属性,用于明确区分不同服务器产生的日志数据。
    • 文件路径正则:设置为文件路径正则,则需要设置自定义正则,用正则表达式从路径里提取一部分内容作为Topic。用于区分不同用户或实例产生的日志数据。
    日志文件编码设置日志文件编码格式,取值为utf8、gbk。
    时区属性采集日志时,日志时间的时区属性。
    • 机器时区:默认为Logtail所在主机或容器的时区。
    • 自定义时区:手动选择时区。
    超时属性如果一个日志文件在指定时间内没有任何更新,则认为监控已超时。
    • 永不超时:持续监控所有日志文件,永不超时。
    • 30分钟超时:如果日志文件在30分钟内没有更新,则认为监控超时,Logtail不再监控该文件。

      选择30分钟超时时,还需设置最大超时目录深度,范围为1~3。

    过滤器配置只采集符合过滤条件的日志,过滤条件包括keyRegex字段,分别为目标字段的名称和用于过滤的正则表达式。各个过滤条件之间为与关系。
    重要
    • 极简模式下,只生成content字段。如果您要设置过滤条件,只能将Key设置为content
    • 此处的正则表达式仅支持全文匹配,不支持关键词部分匹配。

    相关示例如下:

    • 过滤出符合条件的日志。
      • 设置KeylevelRegexWARNING|ERROR,表示只采集level字段值为WARNING或ERROR的日志。
      • 设置KeycontentRegex.*05\/Jan\/2023.*,表示只采集content字段值包含05/Jan/2023的日志。
    • 过滤掉不符合条件的日志。
      • 设置KeylevelRegex^(?!.*(INFO|DEBUG)).*,表示不采集level字段值中包含INFO或DEBUG的日志。
      • 设置KeylevelRegex^(?!(INFO|DEBUG)$).*,表示不采集level字段值为INFO或DEBUG的日志。
      • 设置KeyurlRegex.*^(?!.*(healthcheck)).*,表示不采集url字段值中包含healthcheck的日志。

    如何配置正则表达式,请参见正则表达式入门教程

    首次采集大小通过首次采集大小,可以确认首次采集的新文件的内容位置。首次采集大小默认为1024 KB。
    • 首次采集时,如果文件小于1024 KB,则从文件内容起始位置开始采集。
    • 首次采集时,如果文件大于1024 KB,则从距离文件末尾1024 KB的位置开始采集。

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

    扩展配置Logtail的扩展配置。更多信息,请参见advanced参数说明

    例如您要通过当前Logtail配置去采集其他Logtail配置已匹配的文件,并指定聚合发送周期,可添加如下配置。

    {
      "force_multiconfig": true,
      "batch_send_interval": 3
    }
    单击下一步表示创建Logtail配置,日志服务开始采集日志。
    说明
  7. 预览数据及创建索引,然后单击下一步
    日志服务默认开启全文索引。您也可以根据采集到的日志,手动创建字段索引,或者单击自动生成索引,日志服务将自动生成字段索引。更多信息,请参见开启并配置索引
    重要 如果您要查询和分析日志,那么全文索引和字段索引必须至少启用一种。同时启用时,以字段索引为准。
  8. 单击查询日志,系统将跳转至Logstore查询分析页面。
    您需要等待1分钟左右,待索引生效后,才能在原始日志页签中,查看已采集到的日志。更多信息,请参见查询和分析日志

附录:分隔符简介

日志服务分隔符采集模式支持单字符模式和多字符模式。

  • 单字符模式

    单字符模式的日志示例如下所示。

    05/May/2022:13:30:28,10.10.*.*,"POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1",200,18204,aliyun-sdk-java
    05/May/2022:13:31:23,10.10.*.*,"POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1",401,23472,aliyun-sdk-java

    在单字符模式中,您需要指定分隔符,也可以同时指定引用符。

    • 分隔符:通过单字符的分隔符分割日志,例如制表符(\t)、竖线(|)、空格、半角逗号(,)、半角分号(;)和不可见字符等单字符。分隔符不支持为双引号(")。

      双引号(")可以作为引用符,在字段边界出现,也可以作为字段内容出现。如果双引号(")作为字段内容出现,需要进行转义,即在日志中处理为""。日志服务解析字段时会自动还原,将""还原为"。例如分隔符为半角逗号(,),引用符为双引号("),且日志字段内部包含双引号(")和半角逗号(,),需要将包含半角逗号(,)的日志字段用引用符包裹,同时将日志字段中的双引号(")转义为""。处理后的日志格式为:1999,Chevy,"Venture ""Extended Edition, Very Large""","",5000.00,该日志可以被解析为5个字段:1999ChevyVenture "Extended Edition, Very Large"、空字段和5000.00

    • 引用符:日志字段内容中包含分隔符时,需要指定引用符进行包裹,被引用符包裹的内容会被日志服务解析为一个完整字段。

      引用符可以设置为制表符(\t)、竖线(|)、空格、半角逗号(,)、半角分号(;)和不可见字符等单字符。

      例如分隔符为半角逗号(,),引用符为双引号("),日志为1997,Ford,E350,"ac, abs, moon",3000.00,该日志可以被解析为5个字段:1997FordE350ac, abs, moon3000.00

  • 多字符模式

    多字符模式的日志示例如下所示。

    05/May/2022:13:30:28&&10.200.**.**&&POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=pD12XYLmGxKQ%2Bmkd6x7hAgQ7b1c%3D HTTP/1.1&&200&&18204&&aliyun-sdk-java
    05/May/2022:13:31:23&&10.200.**.**&&POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1&&401&&23472&&aliyun-sdk-java

    多字符模式中,分隔符包括2~3个字符(例如||&&&^_^)。日志解析根据分隔符进行匹配,您无需使用引用符对日志字段进行包裹。

    重要

    确保日志字段内容中不会出现分隔符的完整匹配,否则会导致字段误分割。

    例如分隔符为&&,日志为1997&&Ford&&E350&&ac&abs&moon&&3000.00会被解析为5个字段:1997FordE350ac&abs&moon3000.00

问题排查

使用Logtail采集日志后,如果预览页面或查询页面无数据,您可以参见Logtail采集日志失败的排查思路进行排查。