机器组与采集配置关联指南

在服务器上成功安装日志服务采集器后,还需要设置机器组将服务器关联到日志服务指定资源中,并通过采集配置定义数据的采集规则。随后手动绑定采集配置到机器组中,将采集规则应用到服务器上。

什么是机器组

机器组是包含多台服务器的虚拟分组,属于日志服务Project中的资源,日志服务通过机器组管理服务器,服务器通过心跳与机器组关联。Project支持将一个采集配置应用到多个机器组,或将一个机器组绑定到多个采集配置。

日志服务提供以下两种机器组类型:

IP地址机器组

使用IP地址机器组时,需要在机器组中添加IP地址信息来与服务器关联。

  • 该种方式创建与配置更简单。

  • IP地址发生冲突或IP改变会导致心跳失败,影响数据采集。

用户自定义标识机器组(推荐使用)

通过在机器组中配置一个用户自定义的字符串作为识别标识,并在服务器上的标识文件中添加该字符串来进行关联。一台服务器的标识文件中可配置多个用户自定义标识,标识之间以换行符分隔。

  • 配置流程相比IP地址机器组更复杂。但在VPC等自定义网络环境,IP地址冲突会导致采集失败。而用户自定义标识可避免此类情况发生。

  • 可实现机器组的自动弹性伸缩。为新增的服务器配置相同的用户自定义标识,日志服务可自动识别并添加至机器组中。若不再需要采集服务器日志,直接删除服务器上配置的标识文件,机器组自动将该服务器移除。

  • 通常业务系统由多个模块组成,各模块均可进行独立的水平扩展,即支持添加多台服务器。为实现高效的日志数据收集和分类,建议为各模块创建单独的机器组。如常见网站分为HTTP请求模块、逻辑模块和存储模块,其自定义标识可分别定义为http_modulelogic_modulestore_module

如何创建机器组

机器组与服务器之间建立心跳关联的前提是在服务器上成功安装采集器。建议您在安装采集器时一并创建机器组,详情可参考安装采集器安装配置

什么是采集配置

