为网站域名开启WAF日志采集后,您可以使用日志查询功能对采集到的日志数据进行实时查询与分析,并基于查询与分析结果生成统计图表、创建告警等。

前提条件

查询和分析日志

  1. 登录Web应用防火墙控制台
  2. 在顶部菜单栏,选择Web应用防火墙实例的资源组和地域(中国内地海外地区)。
  3. 在左侧导航栏,选择日志管理 > 日志服务
  4. 日志服务页面上方,选择要操作的网站域名。
    注意 域名必须已经开启日志采集(即状态开关已打开),否则WAF不会采集其日志数据,也不提供查询与分析服务。
    网站域名
  5. 日志查询页签,使用查询分析语句对WAF日志数据进行查询与分析:查询分析步骤
    1. 通过时间选择器(图示①),修改日志查询时间范围。
    2. 在语句输入框(图示②),输入查询语句。
      查询语句采用阿里云日志服务专用语法,关于该语法的详细介绍,请参见查询语法。查询语句中使用WAF日志包含的字段作为查询字段,关于支持使用的查询字段,请参见WAF日志字段
      如果您不了解日志查询语法,推荐您使用高级搜索。您只需在语句输入框上方展开高级搜索,设置搜索条件并单击搜索,语句输入框即可自动生成与搜索条件匹配的日志查询语句。高级搜索下表描述了高级搜索支持设置的搜索条件。
      搜索条件 说明
      IP 发起请求的客户端的IP地址。
      Trace ID WAF为客户端请求生成的唯一标识。WAF向客户端返回拦截页面或者滑块验证响应时会提供该ID,用于问题分析与故障排查。
      Rule ID 请求命中的WAF防护规则ID。您可以在安全报表或者系统管理 > 防护规则组页面,获取规则ID信息。
      服务器响应状态码 源站服务器响应WAF回源请求的HTTP状态码。
      WAF返回客户端响应码 WAF响应客户端请求的HTTP状态码。
      拦截规则 请求命中的WAF防护规则的类型。关于WAF防护模块的介绍及不同模块防护规则的配置方法,请参见概述
    3. 如果您需要对查询结果进行计算和统计分析,可以在语句输入框(图示②)已输入的查询语句后,输入分析语句;如果您只需要查询满足条件的日志数据,可以跳过该步骤。
      分析语句和查询语句间使用竖线(|)分隔。分析语句采用标准的SQL92语法,关于分析语句的更多介绍,请参见分析概述
    4. 单击查询/分析(图示③)。
      查询与分析结果(即命中查询条件的WAF日志数据)将会显示在页面下方,包含日志分布直方图、原始日志统计图表。您可以基于查询结果进行快速分析、生成统计图表、设置告警等,相关操作,请参见操作查询与分析结果创建告警
    关于查询与分析语句的案例,请参见查询与分析案例

操作查询与分析结果

结果类型 说明
日志分布直方图 日志分布直方图位于语句输入框下方,展示了查询到的日志数据在时间上的分布。查询分析结果
您可以在该区域执行以下操作:
  • 将光标放置在某个日志数据(即绿色数据块)上,查看该日志数据的产生时间范围和日志记录次数。
  • 单击某个日志数据,查看该日志数据产生时间范围内的日志分布直方图。
原始日志 原始日志位于日志分布直方图下方,以分页形式展示每一条日志的详细内容(即日志包含的Key-Value字段信息)。原始日志
您可以在原始日志右上角(图示①区域)执行以下操作:
  • 内容列显示:修改原始日志内容列的显示方式,例如是否换行显示、是否隐藏默认字段、JSON默认展开层级、长字符串折叠设置等。
  • 列设置:原始日志默认只显示内容列,您可以通过列设置,将指定的字段设置为以列形式显示。
  • 日志下载:单击下载图标图标,可以将日志下载到本地计算机,支持直接下载通过Cloud Shell下载通过命令行工具下载等方式。具体操作,请参见下载日志

基于原始日志字段快速查询(图示②区域)

您可以在原始日志的内容列,单击某个字段的值,查询具有该字段属性的日志。例如,单击request_method: GET的值GET,语句输入框中将自动增加and request_method: GET查询语句(表示在原有查询基础上,查询request_methodGET的日志),并展示相应的查询结果。原始日志

