在Flux中使用正则表达式
正则表达式(regex)在匹配大量数据中的模式时非常强大。 在Flux中,正则表达式主要用于谓词函数中的评估逻辑,用于过滤行、删除和保留列、状态检测等。 本指南展示了如何在您的Flux脚本中使用正则表达式。
如果您刚刚开始使用Flux查询,请查看以下内容:
Go 正则表达式语法
Flux使用Go的regexp package进行正则表达式搜索。
下面的链接提供了关于Go的正则表达式语法的信息。
正则表达式运算符
Flux提供了两个用于正则表达式的比较运算符。
=~
当左边的表达式MATCHES与右边的正则表达式匹配时,它的值为true。
!~
当左侧的表达式不匹配右侧的正则表达式时,这将评估为true。
Flux中的正则表达式
在您的Flux脚本中使用正则表达式匹配时,请用/括起您的正则表达式。以下是基本的正则表达式比较语法:
基本正则表达式比较语法
expression =~ /regex/
expression !~ /regex/
示例
使用正则表达式按标签值过滤
以下示例通过 cpu 标签过滤记录。
它仅保留 cpu 为 cpu0、cpu1 或 cpu2 的记录。
from(bucket: "example-bucket")
|> range(start: -15m)
|> filter(fn: (r) => r._measurement == "cpu" and r.cpu =~ /cpu[0-2]$/)
使用正则表达式按字段键过滤
以下示例排除了字段键中没有 _percent 的记录。
from(bucket: "example-bucket")
|> range(start: -15m)
|> filter(fn: (r) => r._measurement == "mem" and r._field =~ /_percent/)
删除匹配正则表达式的列
以下示例删除名称不以 _ 开头的列。
from(bucket: "example-bucket")
|> range(start: -15m)
|> filter(fn: (r) => r._measurement == "mem")
|> drop(fn: (column) => column !~ /^_.*/)