LogCollector 插件支持设置执行条件,只有在日志内容满足已设置的执行条件时,日志服务才会执行该插件。本文档介绍插件执行条件的列表及设置方式。
日志服务默认根据插件顺序,对指定日志字段依次执行对应的处理方式。如果需要根据日志内容判断是否执行某个插件,可以在插件配置中添加插件条件。日志服务在执行插件前会根据插件条件进行对应的字段判断,例如通过 equals 插件条件判断指定字段内容是否为某个固定值,如果字段值符合插件条件,此条件判断为真(true),则执行对应的插件处理,否则跳过此插件。
每个 LogCollector 插件都可以配置独立的基本执行条件,日志服务也支持为插件添加组合条件。组合条件是基于基本条件的语法,根据指定基本条件的判断结果决定是否执行插件。例如 and 条件表示某一个或多个条件均为 true 时,则执行此插件。
日志服务提供多种插件执行条件,例如检查字段值是否为某个固定值、检查字段值是否包含某个指定字符串等,支持的执行条件列表请参考执行条件列表。
说明
1.0.38 及后续版本的 LogCollector 支持插件执行条件,建议在使用前确认当前使用的 LogCollector 版本号。
您可以在插件配置中添加执行条件字段 when,when 字段为可选参数,用于指定判断条件仅在需要添加执行条件时配置。使用插件的操作步骤请参考操作步骤。
例如,以下示例表示为 add_kvs 插件添加执行条件,如果 data
字段值为 Click Here
,且 size
字段值为 36
,则在日志内容中插入 name
和 cluster_id
两个常量字段。
{ "processors": [ { "add_kvs": { "when": { "equals": { "data": "Click Here", "size": "36" } }, "fields": { "name": "Jack", "cluster_id": "C02G64T1MD6R" } } } ] }
条件类型 | 条件名称 | 说明 |
---|---|---|
基本条件 | 判断指定字段的内容是否等于指定的值。 | |
判断指定字段的内容是否包含指定的字符串。 | ||
判断指定字段的内容是否匹配指定的正则表达式。 | ||
判断指定字段的内容是否在指定的数值范围中。 | ||
判断日志是否包含指定的字段。 | ||
判断指定字段的长度是否在指定的数值范围中。 | ||
组合条件 | 判断指定的基本条件是否均为 true。 | |
判断指定的基本条件是否至少有一个为 true。 | ||
判断指定的基本条件是否为 false。 |
equals 条件用于判断指定字段的内容是否等于指定的值。如果当前日志指定字段的内容等于指定的值,那么 equals 条件为 true,否则 equals 条件为 false 当在 equals 中配置多个字段进行条件判断时,这些字段的判断结果之间的条件关系是逻辑与(AND)。
说明
浮点数精度受二进制存储方式影响,通过 equals 条件比较两个浮点数是否相等时,如果两个浮点数的差小于 0.000001,日志服务则认为这两个浮点数相等相等。
参数说明
名称 | 类型 | 是否必选 | 说明 |
---|---|---|---|
equals | Map<String, ?>
| 是 | Key 为日志字段名称,Value 表示字段值。 |
配置示例
经过采集模式或者其他处理器插件处理之后的键值对日志:
"data": "Click Here" "size": "36" "style": "bold" "hOffset": "250" "vOffset": "100" "alignment": "center" "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;" "time": "Today is 2023-06-08. Tomorrow is 2023-06-09."
LogCollector 插件处理器配置:
{ "processors": [ { "add_kvs": { "when": { "equals": { "data": "Click Here", "size": "36" } }, "fields": { "name": "Jack", "cluster_id": "C02G64T1MD6R" } } } ] }
处理结果:
"data": "Click Here" "size": "36" "style": "bold" "hOffset": "250" "vOffset": "100" "alignment": "center" "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;" "time": "Today is 2023-06-08. Tomorrow is 2023-06-09." "name": "Jack", "cluster_id": "C02G64T1MD6R"
contains 条件用于判断指定字段的内容是否包含指定的字符串。如果当前日志指定字段的内容包含指定的字符串,那么 contains 条件为 true,否则 contains 条件为 false。当在 contains 中配置多个字段进行条件判断时,这些字段的判断结果之间的条件关系是逻辑与(AND)。
参数说明
名称 | 类型 | 是否必选 | 说明 |
---|---|---|---|
contains | Map<String, String> | 是 | Key 为日志字段名称,Value 表示字段值。 |
配置示例
经过采集模式或者其他处理器插件处理之后的键值对日志:
"data": "Click Here" "size": "36" "style": "bold" "hOffset": "250" "vOffset": "100" "alignment": "center" "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;" "time": "Today is 2023-06-08. Tomorrow is 2023-06-09."
LogCollector 插件处理器配置:
{ "processors": [ { "add_kvs": { "when": { "contains": { "data": "Click", "onMouseUp": "sun1" } }, "fields": { "name": "Jack", "cluster_id": "C02G64T1MD6R" } } } ] }
处理结果:
"data": "Click Here" "size": "36" "style": "bold" "hOffset": "250" "vOffset": "100" "alignment": "center" "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;" "time": "Today is 2023-06-08. Tomorrow is 2023-06-09." "name": "Jack", "cluster_id": "C02G64T1MD6R"
regexp 条件用于判断指定字段的内容是否匹配指定的正则表达式。如果当前日志指定字段的内容匹配指定的正则表达式,那么 regexp 条件为 true 否则 regexp 条件为 false。当在 regexp 中配置多个字段进行条件判断时,这些字段的判断结果之间的条件关系是逻辑与(AND)。
参数说明
名称 | 类型 | 是否必选 | 说明 |
---|---|---|---|
regexp | Map<String, String> | 是 | Key 为日志字段名称,Value 表示字段值。 |
配置示例
经过采集模式或者其他处理器插件处理之后的键值对日志:
"data": "Click Here" "size": "36" "style": "bold" "hOffset": "250" "vOffset": "100" "alignment": "center" "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;" "time": "Today is 2023-06-08. Tomorrow is 2023-06-09."
LogCollector 插件处理器配置:
{ "processors": [ { "add_kvs": { "when": { "regexp": { "data": "^Click.*", "onMouseUp": "^sun1.*" } }, "fields": { "name": "Jack", "cluster_id": "C02G64T1MD6R" } } } ] }
处理结果:
"data": "Click Here" "size": "36" "style": "bold" "hOffset": "250" "vOffset": "100" "alignment": "center" "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;" "time": "Today is 2023-06-08. Tomorrow is 2023-06-09." "name": "Jack", "cluster_id": "C02G64T1MD6R"
range 条件用于判断指定字段的内容是否在指定的数值范围中。如果当前日志指定字段的内容在指定的数值范围中,那么 range 条件为 true,否则 range 条件为 false。当在 range 中配置多个字段进行条件判断时,这些字段的判断结果之间的条件关系是逻辑与(AND)。
参数说明
名称 | 类型 | 是否必选 | 说明 |
---|---|---|---|
range | Map<String, Map<String, Number>> | 是 | Key 是字段名称,Values 是运算符和数值构成的数值范围。
|
配置示例
经过采集模式或者其他处理器插件处理之后的键值对日志:
"data": "Click Here" "size": "36" "style": "bold" "hOffset": "250" "vOffset": "100" "alignment": "center" "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;" "time": "Today is 2023-06-08. Tomorrow is 2023-06-09."
LogCollector 插件处理器配置:
{ "processors": [ { "add_kvs": { "when": { "range": { "hOffset": { "gte": 100, "lte": 1000 }, "vOffset": { "gte": 50, "lte": 200 } } }, "fields": { "name": "Jack", "cluster_id": "C02G64T1MD6R" } } } ] }
处理结果:
"data": "Click Here" "size": "36" "style": "bold" "hOffset": "250" "vOffset": "100" "alignment": "center" "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;" "time": "Today is 2023-06-08. Tomorrow is 2023-06-09." "name": "Jack", "cluster_id": "C02G64T1MD6R"
has_fields 条件用于判断是否包含指定的字段。如果当前日志包含指定的全部字段,那么 has_fields 条件为 true。否则 has_fields 条件为 false。当在 has_fields 中配置多个字段进行条件判断时,这些字段的判断结果之间的条件关系是逻辑与(AND)。
参数说明
名称 | 类型 | 是否必选 | 说明 |
---|---|---|---|
has_fields | List | 是 | 字段列表。 |
配置示例
经过采集模式或者其他处理器插件处理之后的键值对日志:
"data": "Click Here" "size": "36" "style": "bold" "hOffset": "250" "vOffset": "100" "alignment": "center" "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;" "time": "Today is 2023-06-08. Tomorrow is 2023-06-09."
LogCollector 插件处理器配置:
{ "processors": [ { "add_kvs": { "when": { "has_fields": [ "alignment", "onMouseUp" ] }, "fields": { "name": "Jack", "cluster_id": "C02G64T1MD6R" } } } ] }
处理结果:
"data": "Click Here" "size": "36" "style": "bold" "hOffset": "250" "vOffset": "100" "alignment": "center" "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;" "time": "Today is 2023-06-08. Tomorrow is 2023-06-09." "name": "Jack", "cluster_id": "C02G64T1MD6R"
length 条件用于判断指定字段的长度是否在指定的数值范围中。如果当前日志指定字段的长度在指定的数值范围中,那么 length 条件为 true,否则 length 条件为 false。当在 length 中配置多个字段进行条件判断时,这些字段的判断结果之间的条件关系是逻辑与(AND)。
参数说明
名称 | 类型 | 是否必选 | 说明 |
---|---|---|---|
length | Map<String, Map<String, Number>> | 是 | Key 是字段名称,Values 是运算符和数值构成的数值范围。
|
配置示例
经过采集模式或者其他处理器插件处理之后的键值对日志:
"data": "Click Here" "size": "36" "style": "bold" "hOffset": "250" "vOffset": "100" "alignment": "center" "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;" "time": "Today is 2023-06-08. Tomorrow is 2023-06-09."
LogCollector 插件处理器配置:
{ "processors": [ { "add_kvs": { "when": { "length": { "hOffset": { "eq": 3 }, "time": { "gte": 10, "lte": 50 } } }, "fields": { "name": "Jack", "cluster_id": "C02G64T1MD6R" } } } ] }
处理结果:
"data": "Click Here" "size": "36" "style": "bold" "hOffset": "250" "vOffset": "100" "alignment": "center" "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;" "time": "Today is 2023-06-08. Tomorrow is 2023-06-09." "name": "Jack", "cluster_id": "C02G64T1MD6R"
and 条件支持配置一个或多个基本条件。当这些基本条件全部为 true 时,and 条件为 true;否则,and 条件为 false。
配置示例
经过采集模式或者其他处理器插件处理之后的键值对日志:
"data": "Click Here" "size": "36" "style": "bold" "hOffset": "250" "vOffset": "100" "alignment": "center" "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;" "time": "Today is 2023-06-08. Tomorrow is 2023-06-09."
LogCollector 插件处理器配置:
{ "processors": [ { "add_kvs": { "when": { "and": [ { "equals": { "size": 36 } }, { "has_fields": [ "alignment", "onMouseUp" ] } ] }, "fields": { "name": "Jack", "cluster_id": "C02G64T1MD6R" } } } ] }
处理结果:
"data": "Click Here" "size": "36" "style": "bold" "hOffset": "250" "vOffset": "100" "alignment": "center" "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;" "time": "Today is 2023-06-08. Tomorrow is 2023-06-09." "name": "Jack", "cluster_id": "C02G64T1MD6R"
or 条件支持配置一个或多个基本条件。当这些基本条件至少一个为 true 时,or 条件为 true;否则,or 条件为 false。
配置示例
经过采集模式或者其他处理器插件处理之后的键值对日志:
"data": "Click Here" "size": "36" "style": "bold" "hOffset": "250" "vOffset": "100" "alignment": "center" "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;" "time": "Today is 2023-06-08. Tomorrow is 2023-06-09."
LogCollector 插件处理器配置:
{ "processors": [ { "add_kvs": { "when": { "or": [ { "equals": { "size": 37 } }, { "has_fields": [ "alignment", "onMouseUp" ] } ] }, "fields": { "name": "Jack", "cluster_id": "C02G64T1MD6R" } } } ] }
处理结果:
"data": "Click Here" "size": "36" "style": "bold" "hOffset": "250" "vOffset": "100" "alignment": "center" "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;" "time": "Today is 2023-06-08. Tomorrow is 2023-06-09." "name": "Jack", "cluster_id": "C02G64T1MD6R"
not 条件支持配置一个基本条件。当这个基本条件为 true 时,not 条件为 false;否则,not 条件为 true。
配置示例
经过采集模式或者其他处理器插件处理之后的键值对日志:
"data": "Click Here" "size": "36" "style": "bold" "hOffset": "250" "vOffset": "100" "alignment": "center" "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;" "time": "Today is 2023-06-08. Tomorrow is 2023-06-09."
LogCollector 插件处理器配置:
{ "processors": [ { "add_kvs": { "when": { "not": { "equals": { "size": 37 } } }, "fields": { "name": "Jack", "cluster_id": "C02G64T1MD6R" } } } ] }
处理结果:
"data": "Click Here" "size": "36" "style": "bold" "hOffset": "250" "vOffset": "100" "alignment": "center" "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;" "time": "Today is 2023-06-08. Tomorrow is 2023-06-09." "name": "Jack", "cluster_id": "C02G64T1MD6R"