Web应用防火墙管理控制台的日志服务实时查询分析功能页面集成日志服务的日志分析日志报表功能。您为指定网站域名开通WAF日志采集功能后,即可在日志服务实时查询分析功能页面对采集到的日志数据进行实时查询与分析、查看或编辑仪表盘、设置监控告警等操作。

操作步骤

  1. 登录Web应用防火墙管理控制台,定位到市场管理 > 应用管理页面。
  2. 单击日志服务查询分析区域,打开日志服务页面。
  3. 选择网站域名,确认右侧的状态开关为开启。
  4. 单击日志分析

    当前页面集成日志服务产品的查询分析页面,系统将自动为您输入查询语句。例如,matched_host: "www.aliyun.com",查看您选定网站域名的所有日志数据。



  5. 输入您的查询分析语句,选择日志时间范围后单击查询/分析

更多操作说明

在日志分析页面,您还可以对查询到的日志数据进行以下操作:
  • 自定义查询与分析

    日志服务定义了一系列查询语法和分析语法,支持多种复杂场景下的日志查询。更多详细介绍,参考自定义查询与分析

  • 查看日志的时间分布
    搜索框下方展示了符合查询时间和查询语句的日志的时间分布情况,以时间为横轴、数量为纵轴的柱状图形式展示。并显示查询到的日志总数。
    说明 您可以在柱状图上按住鼠标左键拖拽选择更小范围的时间区域, 时间选择器将自动更新为选择的时间范围,并展示该所选择时间范围内的结果。


  • 查看原始日志

    原始日志页签中,以分页的形式展示每一条日志的详细内容,包括时间、内容以及其中的各个字段。您可以单击内容列显示设置内容列中长字符的显示效果(整行换行)、单击列设置选择特定的字段进行展示、或单击日志下载按钮将当前查询结果下载至本地。

    同时,在内容列中单击相应字段的值或分词,搜索框中将自动增加相应的搜索条件。例如,单击request_method: GET中的值GET,搜索框中将自动增加更新为以下查询语句,并展示相应的查询结果:

    原来的搜索语句 and request_method:  GET


  • 查看分析图表

    日志服务支持以图表形式展示分析结果,您可以在统计图表页面根据需要选择不同的图表类型。更多详细介绍,参考分析图表



  • 快速分析

    原始日志页签中的快速分析功能为您提供一键交互式查询体验,帮助您快速分析某一字段在一段时间内的分布情况,减少索引关键数据的时间成本。更多详细介绍,参考快速分析



自定义查询分析

日志查询语句由查询语法(Search)和分析语法(Analytics)两个部分组成,中间通过|进行分割:

$Search | $Analytics
类型 说明
查询(Search) 查询条件,由关键词、模糊、数值、区间范围和组合条件等产生。如果为空或*,则代表查询所有数据。
分析(Analytics) 对查询结果或全量数据进行计算和统计。
说明 查询和分析两部分均为可选。
  • 当Search部分为空时,代表针对该时间段所有数据不进行任何过滤,直接对结果进行统计。
  • 当Analysis部分为空时,代表只返回查询结果,不进行统计。

查询语法

