跳转到内容
搜索文档

筛选器

最后更新 查看 MarkdownAgent 设置

下表列出了受支持的比较运算符及示例值。筛选器以转义的 JSON 字符串形式添加,格式为 {"key":"<field>","operator":"<comparison_operator>","value":"<value>"}

  • 请参阅 数据集 页面,了解与每个数据集相关的字段列表。

  • 比较运算符定义了日志行中字段与值必须如何关联,表达式才返回 true。

  • 值表示与字段关联的数据。

名称 运算符表示法 String Int Bool Array Object 示例
等于 eq {"key":"ClientRequestHost","operator":"eq","value":"example.com"}
不等于 !eq {"key":"ClientCountry","operator":"!eq","value":"ca"}
小于 lt {"key":"BotScore","operator":"lt","value":"30"}
小于或等于 leq {"key":"BotScore","operator":"leq","value":"30"}
大于 gt {"key":"BotScore","operator":"gt","value":"30"}
大于或等于 geq {"key":"BotScore","operator":"geq","value":"30"}
以……开头 startsWith {"key":"ClientRequestPath","operator":"startsWith","value":"/foo"}
以……结尾 endsWith {"key":"ClientRequestPath","operator":"endsWith","value":"/foo"}
不以……开头 !startsWith {"key":"ClientRequestPath","operator":"!startsWith","value":"/foo"}
不以……结尾 !endsWith {"key":"ClientRequestPath","operator":"!endsWith","value":"/foo"}
包含 contains {"key":"ClientRequestPath","operator":"contains","value":"/static"}
不包含 !contains {"key":"ClientRequestPath","operator":"!contains","value":"/static"}
值在一组值中 in {"key":"EdgeResponseStatus","operator":"in","value":[200,201]}
值不在一组值中 !in {"key":"EdgeResponseStatus","operator":"!in","value":[200,201]}

筛选字段大约有 30 个运算符和 1000 字节的限制。超出此值将返回错误。

逻辑运算符

  • 可以使用 ANDOR 逻辑运算符连接筛选器。

  • 逻辑运算符可以嵌套。

以下是逻辑运算符的实现示例。XYZ 用于表示筛选条件:

  • X AND Y AND Z - {"where":{"and":[{X},{Y},{Z}]}}

  • X OR Y OR Z - {"where":{"or":[{X},{Y},{Z}]}}

  • X AND (Y OR Z) - {"where":{"and":[{X}, {"or":[{Y},{Z}]}]}}

  • (X AND Y) OR Z - {"where":{"or":[{"and": [{X},{Y}]},{Z}]}}

Logpush 筛选器充当直通门控,而不是排除列表。当多个条件使用 AND 连接时:

  • 所有条件必须评估为 TRUE,日志才会被推送。
  • 如果任何一个条件为 FALSE,则排除该日志。

一个常见误解是将筛选器解释为“排除匹配所有条件的日志”,而不是“包含匹配所有条件的日志”。

通过 API 或仪表板设置筛选器

可以通过 API 或 Cloudflare 仪表板设置筛选器。请注意,使用筛选器是可选的,但如果使用,必须包含 where 键。

API

以下是通过 API 使用 cURL 的示例请求:

Required API token permissions

At least one of the following token permissions is required:
  • Logs Write
Create Logpush jobbash
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/logpush/jobs" \
	--request POST \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"name": "static-assets",
		"output_options": {
				"field_names": [
						"ClientIP",
						"EdgeStartTimestamp",
						"RayID"
				],
				"sample_rate": 0.1,
				"timestamp_format": "rfc3339",
				"CVE-2021-44228": true
		},
		"dataset": "http_requests",
		"filter": "{\"where\":{\"and\":[{\"key\":\"ClientRequestPath\",\"operator\":\"contains\",\"value\":\"/static\"},{\"key\":\"ClientRequestHost\",\"operator\":\"eq\",\"value\":\"example.com\"}]}}",
		"destination_conf": "s3://<BUCKET_PATH>?region=us-west-2/"
	}'

仪表板

要通过仪表板设置筛选器:

  1. 在 Cloudflare 仪表板中,前往账户或域名(也称为 zone)级别的 Logpush(日志推送) 页面。

    账户级别: Go to Logpush ↗

    域名(也称为 zone)级别: Go to Logpush ↗

  2. 选择要推送到存储服务的数据集。根据你的选择,可分别访问账户范围数据集zone 范围数据集

  3. Select data fields(选择数据字段) 下方的 Filter(筛选) 部分,你可以设置筛选器。

  4. 你需要选择一个数据集字段、一个运算符和一个 Value(值)

  5. 你可以使用 ANDOR 逻辑运算符连接更多筛选器。

  6. 选择 Next(下一步) 以继续设置你的 Logpush 任务。

这篇文档对您有帮助吗?