实时分析态势感知大数据日志-阿里云开发者社区

开发者社区> 阿里云存储服务> 正文

实时分析态势感知大数据日志

简介: 本篇介绍如何使用态势感知大数据日志实时分析功能,包含基于时间、地理位置分析的具体实践等

背景

目前,阿里云态势感知与日志服务打通,对外开放平台依赖或者产生的日志,包括网络、主机、安全三大类共14种子类日志。提供近实时的日志自动采集存储、并提供基于日志服务的查询分析、报表报警、下游计算对接与投递的能力。

image

本文介绍如何在态势感知控制台日志中的日志分析功能。

选择特定类型的日志,即可对采集到的日志数据进行实时查询与分析、查看或编辑仪表盘、设置监控告警等。

操作步骤

  1. 登录态势感知控制台,在左侧导航栏中选择 日志分析 ,进入 日志分析 页面。
  2. 选择您需要查看的日志类型,确认右侧的 状态 为开启。
  3. 单击 日志分析

当前页面内嵌了日志服务的查询分析页面,系统会自动为您输入查询语句,选择特定的日志类型的主题,如__topic__: aegis-log-process, 查看安全告警的日志数据。

图 1. 日志分析

image

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

说明 您的态势感知日志的保存时间为180天,180天之前的日志数据会被删除。

图 2. 查询日志

image

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

  • 自定义查询与分析

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

  • 查看日志的时间分布

搜索框下方展示了符合查询时间和查询语句的日志的时间分布,以时间为横轴、数量为纵轴的柱状图形式展示。并显示查询到的日志总数。

说明:可以在柱状图上滑动以选择更小范围的时间区域,时间选择器会自动更新为选择的时间范围,并刷新结果。

图 3. 日志的时间分布

image

  • 查看原始日志

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

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

原来的搜索语句 and username: root

图 4. 原始日志
image

  • 查看分析图表

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

图 5. 统计图表
image

  • 快速分析

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

图 6. 快速分析
image

自定义查询分析

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

$Search | $Analytics
类型 说明
查询(Search) 查询条件,可以由关键词、模糊、数值等、区间范围和组合条件等产生。如果为空或*,则代表所有数据。
分析(Analytics) 对查询结果或全量数据进行计算和统计。

说明: 两部分均为可选,当Search部分为空时代表针对该时间段所有数据不过滤任何条件,直接对结果进行统计。当Analysis部分为空时,代表只返回查询结果,不做统计。

查询语法

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

全文查询

不需要指定字段,直接输入关键字查询。可以用双引号("")包裹关键字,多个关键字之间以空格或and分割。

示例:

  • 多关键字查询

搜索包含所有www.aliyun.com404的日志。例如:

www.aliyun.com 404

或者:

www.aliyun.com and 404
  • 条件查询

这里搜索所有包含www.aliyun.com并且包含error或者404的日志。例如:

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

这里搜索所有包含www.aliyun.com并且包含failed_开头关键字。例如:

www.aliyun.com and failed_*

说明: 查询只支持后缀加*,不支持前缀*,如:*error

字段查询

日志服务支持基于字段进行更精准的查询。

可实现数值类型字段的比较,格式为字段:值字段>=值,通过andor等进行组合。也可以和全文搜索组合使用,同样通过andor组合。

态势感知的个个字段同样可以基于字段查询,各个字段的含义、类型、格式等信息请查看态势感知日志字段

示例:

  • 查询多字段

搜索所有严重的安全报警的日志:

__topic__ : sas-security-log and level: serious

如果要搜索某个客户端1.2.3.4上所有的SSH登录:可以这样:

__topic__:aegis-log-login and ip:10.117.13.74 and warn_type:SSHLOGIN 

说明

  • 每一条态势感知的日志都有一个字段__topic表示主题,态势感知的14中日志,都是通过__topic__区分的。

    • 示例中用的字段levelwarn_typeip等都是态势感知日志特定日志类型的字段,详细的字段列表和信息,可以参考态势感知日志字段
  • 查询数值字段

搜索所有响应时间超过1秒的本地DNS查询日志:

__topic__:local-dns and time_usecond > 1000000

也支持区间查询,查询响应时间大于1秒且小于等于10秒的本地DNS查询日志:

__topic__:local-dns and time_usecond in [1000000,10000000]

