有奖捉虫:办公协同&微信生态&物联网文档专题 HOT

概述

自定义元数据可以用来区分日志, 您可以在日志服务控制台配置采集规则时为日志定义元数据。 CLS 当前支持以下几种自定义元数据:
机器组元数据
采集路径
自定义

前提条件

Loglistener 2.8.7及以上版本。

机器组元数据

当您需要采集多个机器组的日志, 且目标采集路径均一致, 这个时候您可以通过单一采集配置关联所有机器组, 并通过机器组元数据来明确区分采集上来的日志是由哪个机器组产生的。

具体操作

1. 在创建/修改机器组时, 为所选机器组配置符合该机器组特征的机器组元数据。


2. 创建采集配置, 并关联带有机器组元数据的目标机器组。
3. 采集规则配置步骤中, 开启自定义元数据, 并将元数据类型设置为机器组元数据


4. 完成配置后,LogListener 上报日志时会将日志所在机器组的机器组的元数据属性以__TAG__.{机器组元数据键}:{机器组元数据值} 的形式上传至日志服务。


采集路径

当您的目标采集路径为模糊匹配时,您可提取文件路径中的指定字段作为自定义元数据, 并通过该自定义元数据明确区分日志来自于哪个文件路径。

具体操作

1. 在采集规则配置步骤中, 开启自定义元数据, 将元数据类型设置为采集路径。
2. 填写文件路径正则表达式。该正则表达式需完全匹配文件路径,同时请用"()"标识路径中目标 KEY 对应的正则表达式。


3. LogListener 采集日志时将视"()"为捕获组。LogListener 支持以下两种捕获组:
命名捕获组
注意:
命名捕获组需要 LogListener 2.9.0及以上版本使用。Loglistener 2.9.0及以上版本为白名单供应,需 提交申请 使用。
命名捕获组通过?<>标识括号中正则提取的字段的名称,并以__TAG__.{字段名称}:{提取字段}的形式与日志一起上报。 如:(?<name>.*?)则代表通过.*?提取出来的字段将被命名为 name。最多支持5个命名捕获组。



非命名捕获组
非命名捕获组不会为提取字段进行特别命名,而是默认使用捕获组的顺位序号作为字段名称,并将以__TAG__.{i}:{提取字段} 的形式与日志一起上报,其中 i 为捕获组的序号。最多支持5个非命名捕获组。




样例

假设文件目录结构如下:
/logs
| - /appA/userA
| - access.log
| - /appB/userB
| - access.log
| - /appC/userC
| - access.log
如果配置目标采集路径时采用模糊匹配的方式将目录前缀设为/logs,文件名设为 access.log,三个 access.log 将一起被采集至同一日志主题。 这导致在检索分析时无法明确区分日志是来自于哪一个日志文件。然而我们可以通过以下正则表达式,提取文件路径中的值, 并作为元数据与日志一起上传。
正则表达式:
/logs/(.*?)/.*
通过以上正则提取,将上报以下元数据:
# /logs/appA/userA/access.log 中的日志将新增键值
__TAG__.1: appA

# /logs/appB/userB/access.log 中的日志将新增键值
__TAG__.1: appB

# /logs/appC/userC/access.log 中的日志将新增键值
__TAG__.1: appC
进一步, 您也可以使用以下正则表达式,通过多个命名捕获组从文件路径中提取多个值作为元数据上报, 并提取值命名。
正则表达式:
/logs/(?<APP>.*?)/(?<USER>.*?)/access.log
通过以上正则提取,将上报以下元数据:
# /logs/appA/userA/access.log 中的日志将新增键值
__TAG__.APP: appA
__TAG__.USER: userA

# /logs/appB/userB/access.log 中的日志将新增键值
__TAG__.APP: appB
__TAG__.USER: userB

# /logs/appC/userC/access.log 中的日志将新增键值
__TAG__.APP: appC
__TAG__.USER: userC

自定义

您也可以在配置采集规则时, 配置自定义的元数据。LogListener 在上报每一条日志时都会带上所指定的自定义元数据。

具体操作

1. 在采集规则配置步骤中, 开启自定义元数据, 将元数据类型设置为自定义。
2. 填写自定义元数据的键与值。


3. LogListener 在上报每一条日志时都会带上所指定的自定义元数据。