当前位置:服务器行业动态 → 正文

StreamAlert:无服务器实时数据分析

责任编辑:editor004 作者:麦克周 |来源:企业网D1Net  2017-08-09 11:13:23 本文摘自:INFOQ

2017年2月1日,Airbub安全团队宣布开源框架StreamAlert发布了,它是一种实时数据分析框架,附带伴随时间点的报警功能。StreamAlert属于无服务化开源框架,每小时可以横向扩展到TB级别数据支撑力度,自动化的基础设施部署以及默认开启安全保护机制。

下面这张图是StreamAlert的功能示意图。

  为什么会有StreamAlert?

Airbnb公司需要一种产品可以基于它们公司的实际运行环境,强化工程师和管理员的能力,特别是针对实时数据的获取、分析和告警。

当安全团队设计用户用例,并且寻找各种可行性方案之后,团队根据需求进行编码,需要实现的需求包括:

针对任何AWS账户的简单、安全、可重复的部署方式每天轻松从兆扩展为百万兆最小化基础设施维护,不需要专家级的devops人员默认开启基础设施安全机制,不需要安全专家支持从不同环境过来的数据(例如IT、PCI、工程部门)支持不同的环境类型的数据(例如云、数据中心、办公室)支持数据的不同类型(例如JSON、CSV、Key-Value、Syslog)支持使用类似于安全、基础设施、尊重以及其他方面的测试用例

Airbub安全团队因为找不到这样一款适配所有需求的产品,所以他们决定自己构建一个。因为团队需要的产品与环境无关,也就是说具有通用型,自然而然就满足了成为开源项目的基础。

优点

就像上面提到的,StreamAlert有一些特定的优点:

无服务器:StreamAlert利用了AWS的Lambda,这种做的好处是你不再需要自己管理服务器,不再需要对服务器打补丁,不再需要了解服务器的硬件配置差别可扩展性:StreamAlert利用AWS的Kinesis Streams特性,这样做的好处是支持“流量每小时从兆扩展为百万兆,每秒的写入记录数从千级扩展到百万级”自动化:StreamAlert利用Terraform,支持基础设施和支持服务以代码的形式呈现出来,并支持自动化部署安全机制: StreamAlert使用安全传输(TLS),在容器/沙盒内进行数据分析,根据自定义的环境进行数据切分,支持基于角色的访问控制(RBAC)开放源代码:任何人都可以使用或者贡献StreamAlert源代码

用户用例

下面这张图解释了StreamAlert可以分析的一些数据集范例:

StreamAlert的产品目标是尽可能地支撑未知用户需求,也就是说对于数据的分析和告警用户用例,应该支撑得最为广泛。

更高层次来说,StreamAlert支持如下:

任意源:StreamAlert可以接收从S3的bucket过来的数据,也可以接收来自任意支持亚马逊Kinesis

Stream的第三方服务的数据。例如:fluentd、logstash、aws-kinesis-agent、osquery、Java、JavaScript、Ruby、PHP,以及任何被AWS SDK支持的语言。任何操作系统,StreamAlert可以接收从任何设备过来的数据,只要它们支持日志转发功能,包括Linux、MacOS、Windows,等等。任何环境,StreamAlert可以接收从任何环境发送过来的数据,只要它们可以连接到互联网,包括云、数据中心、办公室,等等。

从数据的角度考虑,StreamAlert支持例如JSON、CSV、Key-Value,以及Syslog等多种格式。

如果你是一个AWS客户,可以通过S3的bucket方式压缩数据格式。相应地,StreamAlert也支持CloudTrail、AWS Config,以及S3服务访问日志。

如果你不是AWS客户,StreamAlert也支持如下数据:

主机日志(例如Syslog、osquery、auditd)网络日志(例如Palo Alto Networks、Cisco)Web应用日志(例如Apache、nginx)SaaS提供者(例如Box、OneLogin)