日志服务查询语法支持 全文查询字段查询,查询框支持换行显示、语法高亮等功能。
  • 全文查询

    无需指定字段,直接输入关键字进行全文查询。您可以用双引号("")包裹关键字查询包含该完整关键字的日志,也可以用空格或and分割查询多个关键字。

    示例
    • 多关键字查询

      搜索包含所有www.aliyun.comerror的日志。

      www.aliyun.com error或者www.aliyun.com and error

    • 条件查询

      搜索所有包含www.aliyun.com,并且包含error或者404的日志。

      www.aliyun.com and (error or 404)
    • 前缀查询

      搜索所有包含www.aliyun.com,并且以failed_开头的日志。

      www.aliyun.com and failed_*
      说明 查询中只支持后缀添加 *,但不支持以 *作为前缀(如 *_error)。
  • 字段查询

    基于字段进行更精准的查询。

    字段查询支持数值类型字段的比较查询,格式为 字段:值字段 >= 值。同时,通过 andor等可进行组合查询,并支持与全文搜索组合使用。
    说明 WAF日志服务中网站域名的访问、运营、攻击日志同样支持基于字段查询。关于日志中各个字段的含义、类型、格式等信息,查看WAF日志字段说明
    示例
    • 查询多字段

      搜索所有被WAF拦截的针对www.aliyun.com网站域名的CC攻击的日志。

      matched_host: www.aliyun.com and cc_blocks: 1

      如果要搜索指定客户端1.2.3.4访问www.aliyun.com网站的所有404错误的访问日志,您可以设置以下查询条件。

      real_client_ip: 1.2.3.4 and matched_host: www.aliyun.com and status: 404
      说明 本示例中的 matched_hostcc_blocksreal_client_ipstatus字段都是WAF记录的日志字段。
    • 查询数值字段

      搜索所有响应时间超过5秒的慢请求日志。

      request_time_msec > 5000

      同时,也支持区间查询。例如,查询响应时间大于5秒且小于等于10秒的日志。

      request_time_msec in (5000 10000]
      说明 您也可以通过以下查询语句获得同样的查询结果:
      request_time_msec > 5000 and request_time_msec <= 10000
    • 查询字段是否存在

      查询指定字段是否存在:

      • 查询存在ua_browser字段的日志。
        ua_browser: *
      • 查询不存在ua_browser字段的日志。
        not ua_browser: *
关于日志服务支持的查询语法完整说明,参考索引与查询

分析语法

您可以使用SQL/92语法对日志数据进行分析与统计。

关于日志服务支持的语法与函数说明,参考实时分析
说明
  • 分析语句中可以省略SQL标准语法中的from 表格名语句,即from log语句。
  • 日志数据默认返回前100条,您可以通过LIMIT语法修改返回范围。

查询分析示例

基于日志时间的查询分析

每一条WAF记录的日志都存在time字段,用于表示日志的时间,格式为年-月-日T时:分:秒+时区。例如,2018-05-31T20:11:58+08:00,其中时区为UTC+8区,即北京时间。

同时,每条日志都拥有一个内置字段, __time__。该字段也表示该条日志的时间,以便在统计时进行基于时间的计算,其格式为Unix时间戳,其本质是一个自从1970-1-1 0:0:0 UTC时间开始的累计经过的秒数。因此在实际使用时,经过可选的计算后,需要经过格式化才能进行展示。
  • 选择并展示时间
    使用 time字段展示日志的时间信息。例如,在特定时间范围内,查询被WAF拦截的针对 www.aliyun.com网站域名的最近10条CC攻击日志,展示日志中的时间、来源IP以及访问客户端字段。
    matched_host: www.aliyun.com and cc_blocks: 1 
    |  select time, real_client_ip, http_user_agent
        order by time desc
        limit 10
  • 计算时间
    使用 __time__字段进行时间的计算。例如,查询遭受CC攻击后经过的天数。
    matched_host: www.aliyun.com  and cc_blocks: 1 
    |  select time, round((to_unixtime(now()) - __time__)/86400, 1) as "days_passed", real_client_ip, http_user_agent
          order by time desc
          limit 10
    说明 本示例中,使用 round((to_unixtime(now()) - __time__)/86400, 1)计算遭受CC攻击后经过的天数。首先,用 to_unixtimenow()获取到的当前时间转化为Unix时间戳;再将该时间与内置时间字段 __time__相减,得到已经过的时间秒数;最后,将该值除以 86400(即一天的总秒数),再使用函数 round(data, 1)取整为小数点后1位数的值。最终,得到每条攻击日志产生的时间距离现在已经过的天数。


  • 基于特定时间分组统计
    查询指定时间范围内,某网站域名每天遭受的CC攻击趋势。
    matched_host: www.aliyun.com  and cc_blocks: 1 
    | select date_trunc('day', __time__) as dt, count(1) as PV 
          group by dt 
    	  order by dt
    说明 本示例中,使用内置时间字段 __time__,供 date_trunc('day', ..)函数进行时间按天对齐分组处理,将每条日志分组至其所属的天的分组中统计总次数(count(1)),并按照所分的时间组进行排序。其中, date_trunc函数中的第一个参数支持使用其他时间单位进行对齐,包括 secondminutehourweekmonthyear等。关于该函数的详细说明,参考日期和时间函数


    说明 您也可以使用折线图方式进行展示。

  • 基于时间分组统计
    如果需要分析更灵活的分组情况下的时间规律,例如指定网站每5分钟遭受CC攻击的趋势,可以通过进一步的数学计算实现。
    matched_host: www.aliyun.com  and cc_blocks: 1 
    | select from_unixtime(__time__ - __time__% 300) as dt, 
             count(1) as PV 
          group by dt 
    	  order by dt 
    	  limit 1000
    说明 本示例中,使用内置时间字段计算 __time__ - __time__% 300,并使用 from_unixtime函数对计算结果进行格式化,将每条日志分到一个5分钟(300秒)的分组区间中统计总次数(count(1))。最终,将查询结果按照所分的时间区间排序,返回前1,000条结果,即相当于所选择时间范围内前83小时的统计结果。


    说明 您也可以使用折线图方式进行展示。

