日志分析支持通过控制台可视化界面或检索语句对日志数据进行过滤与统计。本文介绍检索语句的语法结构、支持的筛选项,以及在语句模式下拼接 SQL 完成统计分析的方法。
筛选条件类型
日志分析的筛选条件分为三类:
1. 日志源(必选):选择日志类型(七层访问日志或托管规则日志)与数据可用区。
2. 时间范围(必选):查看所选的时间范围内的数据,详情请参见 如何修改日志分析查询时间范围。
3. 其他筛选条件:按支持的筛选项自定义过滤。不同日志类型支持的筛选项不同,详情请参见 支持的筛选项。
检索模式与结果呈现
检索栏提供两种模式,通过检索栏左侧的模式切换控件切换。
模式 | 说明 |
交互模式 | 通过选择筛选项、运算符、值逐个添加筛选条件。同组内条件以 AND 连接,不同组之间以 OR 连接。 从交互模式切换至语句模式时,已添加的筛选条件会转写为检索语句并填入输入框,条件不丢失。 |
语句模式 | 以检索语句书写筛选条件,并可通过管道符 | 拼接 SQL 进行统计分析。 |
执行检索后,页面会根据检索语句内容展示不同结果:
检索语句不含 SQL 时,默认展示「原始日志」页。
检索语句包含 SQL 时,执行后将停留在「统计结果」页并渲染统计表格;表格上方提供结果下载入口。「原始日志」页将同时展示命中筛选条件的日志数据,可自由切换。


检索语句结构
一条完整的检索语句由筛选条件与 SQL 统计语句两部分组成,以管道符
| 拼接:[筛选条件] | [SQL]
筛选条件:对原始日志做行级过滤,语法见下文 筛选条件语法。
SQL:对筛选后的结果做聚合统计,语法见下文 SQL 统计语法。SQL 部分可省略,省略时仅返回命中的原始日志。
筛选条件语法
表达式结构
日志分析筛选条件表达式由筛选项、运算符和值三部分构成,其格式如下图所示:


筛选项:
${…} 形式的内置日志字段,例如 ${RequestHost}、${EdgeResponseStatusCode}。运算符:判断筛选项与值之间的关系,例如
in、>。值:字符串、数字或列表。字符串值需以单引号标注并置于方括号内,例如
['POST'];数字值可直接书写,例如 >500。多个筛选条件之间的关系:多个筛选条件之间采用“且”关系,同一筛选条件包含多个值时,多个值之间采用“或”关系。例如,
${ClientRegion} in ['SG','TH'] AND ${EdgeResponseStatusCode} in [404] 表示检索同时满足以下条件的日志数据:客户端国家/地区为新加坡或泰国,且边缘响应状态码为 404。运算符
逻辑运算符
多个筛选条件可通过逻辑运算符组合:
运算符 | 说明 |
AND | 左右两侧筛选条件均成立时才命中 |
OR | 左右两侧筛选条件任一成立即命中 |
NOT | 对右侧筛选条件取反 |
运算符优先级为 NOT > AND > OR。逻辑运算符大小写不敏感,and 与 AND 等价。
匹配运算符
名称 | 运算符 | 说明 | 示例 |
等于 | in | 筛选项取值在给定列表内 | ${RequestHost} in ['example.com', 'demo.com'] |
不等于 | not ${…} in | 筛选项取值不在给定列表内 | not ${RequestMethod} in ['GET'] |
大于 | > | 筛选项数值大于给定值 | ${EdgeResponseTime} > 500 |
SQL 统计语法
在筛选条件后以管道符
| 拼接 SQL 语句,可对命中筛选条件的日志做聚合统计。SQL 采用 MySQL 风格语法,遵循以下约定:日志字段需使用双引号引用,例如
"ClientIP"。无需编写 FROM 子句,统计对象为管道符左侧筛选后的日志数据。
以 统计 Top 100 客户端 IP 的请求量 为例,一条 SQL 可逐步搭建:
select "ClientIP", count(*) as cnt:选出客户端 IP 及其日志条数,count(*) 统计条数,as cnt 为结果列命名。group by "ClientIP":按客户端 IP 分组,分别统计每个 IP 的条数。order by cnt desc:按条数降序排序。limit 100:只返回前 100 行。拼接后的完整检索语句为:
${RequestHost} in ['example.com'] | select "ClientIP", count(*) as cnt group by "ClientIP" order by cnt desc limit 100
检索语句示例
1. 筛选指定域名下响应耗时大于 500ms 的请求:
${RequestHost} in ['example.com'] and ${EdgeResponseTime} > 500
2. 筛选指定域名下状态码为 404 或 500 的请求:
${RequestHost} in ['example.com'] and ${EdgeResponseStatusCode} in ['404', '500']
3. 在七层访问日志中,筛选触发指定规则且处置方式为拦截或观察的请求:
${SecurityRuleID} in ['2123456789'] and ${SecurityAction} in ['Deny', 'Monitor']
4. 在托管规则日志中,筛选请求路径命中托管规则且最终被拦截的请求:
${SecurityMatchingPosition} in ['Full request path'] and ${SecurityAction} in ['drop']
5. 统计指定域名下各状态码的请求数,按条数降序排列:
${RequestHost} in ['example.com'] | select "EdgeResponseStatusCode", count(*) as cnt group by "EdgeResponseStatusCode" order by cnt desc
6. 统计指定域名下访问量 Top 100 的客户端 IP 及其占比:
${RequestHost} in ['example.com'] | select "ClientIP", count(*) as cnt, round(count(*)*100.0/(select count(*)), 2) as pct group by "ClientIP" order by cnt desc limit 100
7. 统计指定域名下平均响应耗时与最大响应耗时:
${RequestHost} in ['example.com'] | select avg("EdgeResponseTime") as avg_time, max("EdgeResponseTime") as max_tim
支持筛选项
七层访问日志
通用字段
筛选项名称 | 日志字段名称 | 数据类型 | 运算符 |
日志时间 | LogTime | 等于 | |
请求 ID | RequestID | String | 等于,不等于 |
内容标识符 | ContentID | String | 等于,不等于 |
请求完成时间 | EdgeEndTime | 等于,大于 | |
边缘函数子请求 | EdgeFunctionSubrequest | Integer | 等于,不等于 |
边缘函数父请求 ID | ParentRequestID | String | 等于,不等于 |
请求信息
筛选项名称 | 日志字段名称 | 数据类型 | 运算符 |
请求域名 | RequestHost | String | 等于 |
请求方式 | RequestMethod | String | 等于,不等于 |
请求时间 | RequestTime | 等于 | |
请求 URL | RequestUrl | String | 等于,不等于 |
请求 URL 参数 | RequestUrlQueryString | String | 等于,不等于 |
Referer | RequestReferer | String | 等于,不等于 |
User-Agent | RequestUA | String | 等于,不等于 |
HTTP 协议 | RequestProtocol | String | 等于,不等于 |
HTTP/HTTPS | RequestScheme | String | 等于,不等于 |
TLS 版本 | RequestSSLProtocol | String | 等于,不等于 |
请求状态 | RequestStatus | String | 等于,不等于 |
请求范围 | RequestRange | String | 等于 |
请求长度(字节) | RequestBytes | Integer | 等于,大于 |
请求正文长度(字节) | RequestBodyBytes | Integer | 等于,大于 |
边缘节点端口 | RemotePort | Integer | 等于,不等于 |
客户端信息
筛选项名称 | 日志字段名称 | 数据类型 | 运算符 |
客户端 IP | ClientIP | String | 等于,不等于 |
客户端国家/地区 | ClientRegion | String | 等于,不等于 |
客户端行政区(中国大陆) | ClientState | String | 等于,不等于 |
客户端运营商 | ClientISP | String | 等于,不等于 |
设备类型 | ClientDeviceType | String | 等于,不等于 |
客户端端口 | ClientPort | Integer | 等于,不等于 |
客户端连接 ID | ClientConnectionID | String | 等于,不等于 |
响应信息
筛选项名称 | 日志字段名称 | 数据类型 | 运算符 |
缓存状态 | EdgeCacheStatus | String | 等于,不等于 |
响应状态码 | EdgeResponseStatusCode | Integer | 等于,不等于 |
响应总长度(字节) | EdgeResponseBytes | Integer | 等于,大于 |
响应正文长度(字节) | EdgeResponseBodyBytes | Integer | 等于,大于 |
内部处理耗时(毫秒) | EdgeInternalTime | Integer | 等于,大于 |
响应整体耗时(毫秒) | EdgeResponseTime | Integer | 等于,大于 |
边缘服务端信息
筛选项名称 | 日志字段名称 | 数据类型 | 运算符 |
边缘服务器 ID | EdgeServerID | String | 等于,不等于 |
边缘服务器 IP | EdgeServerIP | String | 等于,不等于 |
边缘节点国家/地区 | EdgeServerRegion | String | 等于,不等于 |
边缘节点行政区(中国大陆) | EdgeServerRegionTopDivision | String | 等于,不等于 |
边缘异常信息 | EdgeException | String | 等于,不等于 |
源站信息
筛选项名称 | 日志字段名称 | 数据类型 | 运算符 |
回源解析耗时(毫秒) | OriginDNSResponseDuration | Double | 等于,大于 |
源站 IP | OriginIP | String | 等于,不等于 |
回源请求头耗时(毫秒) | OriginRequestHeaderSendDuration | Double | 等于,大于 |
回源响应头等待耗时(毫秒) | OriginResponseHeaderDuration | Double | 等于,大于 |
源站响应状态码 | OriginResponseStatusCode | Integer | 等于,不等于 |
回源 TLS 版本 | OriginSSLProtocol | String | 等于,不等于 |
回源 TCP 握手耗时(毫秒) | OriginTCPHandshakeDuration | Double | 等于,大于 |
回源 TLS 握手耗时(毫秒) | OriginTLSHandshakeDuration | Double | 等于,大于 |
安全防护信息
筛选项名称 | 日志字段名称 | 数据类型 | 运算符 |
处置方式 | SecurityAction | String | 等于,不等于 |
规则 ID | SecurityRuleID | String | 等于,不等于 |
规则类别 | SecurityModule | String | 等于,不等于 |
Bot 智能分析特征 | BotCharacteristic | String | 等于,不等于 |
网络攻击风险等级 | BotClassAttacker | String | 等于,不等于 |
恶意 Bot 风险等级 | BotClassMaliciousBot | String | 等于,不等于 |
网络代理风险等级 | BotClassProxy | String | 等于,不等于 |
扫描器风险等级 | BotClassScanner | String | 等于,不等于 |
账号接管攻击风险等级 | BotClassAccountTakeOver | String | 等于,不等于 |
Bot 标签 | BotTag | String | 等于,不等于 |
请求 JA3 指纹 | JA3Hash | String | 等于,不等于 |
托管规则日志
请求信息
筛选项名称 | 日志字段名称 | 数据类型 | 运算符 |
站点 | RequestHost | String | 等于,不等于 |
请求 ID | RequestID | String | 等于,不等于 |
请求时间 | RequestTime | 等于 | |
请求方式 | RequestMethod | String | 等于,不等于 |
User-Agent | RequestUA | String | 等于,不等于 |
请求 URI | RequestURI | String | 等于,不等于 |
请求正文(前 10 KB) | RequestBody | String | 等于,不等于 |
客户端信息
筛选项名称 | 日志字段名称 | 数据类型 | 运算符 |
客户端 IP | ClientIP | String | 等于,不等于 |
客户端国家/地区 | ClientCountry | String | 等于,不等于 |
安全防护信息
筛选项名称 | 日志字段名称 | 数据类型 | 运算符 |
规则 ID | SecurityRuleID | String | 等于,不等于 |
规则类别 | SecurityModule | String | 等于,不等于 |
处置方式 | SecurityAction | String | 等于,不等于 |
匹配字段 | SecurityMatchingField | String | 等于,不等于 |
匹配位置 | SecurityMatchingPosition | String | 等于,不等于 |