快速分析(图示③区域)

帮助您快速分析某一字段在一段时间内的分布情况,减少索引关键数据的时间成本。操作说明如下:
  1. 单击某个字段右侧的查看图标图标,分析该字段取值的分布情况,返回占比最高的前10个结果。例如,单击ua_browser字段后的查看图标图标,分析日志数据中占比最高的前10个浏览器类型。
  2. 单击跳转图标图标,将上一步使用的分析语句添加到语句输入框,并跳转到统计图表页签,查看更详细的分析图表。

    如果字段取值数量超过10个,您可以单击唯一数,分析字段取值的去重统计数量。

关于快速分析的更多介绍,请参见快速分析
统计图表 统计图表位于日志分布直方图下方,以图表的形式为您展示了分析结果。您必须在语句输入框中输入SQL92分析语句,才可以在统计图表页签查看对应的统计图表。分析图表
统计图表区域支持以下操作:
  • 切换图表类型(图示①区域):选择不同的图表类型来查看分析结果。关于不同图表类型的介绍,请参见图表设置
  • 预览图表(图示②区域):切换图表类型后,查看图表预览效果。

    单击添加到仪表盘,可以将当前图表添加到仪表盘。单击下载日志,可以将日志下载到本地计算机,支持直接下载通过Cloud Shell下载通过命令行工具下载等方式。具体操作,请参见下载日志

  • 修改统计图表配置(图示③区域):
    • 属性配置:用于配置图表的显示属性,包括X轴、Y轴数据源、边距、字号等,不同的图表属性不同。适用于所有的查询分析场景。
    • 数据源:用于设置占位符变量,如果有图表的下钻行为是跳转到这个图表所在的仪表盘,那么当变量名一致的情况下,会将单击触发下钻的数据替换为此处设置的占位符变量,重新执行分析。适用于下钻场景中的目的仪表盘。具体操作,请参见下钻分析
    • 交互行为:用于设置该图表的下钻动作,设置后,在仪表盘中单击该图表中的值,即可执行指定的下钻动作。适用于下钻场景中的触发下钻图表。具体操作,请参见下钻分析
关于统计图表的更多介绍,请参见统计图表概述

创建告警

您可以基于当前查询与分析语句创建告警。创建告警后,日志服务将定期检查查询与分析结果,并在检查结果满足预设条件时,向您发送告警通知,实现实时的服务状态监控。

在查询语句输入框右上方,单击另存为告警,并完成创建告警配置向导,即可创建告警。具体操作,请参见设置告警

查询与分析案例

  • 以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
    统计图表如下图所示。final_plugin分布
  • 以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
    统计图表如下图所示。查询QPS
  • 分析受CC攻击次数最多的域名,展示CC攻击拦截次数(times)和被访问域名(host)。
    *
    and acl_action :block |
    SELECT
      count(*) as times,
      host
    GROUP by
      host
    ORDER by
      times desc
    统计图表如下图所示。查询CC攻击
  • 以秒为步长,分析网站请求日志的详情,展示时间(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)遭受的攻击请求次数按天的变化趋势。
    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
    date_trunc函数用于对当前时间进行按天对齐分组。关于该函数的更多介绍,请参见日期和时间函数
    统计图表如下图所示。推荐您使用线图方式查看分析结果。分组统计
  • 分析网站(your_domain_name)遭受的攻击请求的来源国家(country)分布。
    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
    WAF日志中real_client_ip字段表示真实客户端IP。如果由于用户通过代理服务器访问或请求头中IP字段有误等原因无法获取真实客户端IP(real_client_ip取值为-),也可以直接使用remote_addr字段(表示直连客户端IP)作为真实客户端IP。
    统计图表如下图所示。推荐您使用世界地图方式查看分析结果。世界地图
  • 分析网站(your_domain_name)遭受的攻击请求的来源省份(province)分布。
    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
    ip_to_province函数用于获取真实客户端IP对应的省份信息。关于该函数的更多介绍,请参见IP函数
    统计图表如下图所示。如果攻击IP均属于中国,推荐您使用中国地图方式查看分析结果。省份分布