日志可以通过日志主题(Topic)来划分,您可以在日志服务控制台上创建Logtail配置时设置日志主题,也可以在使用API或SDK上传数据时设置日志主题。

空-不生成Topic

设置Topic生成方式空-不生成topic,则表示不生成日志主题。

机器组Topic属性

该方式用于区分不同服务器产生的日志。如果您不同服务器上的日志的保存路径或文件名相同,您可以通过日志主题进行区分。

您可以将服务器添加到不同的机器组中,并为机器组设置不同的Topic属性,然后在创建Logtail配置时,将Topic生成方式设置为机器组Topic属性。Logtail上报数据时会将服务器所在机器组的Topic属性作为日志主题的名称上传至日志服务,在查询日志时需要指定日志主题(即机器组的Topic属性)为查询条件。

文件路径正则

该方式用于区分不同用户或实例产生的日志数据。如果不同的用户或者实例将日志保存在不同目录中,但是下级目录和日志文件名相同,日志服务在采集日志时无法明确区分日志是由哪个用户或实例产生的。

提取文件路径中的单个值

您可以在创建Logtail配置时将Topic生成方式设置为文件路径正则,并且输入文件路径的正则表达式,并使用捕获组捕获待提取的内容(此处的正则表达式需要完整匹配文件路径,捕获组有且仅有一个)。Logtail上报数据时会将用户名或实例名作为日志主题的名称上传至日志服务,在查询日志时需要指定日志主题(即用户名或实例名)为查询条件。
说明 文件路径的正则表达式中,需要对正斜线(/)进行转义。
例如不同用户将日志记录在不同目录下,但是日志文件名称相同,目录路径如下所示。
/logs
  | - /userA/serviceA
    | - service.log
  | - /userB/serviceA
    | - service.log
  | - /userC/serviceA
    | - service.log

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

  • 正则表达式
    \/(.*)\/serviceA\/.*
  • 提取结果
    __topic__: userA
    __topic__: userB
    __topic__: userC

提取文件路径中的多个值

如果单个日志主题不足以区分日志的来源,则您可以提取文件路径中的多个值作为区分日志的信息,即您可以配置多个正则捕获组提取多个值作为日志的Tag。其中捕获组包括命名捕获组(?P<name>)或非命名捕获组。如果全是命名捕获组,则生成的tag字段为__tag__:{name};如果全是非命名捕获组,则生成的tag字段为__tag__:__topic_{i}__,其中{i}为捕获组的序号。
说明 当正则表达式中存在多个捕获组时,不会生成__topic__字段。

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

  • 示例1:使用非命名捕获组进行正则提取。
    • 正则表达式
      \/logs\/(.*?)\/(.*?)\/service.log
    • 提取结果
      __tag__:__topic_1__: userA
      __tag__:__topic_2__: serviceA
  • 示例2:使用命名捕获组进行正则提取。
    • 正则表达式
      \/logs\/(?P<user>.*?)\/(?P<service>.*?)\/service.log
    • 提取结果
      __tag__:user: userA
      __tag__:service: serviceA

静态主题生成

Topic生成方式设置为文件路径正则,在自定义正则中输入customized:// + 自定义主题名,表示使用自定义的静态日志主题。

说明 Logtail 0.16.21(Linux系统)及以上版本支持该设置。