需要注意的是,SmartAlert并不是为了解决分析指标或者时间序列的用户用例设计的,在这个领域已经有很多很棒的开源框架或者商业软件存在了,例如Prometheus、DataDog,以及NewRelic。

数据分析

使用Python编写的规则包括数据分析和告警逻辑。以下是一段Python代码,示范在PCI环境下对sudo的使用进行告警:

@rule('production_sudo', logs=['osquery'], matchers=['pci'], outputs=['s3', 'pagerduty', 'slack'])def production_sudo(record): table_name = record['name'] tag = record['columns']['tag'] return ( table_name == 'linux_syslog_auth' and fnmatch(tag, 'sudo*') )

告警

如上图可见,StreamAlert配置了灵活的告警框架,可以和全新的或者已经存在的故障管理工具集成在一起使用。StreamAlert可以启用规则,实现发送给多个告警输出。

架构

StreamAlert使用如下的设备:

AWS Kinesis Streams:数据流、AWS Lambda流(基于流的模型)AWS Kinesis Firehose:加载流数据到S3数据存储层AWS Lambda (Python):数据分析和告警AWS SNS:告警队列AWS S3:可选的数据源、长期数据存储层、长期告警存储层AWS Cloudwatch:基础设施指标AWS KMS:应用密码的加密和解密AWS IAM:基于规则的访问控制(RBAC)

下一步计划

在2017年的Q2,Airbub的安全团队预计会加强StreamAlert的分散流量处理能力,进一步提升告警的上下文关联度。

对于历史数据的检索,StreamAlert预计在2017年年底实现功能,通过使用AWS Athena(一种S3提供的无服务器交互式查询服务),这种方式将会允许用户使用SQL语句进行实时和定时的分析数据查询。

关键字:StreamAlertRBAC

本文摘自:INFOQ

x StreamAlert:无服务器实时数据分析 扫一扫
分享本文到朋友圈
当前位置:服务器行业动态 → 正文

StreamAlert:无服务器实时数据分析

责任编辑:editor004 作者:麦克周 |来源:企业网D1Net  2017-08-09 11:13:23 本文摘自:INFOQ

2017年2月1日,Airbub安全团队宣布开源框架StreamAlert发布了,它是一种实时数据分析框架,附带伴随时间点的报警功能。StreamAlert属于无服务化开源框架,每小时可以横向扩展到TB级别数据支撑力度,自动化的基础设施部署以及默认开启安全保护机制。

下面这张图是StreamAlert的功能示意图。

  为什么会有StreamAlert?

Airbnb公司需要一种产品可以基于它们公司的实际运行环境,强化工程师和管理员的能力,特别是针对实时数据的获取、分析和告警。

当安全团队设计用户用例,并且寻找各种可行性方案之后,团队根据需求进行编码,需要实现的需求包括:

针对任何AWS账户的简单、安全、可重复的部署方式每天轻松从兆扩展为百万兆最小化基础设施维护,不需要专家级的devops人员默认开启基础设施安全机制,不需要安全专家支持从不同环境过来的数据(例如IT、PCI、工程部门)支持不同的环境类型的数据(例如云、数据中心、办公室)支持数据的不同类型(例如JSON、CSV、Key-Value、Syslog)支持使用类似于安全、基础设施、尊重以及其他方面的测试用例

Airbub安全团队因为找不到这样一款适配所有需求的产品,所以他们决定自己构建一个。因为团队需要的产品与环境无关,也就是说具有通用型,自然而然就满足了成为开源项目的基础。

优点

就像上面提到的,StreamAlert有一些特定的优点:

