为网站域名开启WAF日志采集后,您可以使用日志查询功能对采集到的日志数据进行实时查询与分析,并基于查询与分析结果生成统计图表、创建告警等。
前提条件
- 已开通WAF日志服务。相关操作,请参见步骤1:开通WAF日志服务。
- 已为接入WAF防护的网站域名开启日志采集。相关操作,请参见步骤2:开启日志采集。
查询和分析日志
操作查询与分析结果
结果类型 | 说明 |
---|---|
日志分布直方图 | 日志分布直方图位于语句输入框下方,展示了查询到的日志数据在时间上的分布。
您可以在该区域执行以下操作:
|
原始日志 | 原始日志位于日志分布直方图下方,以分页形式展示每一条日志的详细内容(即日志包含的Key-Value字段信息)。![]() 您可以在原始日志右上角(图示①区域)执行以下操作:
基于原始日志字段快速查询(图示②区域) 您可以在原始日志的内容列,单击某个字段的值,查询具有该字段属性的日志。例如,单击 快速分析(图示③区域) 帮助您快速分析某一字段在一段时间内的分布情况,减少索引关键数据的时间成本。操作说明如下:
|
统计图表 | 统计图表位于日志分布直方图下方,以图表的形式为您展示了分析结果。您必须在语句输入框中输入SQL92分析语句,才可以在统计图表页签查看对应的统计图表。
统计图表区域支持以下操作:
关于统计图表的更多介绍,请参见统计图表概述。
|
创建告警
您可以基于当前查询与分析语句创建告警。创建告警后,日志服务将定期检查查询与分析结果,并在检查结果满足预设条件时,向您发送告警通知,实现实时的服务状态监控。
在查询语句输入框右上方,单击另存为告警,并完成创建告警配置向导,即可创建告警。具体操作,请参见设置告警。
查询与分析案例
- 以15分钟为步长,分析在整点时刻由不同WAF防护模块拦截的攻击请求的数量,展示时间(time)、WAF规则防护引擎拦截请求数(wafmodule)、IP黑名单及自定义防护策略(ACL访问控制)拦截请求数(aclmodule)、CC安全防护及自定义防护策略(CC攻击防护)拦截请求数(httpfloodmodule)。
* | SELECT time_series(__time__, '15m', '%H:%i', '0') as time, COUNT_if(final_plugin = 'waf') as "wafmodule", COUNT_if(final_plugin = 'acl') as "aclmodule", COUNT_if(final_plugin = 'cc') as "httpfloodmodule" GROUP by time ORDER by time
- 分析触发了WAF最终防护动作的防护模块类型(final_plugin)的分布情况,展示命中次数(times)、被请求域名(host)和最终防护模块(final_plugin)。
* | SELECT count(*) as times, host, final_plugin GROUP by host, final_plugin ORDER by times desc
- 以15分钟为步长,分析整点时刻的QPS,展示时间(time)和QPS(QPS)。
* | SELECT time_series(__time__, '15m', '%H:%i', '0') as time, count(*) / 900 as QPS GROUP by time ORDER by time
- 分析受CC攻击次数最多的域名,展示CC攻击拦截次数(times)和被访问域名(host)。
* and acl_action :block | SELECT count(*) as times, host GROUP by host ORDER by times desc
- 以秒为步长,分析网站请求日志的详情,展示时间(time)、被访问域名(host)、被访问路径(request_path)、请求方法(request_method)、WAF响应客户端请求的HTTP状态码(status)、源站响应WAF回源请求的HTTP状态码(upstream_status)、查询字符串(querystring)。
* | SELECT date_format(date_trunc('second', __time__), '%H:%i:%s') as time, host, request_path, request_method, status, upstream_status, querystring LIMIT 10
- 查询网站(your_domain_name)遭受的最近10条攻击请求记录,展示请求发起时间(time)、真实客户端IP(real_client_ip)和客户端类型(http_user_agent)。
matched_host: your_domain_name and final_action: block | SELECT time, real_client_ip, http_user_agent ORDER by time desc LIMIT 10
- 分析网站(your_domain_name)遭受的攻击请求被WAF拦截后经过的天数(days_passed,保留1位小数)。
matched_host: your_domain_name and final_action: block | SELECT time, round((to_unixtime(now())-__time__) / 86400, 1) as "days_passed", real_client_ip, http_user_agent ORDER by time desc LIMIT 10
- 分析网站(your_domain_name)遭受的攻击请求次数按天的变化趋势。
date_trunc函数用于对当前时间进行按天对齐分组。关于该函数的更多介绍,请参见日期和时间函数。matched_host: your_domain_name and final_action: block | SELECT date_trunc('day', __time__) as dt, count(1) as PV GROUP by dt ORDER by dt
- 分析网站(your_domain_name)遭受的攻击请求的来源国家(country)分布。
WAF日志中matched_host: your_domain_name and final_action: block | SELECT ip_to_country( if(real_client_ip = '-', remote_addr, real_client_ip) ) as country, count(1) as "攻击次数" GROUP by country
real_client_ip
字段表示真实客户端IP。如果由于用户通过代理服务器访问或请求头中IP字段有误等原因无法获取真实客户端IP(real_client_ip
取值为-
),也可以直接使用remote_addr
字段(表示直连客户端IP)作为真实客户端IP。 - 分析网站(your_domain_name)遭受的攻击请求的来源省份(province)分布。
ip_to_province函数用于获取真实客户端IP对应的省份信息。关于该函数的更多介绍,请参见IP函数。matched_host: your_domain_name and final_action: block | SELECT ip_to_province( if(real_client_ip = '-', remote_addr, real_client_ip) ) as province, count(1) as "攻击次数" GROUP by province