采集配置是定义如何采集、处理数据的核心规则。其目的是通过灵活配置,实现数据的高效采集、结构化解析、过滤加工等效果。采集配置通过绑定到机器组中来实现下发采集规则到服务器上,并在数据采集时使用服务器上资源进行处理。采集配置项主要包含三部分内容:

  • 全局配置:包含采集配置的名称,日志主题(Topic)与Tag 等,利用TopicTag可对采集到的日志进行标记与分类。

    全局配置参数介绍

    配置项

    说明

    配置名称

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

    日志主题类型

    选择日志主题(Topic)的生成方式。

    • 机器组Topic:日志服务支持将一个Logtail配置应用到多个机器组。使用机器组Topic可用于区分来自不同机器组的日志。Logtail上报数据时,会将服务器所在机器组的机器组Topic作为日志主题上传至Project。用户在查询日志时需要指定日志主题作为查询条件。

    • 文件路径提取:若不同的用户或应用将日志保存在不同的顶级目录中,但下级目录和日志文件名相同,日志服务在采集日志时无法明确区分日志是由哪个用户或应用产生的。此时文件路径提取方式可用于区分不同用户或应用产生的日志数据。通过正则表达式来完整匹配文件路径,并将表达式匹配的结果(用户名或应用名)作为日志主题(Topic)上传至日志服务。

      文件路径提取场景示例

      说明

      文件路径的正则表达式中,需要对正斜线(/)进行转义。

      场景1:不同用户将日志记录在不同目录下,但是日志文件名称相同,目录路径如下所示。

      /data/logs
      ├── userA
      │   └── serviceA
      │       └── service.log
      ├── userB
      │   └── serviceA
      │       └── service.log
      └── userC
          └── serviceA
              └── service.log

      如果在Logtail配置中仅配置文件路径为/data/logs且文件名称为service.log,Logtail会将三个service.log文件中的内容采集至同一个Logstore中,因此无法区分日志具体由哪个用户产生。您可以使用正则表达式提取文件路径中的值,生成不同的日志主题。

      • 正则表达式

        \/data\/logs\/(.*)\/serviceA\/.*
      • 提取结果

        __topic__: userA
        __topic__: userB
        __topic__: userC

      场景2:如果单个日志主题不足以区分日志的来源,您可以在日志文件路径中配置多个正则捕获组来提取关键信息。其中捕获组包括命名捕获组(?P<name>)与非命名捕获组两类。如果使用命名捕获组,则生成的tag字段为__tag__:{name};如果使用非命名捕获组,则生成的tag字段为__tag__:__topic_{i}__,其中{i}为捕获组的序号。

      说明

      当正则表达式中存在多个捕获组时,不会生成__topic__字段。

      例如,文件路径为/data/logs/userA/serviceA/service.log,您可以通过以下方式提取文件路径中的多个值。

      • 示例1:使用非命名捕获组进行正则提取。

        • 正则表达式

          \/data\/logs\/(.*?)\/(.*?)\/service.log
        • 提取结果

          __tag__:__topic_1__: userA
          __tag__:__topic_2__: serviceA
      • 示例2:使用命名捕获组进行正则提取。

        • 正则表达式

          \/data\/logs\/(?P<user>.*?)\/(?P<service>.*?)\/service.log
        • 提取结果

          __tag__:user: userA
          __tag__:service: serviceA

      验证:配置完成后,根据日志主题查询日志:在日志查询分析页面,输入对应生成的日志主题,例如__topic__: userA__tag__:__topic_1__: userA查询相应主题的日志。更多信息,请参见查询语法与功能

      image

    • 自定义:输入customized:// + 自定义主题名,使用自定义的静态日志主题。

    高级参数

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

  • 输入配置:定义了待采集数据的类型(如文件输入,集群标准输出,SQL查询结果,HTTP输入等),以及不同类型数据的采集路径、来源等信息。

    输入配置参数介绍

    配置项

    说明

    文件路径

    根据日志在主机(例如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流水线配置

  • 处理配置:通过处理插件的组合,来定义解析数据的规则,将待采集数据按需格式化(如过滤,脱敏,正则匹配,JSON解析等)。

    处理配置参数介绍

    配置项

    说明

    日志样例

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

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

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

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

    处理模式

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

    重要

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

    • 2.0版本的Logtail:

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

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

    • 低于2.0版本的Logtail:

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

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

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

        • 从第二个处理插件到最后一个处理插件,最多包括1个时间解析处理插件,1个过滤处理插件和多个脱敏处理插件。

      • 对于解析失败时保留原始字段解析成功时保留原始字段参数,只有以下组合有效,其余组合无效。

        • 只上传解析成功的日志:

          image

        • 解析成功时上传解析后的日志,解析失败时上传原始日志:

          image

        • 解析成功时不仅上传解析后的日志,并且追加原始日志字段,解析失败时上传原始日志。

          例如,原始日志"content": "{"request_method":"GET", "request_time":"200"}"解析成功,追加原始字段是在解析后日志的基础上再增加一个字段,字段名为重命名的原始字段(如果不填则默认为原始字段名),字段值为原始日志{"request_method":"GET", "request_time":"200"}

          image

如何创建采集配置

采集配置需要绑定到生效的机器组中才能下发到服务器上,因此建议您根据不同数据源类型,参考完整采集流程进行配置,详情可参考日志数据采集(Log)

机器组与采集配置的关系

日志服务支持将一个LoongCollector采集配置应用到多个机器组,一个机器组也支持应用多个LoongCollector采集配置,采集配置仅与机器组绑定,机器组中服务器增减将自动应用或取消相应采集配置,从而实现了服务器与采集配置的解耦。不同系统类型的服务器不支持添加到同一个机器组中。

image

机器组与采集配置关联场景

采集怎么匹配多个目录

需求:例如需要同时采集/var/log/messages/opt/app/logs/*.log到同一LogStore中。

解决方案

  1. 在目标LogStore中创建两个采集配置,路径分别为/var/log/messages/opt/app/logs/*.log

  2. 将这两个采集配置应用到同一个机器组中。

  3. 日志服务会将该机器组中所有服务器上路径为/var/log/messages/opt/app/logs/*.log的数据采集到目标LogStore中。

同服务器日志上传至多LogStore

需求:例如单台服务器上存在多目录下多类型日志,需要保存到不同LogStore中。

解决方案

  1. 在不同LogStore中分别创建不同的采集配置。

    需要注意:若多个配置采集同一个文件,需要在输入配置中,打开允许文件多次采集开关。详情参考日志多次采集
  2. 将这些采集配置应用到同一个机器组中。

  3. 日志服务会根据不同的采集配置将该机器组中不同日志上传到不同LogStore中。

不同服务器上日志如何集中汇总

需求:例如多台服务器分散在不同机器组中,但存在某类日志需要汇总到同一LogStore保存。

解决方案

  1. 在目标LogStore中创建一个采集配置。

  2. 将这个采集配置应用到多台服务器所在的多个机器组中。

  3. 日志服务会将多个机器组中服务器上的日志采集到目标LogStore中。

变更服务器上的采集规则

需求1:机器组绑定的采集配置所定义的规则不符合预期,需要修改为其他采集配置。

解决方案

  1. 登录日志服务控制台,在Project列表,单击打开目标Project。在左侧导航栏中,选择资源 > 机器组。在打开的机器组页面中,选择需要修改的机器组后,在机器组配置页面单击修改。

  2. 在管理配置中查看左侧采集配置列表,勾选需要的采集配置后添加到右侧应用列表中。

需求2:新增服务器时需要应用已有的采集配置,或已有服务器不再需要继续采集。

解决方案

  1. 登录日志服务控制台,在Project列表,单击打开目标Project。在左侧导航栏中,选择资源 > 机器组。在打开的机器组页面中,选择需要修改的机器组后,在机器组配置页面单击修改。

  2. 修改机器组覆盖的服务器数量,来应用或取消采集配置:

    1. 若是IP地址型机器组,在IP地址栏中增加或删除IP地址信息,多台服务器IP地址之间需使用换行符分隔。

      IP值必须与服务器的/usr/local/ilogtail/app_info.json文件中ip字段相同。
    2. 若是用户自定义标识型机器组,在新增的服务器上配置相同的用户自定义标识日志服务可自动识别并添加至机器组中。若不再需要采集服务器日志,直接删除服务器上配置的标识文件,机器组自动将该服务器移除,实现自动弹性伸缩。

    说明

    将服务器添加到机器组并不会自动安装LoongCollector,您需要先在新增服务器上安装LoongCollector。

相关参考

采集性能如何优化

采集异常如何处理

LoongCollector采集异常问题汇总排查