采集JSON格式文本日志

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

方案概览

假设您的JSON原始日志为:

{"@timestamp":"2024-08-16T16:23:22+08:00","server_addr":"127.0.0.1","remote_addr":"127.0.0.1","scheme":"http","request_method":"POST","request_uri": "/wp-admin/admin-ajax.php","request_length": "1161","uri": "/wp-admin/admin-ajax.php", "request_time":1.099,"body_bytes_sent":78,"bytes_sent":675,"status":"200","upstream_time":"1.097","upstream_host":"unix:/dev/shm/php-cgi.sock","upstream_status":"200","host":"www.example.com","http_referer":"http://www.example.com/wp-admin/index.php","http_user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0"}

经过JSON解析插件处理后的结果是:image

采集指定文件的文本日志,分为5步:

1. 选择Project和Logstore

2. 机器组配置

3. Logtail配置

4. 查询分析配置

5. 查询日志

前提条件

  • 已创建Logtail机器组并添加相应服务器,创建机器组的步骤,请参见创建用户自定义标识机器组(推荐)创建IP地址机器组

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

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

1. 选择Project和Logstore

  1. 登录日志服务控制台

  2. 单击控制台右侧的快速接入数据卡片。

    image

  3. 接入数据页面,查找JSON - 文本日志并单击。image

  4. 选择目标Project和Logstore,日志会被采集到对应的Logstore。image

2. 机器组配置

Logtail配置会应用到指定的机器组,从而采集服务器上的数据。无论是否已有机器组,都必须根据实际需求正确选择使用场景和安装环境,这将影响后续的页面配置。

  • 已有机器组

    源机器组列表选择目标机器组,单击下一步image

  • 没有可用机器组

    单击创建机器组,在创建机器组面板设置相关参数。机器组标识分为IP地址用户自定义标识,更多信息请参见创建用户自定义标识机器组(推荐)创建IP地址机器组

    重要

    创建机器组后立刻应用,可能因为连接未生效,导致心跳为FAIL,您可单击重试。如果还未解决,请参见Logtail机器组无心跳进行排查。

3. Logtail配置

3.1 全局配置

image

全局配置

配置项

说明

配置名称

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

日志主题类型

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

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

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

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

高级参数

其它可选的与配置全局相关的高级功能参数,请参见创建Logtail流水线配置

3.2 输入配置

  • 文件路径

  • 最大目录监控深度

image

输入配置

配置项

说明

文件路径

根据日志在主机(例如ECS)上的位置,设置日志目录和文件名称。

  • 如果目标主机是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代表只监控本层目录。

文件编码

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

首次采集大小

配置首次生效时,匹配文件的起始采集位置距离文件结尾的大小。首次采集大小设定值为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流水线配置

3.3 处理配置

  1. 日志样例,支持多条日志;添加日志样例可协助您配置日志处理相关参数,降低配置难度,建议添加。

  2. 多行模式,如果日志为多行日志,请使用该选项。

    • 类型,选择多行JSON

    • 切分失败处理方式,选择保留单行

  3. 处理模式

    使用JSON解析处理插件,单击JSON解析可进入处理插件详细配置页面。您可在此页面做进一步配置(本示例使用默认配置)。

    image

处理配置

配置项

说明

日志样例

待采集日志的样例,请务必使用实际场景的日志。日志样例可协助您配置日志处理相关参数,降低配置难度。支持添加多条样例,总长度不超过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对象被展开为多行,例如:

      {
        "name": "John Doe",
        "age": 30,
        "address": {
          "city": "New York",
          "country": "USA"
        }
      }
  • 切分失败处理方式:

    Exception in thread "main" java.lang.NullPointerException
        at com.example.MyClass.methodA(MyClass.java:12)
        at com.example.MyClass.methodB(MyClass.java:34)
        at com.example.MyClass.main(MyClass.java:½0)

    对于以上日志内容,如果日志服务切分失败:

    • 丢弃:直接丢弃这段日志。

    • 保留单行:将每行日志文本单独保留为一条日志,保留为一共四条日志。

处理模式

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

重要

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

  • 低于2.0版本的Logtail:

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

    • 原生插件仅可用于采集文本日志。使用原生插件时,须符合如下要求:

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

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

    • 扩展处理插件只能出现在所有的原生处理插件之后,不能出现在任何原生处理插件之前。

  • 2.0版本的Logtail:

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

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

重要

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

4. 查询分析配置

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

5. 查询日志

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

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

说明

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

后续步骤

  • 日志的索引类型、配置示例、索引计费等信息,请参见创建索引

  • 日志的查询语法,请参见查询语法