如果您需要对日志内容做更多个性化的字段提取设置,可选择完整正则模式。本文介绍如何通过日志服务控制台创建完整正则模式的Logtail配置采集日志。

前提条件

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

背景信息

在完整正则模式下,Logtail会将日志内容结构化,即根据您所设置的正则表达式将日志内容提取为多个key-value对。更多信息,请参见 单行日志采集案例 多行日志采集案例
完整正则模式支持采集以下类型的文本日志。
  • 单行文本日志

    一行日志内容为一条日志,即在日志文件中,以换行符分隔两条日志。该模式下,您需要设置日志样例,并根据日志样例指定正则表达式。Logtail会根据正则表达式提取对应的key-value对。

  • 多行文本日志

    一条日志有多行内容。该模式下,您需要设置日志样例,并根据日志样例指定正则表达式和行首正则表达式。Logtail会根据正则表达式提取对应的key-value对,根据行首正则表达式匹配一条日志的行首,即确认一条日志的开头,将未匹配部分作为该条日志的一部分,直到下一个行首出现。

操作步骤

重要 默认情况下,一个日志文件只能匹配一个Logtail配置。如果文件中的日志需要被采集多份,请参见 如何实现文件中的日志被采集多份
  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 开头的文件。
    说明 日志路径通配符只支持星号(*)和半角问号(?)。
    • 星号(*)表示匹配多个任意字符。
    • 半角问号(?)表示匹配单个任意字符。
    设置采集黑名单 打开 设置采集黑名单 开关后,可进行黑名单配置,即可在采集时忽略指定的目录或文件。支持完整匹配和通配符模式匹配目录和文件名。例如:
    • 选择 按目录路径 ,配置路径为 /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/ ,目录黑名单不会生效。
    是否为Docker文件 如果是Docker容器中的文件,您可打开 是否为Docker文件 开关,配置内部路径与容器Tag。Logtail会自动监测容器的创建和销毁,并根据Tag进行容器过滤,采集指定容器的日志。具体操作,请参见 通过DaemonSet-控制台方式采集容器文本日志
    模式 采集模式,默认为 完整正则模式 ,可修改为其它模式。
    单行模式
    • 如果待采集的日志是单行日志,请打开 单行模式 开关,日志服务将逐行采集日志。
    • 如果待采集的日志是多行日志(例如Java程序日志),请关闭 单行模式 开关,使用多行正则模式采集。
    日志样例 请务必使用实际场景的日志,便于日志服务自动提取其中的正则表达式。日志样例请参见 单行日志采集案例 多行日志采集案例
    行首正则表达式 如果您要采集多行日志,在关闭 单行模式 开关后,还需配置行首正则表达式。日志服务支持自动生成和手动输入行首正则表达式。
    • 自动生成行首正则表达式

      填写日志样例后,单击 自动生成 ,生成行首正则表达式。

    • 手动输入行首正则表达式

      填写日志样例后,单击 手动输入正则表达式 ,手动配置。配置完成后,单击 验证 即可验证您输入的正则表达式是否正确。更多信息,请参见 如何调试正则表达式

    提取字段 打开 提取字段 开关后,可通过正则表达式将日志内容提取为键值对(Key:Value)。
    正则 打开 提取字段 开关后,需要配置。
    • 自动生成正则表达式

      日志样例 文本框中,选中需要提取的日志内容,单击 生成正则 ,自动生成正则表达式。

    • 手动输入正则表达式

      单击 手动输入正则表达式 ,手动配置正则表达式。配置完成后,单击 验证 即可验证您输入的正则表达式是否可以解析、提取日志样例。更多信息,请参见 如何调试正则表达式

    日志抽取内容 打开 提取字段 开关后,需要配置。

    通过正则表达式将日志内容提取为Value后,您需要为每个Value设置对应的Key。

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

    使用系统时间 打开 提取字段 开关后,需要配置。 具体说明如下:
    • 打开 使用系统时间 开关,则日志时间为采集日志时,Logtail所在主机或容器的系统时间。
    • 关闭 使用系统时间 开关,则日志时间为原始日志中自带的时间,即您需要在 日志抽取内容 中将时间内容对应的 Key 设置为 time

      您还需根据时间内容设置对应的时间转换格式。例如原始日志中的时间为 10/Sep/2022:12:36:49 ,对应的时间转换格式为 %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。

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

    相关示例如下:

    • 过滤出符合条件的日志。
      • 设置 Key level Regex WARNING|ERROR ,表示只采集 level 字段值为WARNING或ERROR的日志。
      • 设置 Key content Regex .*05\/Jan\/2023.* ,表示只采集 content 字段值包含05/Jan/2023的日志。
    • 过滤掉不符合条件的日志。
      • 设置 Key level Regex ^(?!.*(INFO|DEBUG)).* ,表示不采集 level 字段值中包含INFO或DEBUG的日志。
      • 设置 Key level Regex ^(?!(INFO|DEBUG)$).* ,表示不采集 level 字段值为INFO或DEBUG的日志。
      • 设置 Key url Regex .*^(?!.*(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分钟左右,待索引生效后,才能在 原始日志 页签中,查看已采集到的日志。更多信息,请参见 查询和分析日志

单行日志采集案例

  • 日志样例
    127.0.0.1 - - [10/Sep/2018:12:36:49  +0800] "GET /index.html HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"
  • 正则表达式
    (\S+)\s-\s(\S+)\s\[([^]]+)]\s"(\w+)\s(\S+)\s([^"]+)"\s(\d+)(\s\d+)[^-]+([^"]+)"\s"([^"]+).*
  • 被采集到日志服务后的日志 完整正则模式
  • 操作视频

多行日志采集案例

  • 日志样例
    [2018-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)
  • 行首正则表达式
    \[\d+-\d+-\w+:\d+:\d+,\d+]\s\[\w+]\s.*
  • 正则表达式
    \[(\S+)]\s\[(\S+)]\s(.*)
  • 被采集到日志服务后的日志 完整正则模式
  • 操作视频

问题排查

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