筛选条件类型
日志分析的筛选条件分为三类:
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 | Timestamp ISO8601 | 等于 |
| 请求 ID | RequestID | String | 等于,不等于 |
| 内容标识符 | ContentID | String | 等于,不等于 |
| 请求完成时间 | EdgeEndTime | Timestamp ISO8601 | 等于,大于 |
| 边缘函数子请求 | EdgeFunctionSubrequest | Integer | 等于,不等于 |
| 边缘函数父请求 ID | ParentRequestID | String | 等于,不等于 |
六、请求信息
| 筛选项名称 | 日志字段名称 | 数据类型 | 运算符 |
| 请求域名 | RequestHost | String | 等于 |
| 请求方式 | RequestMethod | String | 等于,不等于 |
| 请求时间 | RequestTime | Timestamp ISO8601 | 等于 |
| 请求 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 | Timestamp ISO8601 | 等于 |
| 请求方式 | 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 | 等于,不等于 |