更多关于时间解析的函数,例如将一个时间格式转化为另外一个格式,需要使用 date_parsedate_format函数,相关具体说明,参考日期和时间函数

基于客户端IP的查询分析

WAF日志中包含反映真实客户端IP的字段 real_client_ip。如果由于用户通过代理服务器访问或请求头中IP字段有误等原因无法获得用户真实IP时,也可以直接使用直连客户端IP的字段 remote_addr来获取客户端真实IP。
  • 攻击者国家分布
    查询指定网站遭受的CC攻击的来源国家分布情况。
    matched_host: www.aliyun.com  and cc_blocks: 1 
    | SELECT ip_to_country(if(real_client_ip='-', remote_addr, real_client_ip)) as country, 
             count(1) as "攻击次数" 
    		 group by country
    说明 本示例中,使用函数 if(condition, option1, option2)来选取 real_client_ip字段或者 remote_addr字段(当 real_client_ip字段为 -时)作为客户端真实IP。然后,使用 ip_to_country函数获得客户端IP所对应的国家信息。


    说明 您也可以使用世界地图方式进行展示。

  • 访问者省份分布
    如果您希望进一步查询基于省份的分布情况,可以使用 ip_to_province函数获得IP对应的省份信息。
    matched_host: www.aliyun.com  and cc_blocks: 1 
    | 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,函数依然会尝试获取其国家的省份(州)信息,但您在使用中国地图进行展示时,将无法展示大陆地区以外的IP。


    说明 您也可以使用中国地图方式进行展示。

  • 攻击者热力分布
    如果您想要获得攻击者的热力分布情况,可以使用 ip_to_geo函数获得客户端真实IP对应的经纬度信息。
    matched_host: www.aliyun.com  and cc_blocks: 1 
    | SELECT ip_to_geo(if(real_client_ip='-', remote_addr, real_client_ip)) as geo, 
             count(1) as "攻击次数" 
    		 group by geo
    		 limit 10000
    说明 本示例中,使用 ip_to_geo函数获取客户端真实IP对应位置的经纬度,并返回前10,000条查询结果。


    选择高德地图方式,并单击 显示热力图

基于IP的更多解析函数,例如获得IP所属运营商 ip_to_provider、判断IP是内网还是外网 ip_to_domain等函数的详细说明,参考IP地理函数