该查询还可以通过以下语句实现:

__topic__:local-dns and time_usecond >= 1000000 and time_usecond <= 10000000

详细的查询语法说明请参考索引与查询

分析语法

您可以使用SQL/92语法对日志数据进行分析与统计,日志服务支持的语法与函数请查看实时分析简介

说明

  • 分析语句中可以省略SQL标准语法中的from 表格名语句,即from log。
  • 日志数据默认返回前100条,您可以通过LIMIT语法修改返回范围。

基于日志时间的查询分析

每一条态势感知的日志都有一个内置字段:__time__,表示这条日志的时间,以便在统计时进行基于时间的计算。其格式为 Unix时间戳,本质是一个自从1970-1-1 0:0:0 UTC时间开始的累计过去的秒数。因此实际使用时,经过可选的计算后,需要格式化才可以展示。

  • 选择并展示时间

这里在特定时间范围内,选择ip为1.2.3.4的最新10条登录日志,展示其中时间、来源IP以及登录类型:

__topic__: aegis-log-login and ip: 1.2.3.4
          | select date_format(__time__, '%Y-%m-%d %H:%i:%s') as time, warn_ip, warn_type 
            order by __time__ desc  
            limit 10

图 7. 选择并展示时间
image

  • 计算时间

查询登录过后的天数,可以使用 __time__进行计算:

__topic__: aegis-log-login and ip: 1.2.3.4
          | select date_format(__time__, '%Y-%m-%d %H:%i:%s') as time, warn_ip, warn_type ,
                      round((to_unixtime(now()) - __time__)/86400,1) as "days_passed"
            order by __time__ desc  
            limit 10

说明: 这里使用round((to_unixtime(now()) - __time__)/86400, 1),先用to_unixtimenow()获取的时间转化为Unix时间戳,再与内置时间字段__time__相减,获得已经过去的时间秒数。最后除以86400,即一天的总秒数,再用函数round(data, 1)圆整为小数点后1位数的值,可得出每条攻击日志距离现在已经过去了几天。

图 8. 查询结果
image

  • 基于特定时间分组统计

如果想知道特定时间范围内,某个设备的登录趋势如何,使用如下SQL:


__topic__: aegis-log-login and ip: 1.2.3.4
| 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. 统计结果
image

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

  • 基于时间分组统计

如果想知道更灵活的分组下时间规律,例如整个账户下设备每5分钟的登录趋势,需要进行数学计算。可以使用如下SQL:

__topic__: aegis-log-login
| 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. 时间分组统计结果
image

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

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

基于客户端IP的查询分析

态势感知日志中有反映客户端IP的字段,如登录日志的登录源IP字段warn_ip

  • 登录源国家分布

这里对某个设备登录的来源国家分布:

__topic__: aegis-log-login and uuid: 12344567
| SELECT ip_to_country(warn_ip) as country,
         count(1) as "登录次数"
         group by country

说明: 这里先用函数ip_to_country得到这个登录源IPwarn_ip对应的国家信息。

图 13. 登录源国家分布-分析结果
image

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

  • 登录者省份分布

如果您希望获得更详细的基于省份的分布,可以使用函数 ip_to_province,例如:

__topic__: aegis-log-login and uuid: 12344567
| SELECT ip_to_province(warn_ip) as province,
         count(1) as "登录次数"
         group by province

说明: 这里使用了另外一个IP函数ip_to_province来获得一个IP的所属省份。如果是中国以外的IP地址,依然会尝试转化为其国家所属省份(州),但在选择中国地图展示时,会无法展示出来。

图 15. 登录者省份分布-分析结果
image

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

  • 登陆者热力分布

如果期望获得一张登录者的热力图,可以使用另外一个函数ip_to_geo,例如:

__topic__: aegis-log-login and uuid: 12344567
| SELECT ip_to_geo(warn_ip) as geo,
         count(1) as "登录次数"
         group by geo
         limit 10000

说明 : 这里使用了另外一个IP函数ip_to_geo来获得一个IP的所在经纬度,并获取前1万条。

图 17. 登陆者热力分布-分析结果
image

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

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

进一步参考

进一步参考相关最佳实践:

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

阿里云存储基于飞天盘古2.0分布式存储系统,产品多种多样,充分满足用户数据存储和迁移上云需求。

官方博客
链接