无服务器:StreamAlert利用了AWS的Lambda,这种做的好处是你不再需要自己管理服务器,不再需要对服务器打补丁,不再需要了解服务器的硬件配置差别可扩展性:StreamAlert利用AWS的Kinesis Streams特性,这样做的好处是支持“流量每小时从兆扩展为百万兆,每秒的写入记录数从千级扩展到百万级”自动化:StreamAlert利用Terraform,支持基础设施和支持服务以代码的形式呈现出来,并支持自动化部署安全机制: StreamAlert使用安全传输(TLS),在容器/沙盒内进行数据分析,根据自定义的环境进行数据切分,支持基于角色的访问控制(RBAC)开放源代码:任何人都可以使用或者贡献StreamAlert源代码

用户用例

下面这张图解释了StreamAlert可以分析的一些数据集范例:

StreamAlert的产品目标是尽可能地支撑未知用户需求,也就是说对于数据的分析和告警用户用例,应该支撑得最为广泛。

更高层次来说,StreamAlert支持如下:

任意源:StreamAlert可以接收从S3的bucket过来的数据,也可以接收来自任意支持亚马逊Kinesis

Stream的第三方服务的数据。例如:fluentd、logstash、aws-kinesis-agent、osquery、Java、JavaScript、Ruby、PHP,以及任何被AWS SDK支持的语言。任何操作系统,StreamAlert可以接收从任何设备过来的数据,只要它们支持日志转发功能,包括Linux、MacOS、Windows,等等。任何环境,StreamAlert可以接收从任何环境发送过来的数据,只要它们可以连接到互联网,包括云、数据中心、办公室,等等。

从数据的角度考虑,StreamAlert支持例如JSON、CSV、Key-Value,以及Syslog等多种格式。

如果你是一个AWS客户,可以通过S3的bucket方式压缩数据格式。相应地,StreamAlert也支持CloudTrail、AWS Config,以及S3服务访问日志。

如果你不是AWS客户,StreamAlert也支持如下数据:

主机日志(例如Syslog、osquery、auditd)网络日志(例如Palo Alto Networks、Cisco)Web应用日志(例如Apache、nginx)SaaS提供者(例如Box、OneLogin)

需要注意的是,SmartAlert并不是为了解决分析指标或者时间序列的用户用例设计的,在这个领域已经有很多很棒的开源框架或者商业软件存在了,例如Prometheus、DataDog,以及NewRelic。

数据分析

使用Python编写的规则包括数据分析和告警逻辑。以下是一段Python代码,示范在PCI环境下对sudo的使用进行告警:

@rule('production_sudo', logs=['osquery'], matchers=['pci'], outputs=['s3', 'pagerduty', 'slack'])def production_sudo(record): table_name = record['name'] tag = record['columns']['tag'] return ( table_name == 'linux_syslog_auth' and fnmatch(tag, 'sudo*') )

告警

如上图可见,StreamAlert配置了灵活的告警框架,可以和全新的或者已经存在的故障管理工具集成在一起使用。StreamAlert可以启用规则,实现发送给多个告警输出。

架构

StreamAlert使用如下的设备:

AWS Kinesis Streams:数据流、AWS Lambda流(基于流的模型)AWS Kinesis Firehose:加载流数据到S3数据存储层AWS Lambda (Python):数据分析和告警AWS SNS:告警队列AWS S3:可选的数据源、长期数据存储层、长期告警存储层AWS Cloudwatch:基础设施指标AWS KMS:应用密码的加密和解密AWS IAM:基于规则的访问控制(RBAC)

下一步计划

在2017年的Q2,Airbub的安全团队预计会加强StreamAlert的分散流量处理能力,进一步提升告警的上下文关联度。

对于历史数据的检索,StreamAlert预计在2017年年底实现功能,通过使用AWS Athena(一种S3提供的无服务器交互式查询服务),这种方式将会允许用户使用SQL语句进行实时和定时的分析数据查询。

关键字:StreamAlertRBAC

本文摘自:INFOQ

电子周刊
回到顶部

关于我们联系我们版权声明隐私条款广告服务友情链接投稿中心招贤纳士

企业网版权所有 ©2010-2024 京ICP备09108050号-6 京公网安备 11010502049343号

^