下表列出了受支持的比较运算符及示例值。筛选器以转义的 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 字节的限制。超出此值将返回错误。
-
可以使用
AND、OR逻辑运算符连接筛选器。 -
逻辑运算符可以嵌套。
以下是逻辑运算符的实现示例。X、Y 和 Z 用于表示筛选条件:
-
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 或 Cloudflare 仪表板设置筛选器。请注意,使用筛选器是可选的,但如果使用,必须包含 where 键。
以下是通过 API 使用 cURL 的示例请求:
Required API token permissions
At least one of the following token permissions is required:Logs Write
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/"
}'要通过仪表板设置筛选器:
-
在 Cloudflare 仪表板中,前往账户或域名(也称为 zone)级别的 Logpush(日志推送) 页面。
账户级别: Go to Logpush ↗
域名(也称为 zone)级别: Go to Logpush ↗
-
选择要推送到存储服务的数据集。根据你的选择,可分别访问账户范围数据集与 zone 范围数据集。
-
在 Select data fields(选择数据字段) 下方的 Filter(筛选) 部分,你可以设置筛选器。
-
你可以使用
AND和OR逻辑运算符连接更多筛选器。 -
选择 Next(下一步) 以继续设置你的 Logpush 任务。