You need to enable JavaScript to run this app.
导航

插件执行条件

最近更新时间2023.11.14 19:17:37

首次发布时间2023.11.02 20:30:42

LogCollector 插件支持设置执行条件,只有在日志内容满足已设置的执行条件时,日志服务才会执行该插件。本文档介绍插件执行条件的列表及设置方式。

功能概述

日志服务默认根据插件顺序,对指定日志字段依次执行对应的处理方式。如果需要根据日志内容判断是否执行某个插件,可以在插件配置中添加插件条件。日志服务在执行插件前会根据插件条件进行对应的字段判断,例如通过 equals 插件条件判断指定字段内容是否为某个固定值,如果字段值符合插件条件,此条件判断为真(true),则执行对应的插件处理,否则跳过此插件。
每个 LogCollector 插件都可以配置独立的基本执行条件,日志服务也支持为插件添加组合条件。组合条件是基于基本条件的语法,根据指定基本条件的判断结果决定是否执行插件。例如 and 条件表示某一个或多个条件均为 true 时,则执行此插件。
日志服务提供多种插件执行条件,例如检查字段值是否为某个固定值、检查字段值是否包含某个指定字符串等,支持的执行条件列表请参考执行条件列表

说明

1.0.38 及后续版本的 LogCollector 支持插件执行条件,建议在使用前确认当前使用的 LogCollector 版本号。

设置插件执行条件

您可以在插件配置中添加执行条件字段 when,when 字段为可选参数,用于指定判断条件仅在需要添加执行条件时配置。使用插件的操作步骤请参考操作步骤
例如,以下示例表示为 add_kvs 插件添加执行条件,如果 data 字段值为 Click Here,且 size 字段值为 36,则在日志内容中插入 namecluster_id 两个常量字段。

{
  "processors": [
    {
      "add_kvs": {
        "when": {
          "equals": {
            "data": "Click Here",
            "size": "36"
          }
        },
        "fields": {
          "name": "Jack",
          "cluster_id": "C02G64T1MD6R"
        }
      }
    }
  ]
}

执行条件列表

条件类型

条件名称

说明

基本条件

equals 条件

判断指定字段的内容是否等于指定的值。

contains 条件

判断指定字段的内容是否包含指定的字符串。

regexp 条件

判断指定字段的内容是否匹配指定的正则表达式。

range 条件

判断指定字段的内容是否在指定的数值范围中。

has_fields 条件

判断日志是否包含指定的字段。

length 条件

判断指定字段的长度是否在指定的数值范围中。

组合条件

and 条件

判断指定的基本条件是否均为 true。

or 条件

判断指定的基本条件是否至少有一个为 true。

not 条件

判断指定的基本条件是否为 false。

基本条件

equals 条件

equals 条件用于判断指定字段的内容是否等于指定的值。如果当前日志指定字段的内容等于指定的值,那么 equals 条件为 true,否则 equals 条件为 false 当在 equals 中配置多个字段进行条件判断时,这些字段的判断结果之间的条件关系是逻辑与(AND)。

说明

浮点数精度受二进制存储方式影响,通过 equals 条件比较两个浮点数是否相等时,如果两个浮点数的差小于 0.000001,日志服务则认为这两个浮点数相等相等。

参数说明

名称

类型

是否必选

说明

equals

Map<String, ?>
其中,Value 的类型支持:

  • Integer。
  • Float。
  • String。
  • Boolean。

Key 为日志字段名称,Value 表示字段值。
Key 不可重复,不可为空,且不支持英文句号(.)。

配置示例

  • 经过采集模式或者其他处理器插件处理之后的键值对日志:

    "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 条件用于判断指定字段的内容是否包含指定的字符串。如果当前日志指定字段的内容包含指定的字符串,那么 contains 条件为 true,否则 contains 条件为 false。当在 contains 中配置多个字段进行条件判断时,这些字段的判断结果之间的条件关系是逻辑与(AND)。
参数说明

名称

类型

是否必选

说明

contains

Map<String, String>

Key 为日志字段名称,Value 表示字段值。
Key 不可重复,不可为空,且不支持英文句号(.)。

配置示例

  • 经过采集模式或者其他处理器插件处理之后的键值对日志:

    "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 条件用于判断指定字段的内容是否匹配指定的正则表达式。如果当前日志指定字段的内容匹配指定的正则表达式,那么 regexp 条件为 true 否则 regexp 条件为 false。当在 regexp 中配置多个字段进行条件判断时,这些字段的判断结果之间的条件关系是逻辑与(AND)。
参数说明

名称

类型

是否必选

说明

regexp

Map<String, String>

Key 为日志字段名称,Value 表示字段值。
Key 不可重复,不可为空,且不支持英文句号(.)。

配置示例

  • 经过采集模式或者其他处理器插件处理之后的键值对日志:

    "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 条件用于判断指定字段的内容是否在指定的数值范围中。如果当前日志指定字段的内容在指定的数值范围中,那么 range 条件为 true,否则 range 条件为 false。当在 range 中配置多个字段进行条件判断时,这些字段的判断结果之间的条件关系是逻辑与(AND)。
参数说明

名称

类型

是否必选

说明

range

Map<String, Map<String, Number>>

Key 是字段名称,Values 是运算符和数值构成的数值范围。
Key 不可重复,不可为空,且不支持英文句号(.)。
支持的运算符包括:

  • lt:小于。
  • lte:小于等于。
  • gt:大于。
  • gte:大于等于。

配置示例

  • 经过采集模式或者其他处理器插件处理之后的键值对日志:

    "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 条件用于判断是否包含指定的字段。如果当前日志包含指定的全部字段,那么 has_fields 条件为 true。否则 has_fields 条件为 false。当在 has_fields 中配置多个字段进行条件判断时,这些字段的判断结果之间的条件关系是逻辑与(AND)。
参数说明

名称

类型

是否必选

说明

has_fields

List

字段列表。
Key 不可重复,不可为空,且不支持英文句号(.)。

配置示例

  • 经过采集模式或者其他处理器插件处理之后的键值对日志:

    "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 条件用于判断指定字段的长度是否在指定的数值范围中。如果当前日志指定字段的长度在指定的数值范围中,那么 length 条件为 true,否则 length 条件为 false。当在 length 中配置多个字段进行条件判断时,这些字段的判断结果之间的条件关系是逻辑与(AND)。
参数说明

名称

类型

是否必选

说明

length

Map<String, Map<String, Number>>

Key 是字段名称,Values 是运算符和数值构成的数值范围。
字段名称不可重复,不可为空,且不支持英文句号(.)。
支持的运算符包括:

  • lt:小于。
  • lte:小于等于。
  • gt:大于。
  • gte:大于等于。
  • eq: 等于。

配置示例

  • 经过采集模式或者其他处理器插件处理之后的键值对日志:

    "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 条件

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 条件

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 条件

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"