DDoS高防IP产品在控制台的全量日志页面嵌入了日志服务日志分析日志报表页面。您对于特定网站开通了DDoS高防日志功能之后,可以在当前页面对采集到的日志数据进行实时查询与分析、查看或编辑仪表盘、设置监控告警等。

操作步骤

  1. 登录DDoS高防IP控制台,在左侧导航栏中选择日志 > 全量日志,进入全量日志页面。
  2. 选择您需要开启DDoS高防日志采集功能的网站,确认右侧的状态为开启。
  3. 单击日志分析

    当前页面内嵌了日志服务的查询分析页面,系统会自动为您输入查询语句,如matched_host: www.aliyun.com,查看基于选定网站的日志数据。

    图 1. 日志分析


  4. 输入您的查询分析语句,选择日志时间范围后单击查询
    说明 您的DDoS高防日志的默认保存时间为3天,3天之前的日志数据会被删除。默认情况下只能查询到过去三天内的日志数据。若您需要修改日志保存时间,请参考修改日志保存时间
    图 2. 查询日志


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

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

  • 查看日志的时间分布
    搜索框下方展示了符合查询时间和查询语句的日志的时间分布,以时间为横轴、数量为纵轴的柱状图形式展示。并显示查询到的日志总数。
    说明 可以在柱状图上滑动以选择更小范围的时间区域,时间选择器会自动更新为选择的时间范围,并刷新结果。
    图 3. 日志的时间分布


  • 查看原始日志

    原始日志页签中,以分页的形式展示了每一条日志的详细内容,包括时间、内容以及其中的各个字段。您可以对列进行排序、对当前查询结果进行下载,也可以单击齿轮按钮,选择特定的字段进行展示等。

    在页面中点击相应字段的值或分词,搜索框中自动输入相应的搜索条件。例如鼠标单击request_method: GET中的值GET,会自动给搜索框加入如下语句:

    原来的搜索语句 and request_method:  GET
    图 4. 原始日志


  • 查看分析图表

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

    图 5. 统计图表


  • 快速分析

    快速分析功能为您提供一键交互式查询体验,帮助您快速分析某一字段在一段时间内的分布情况,减少索引关键数据的时间成本。详细说明请参考快速分析

    图 6. 快速分析


自定义查询分析

日志查询语句由查询语法(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等进行组合。也可以和全文搜索组合使用,同样通过andor组合。

    DDoS网站访问日志和攻击日志同样可以基于字段查询,各个字段的含义、类型、格式等信息请查看DDoS日志字段

    示例:
    • 查询多字段

      搜索所有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等都是DDoS访问与攻击日志的字段,详细的字段列表和信息,可以参考DDoS日志字段
    • 查询数值字段

      搜索所有响应时间超过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语法修改返回范围。

基于日志时间的查询分析

每一条DDoS日志都有一个字段time表示日志的时间,格式为年-月-日T时:分:秒+时区。例如2018-05-31T20:11:58+08:00,其中时区为UTC+8区,也就是北京时间。同时,每条日志都有一个内置字段:__time__,也表示这条日志的时间,以便在统计时进行基于时间的计算。其格式为Unix时间戳,本质是一个自从1970-1-1 0:0:0 UTC时间开始的累计过去的秒数。因此实际使用时,经过可选的计算后,需要格式化才可以展示。
  • 选择并展示时间
    这里在特定时间范围内,选择网站www.aliyun.com被CC攻击的最新10条日志,展示其中时间、来源IP以及访问客户端,直接使用字段time
    matched_host: www.aliyun.com and cc_blocks: 1 
    |  select time, real_client_ip, http_user_agent
        order by time desc
        limit 10
    图 7. 选择并展示时间


  • 计算时间
    查询CC攻击过后的天数,可以使用__time__进行计算:
    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),先用to_unixtimenow()获取的时间转化为Unix时间戳,再与内置时间字段__time__相减,获得已经过去的时间秒数。最后除以86400,即一天的总秒数,再用函数round(data, 1)圆整为小数点后1位数的值,可得出每条攻击日志距离现在已经过去了几天。
    图 8. 查询结果


  • 基于特定时间分组统计
    如果想知道特定时间范围内,某个网站每天被CC攻击的趋势如何,使用如下SQL:
    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第一个参数提供更多其他单位进行对齐,包括secondminiutehourweekmonthyear等,函数说明请参考日期和时间函数
    图 9. 统计结果


    折线图方式展示:
    图 10. 折线图


  • 基于时间分组统计
    如果想知道更灵活的分组下时间规律,例如某个网站每5分钟被CC攻击的趋势,需要进行数学计算。可以使用如下SQL:
    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)),并按照分区时间块排序,获得前1000条,相当于选择时间内的前83小时的数据。
    图 11. 时间分组统计结果


    折线图方式展示:
    图 12. 折线图


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

基于客户端IP的查询分析

DDoS日志中有反映真实客户端IP的字段real_client_ip,但用户通过代理并跳转头中IP有误等情况下无法拿到用户真实IP时,可以直接使用直连客户端IP的字段remote_addr来代替。
  • 攻击者国家分布
    这里对某个网站进行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或者real_client_ip(当real_client_ip-时)。然后将获得的IP传给函数ip_to_country得到这个IP对应的国家信息。
    图 13. 攻击者国家分布-分析结果


    世界地图方式展示:
    图 14. 世界地图


  • 访问者省份分布
    如果您希望获得更详细的基于省份的分布,可以使用函数ip_to_province,例如:
    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函数ip_to_province来获得一个IP的所属省份。如果是中国以外的IP地址,依然会尝试转化为其国家所属省份(州),但在选择中国地图展示时,会无法展示出来
    图 15. 访问者省份分布-分析结果


    中国地图方式展示:
    图 16. 中国地图


  • 攻击者热力分布
    如果期望获得一张攻击者的热力图,可以使用另外一个函数ip_to_geo,例如:
    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函数ip_to_geo来获得一个IP的所在经纬度,并获取前1万条。
    图 17. 攻击者热力分布-分析结果


    高德地图方式展示:
    图 18. 高德地图


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