2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

  • 2017-08-08
  • 本文字数:2148 字

    阅读完需:约 7 分钟

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

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

为什么会有 StreamAlert?

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

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

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

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

优点

就像上面提到的,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,Airbnb 的安全团队预计会加强 StreamAlert 的分散流量处理能力,进一步提升告警的上下文关联度。

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


感谢丁晓昀对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-08-08 19:002126
用户头像

发布了 50 篇内容, 共 31.2 次阅读, 收获喜欢 40 次。

关注

评论

发布
暂无评论
发现更多内容

Android Framework学习笔记(七)AMS全家桶,剖析Android开发未来的出路在哪里

android 程序员 移动开发

Android Material Design尝鲜,阿里P8面试官都说太详细了

android 程序员 移动开发

Android Activity 启动出现白屏带标题或闪屏问题解决,移动开发者社区

android 程序员 移动开发

Android App Bundle探索,android系统软件开发

android 程序员 移动开发

Android Binder 的主要内容概述以及特性和原理,Android开发前景怎么样

android 程序员 移动开发

android Jetpack Navigation组件——堆栈操作和动画效果

android 程序员 移动开发

Android 11 Beta 版正式发布!以及众多面向开发者的重磅更新

android 程序员 移动开发

Android 12体验!新的黑夜模式、影音格式,详解系列文章

android 程序员 移动开发

Android Launcher——ui框架,嵌入式音视频方向

android 程序员 移动开发

华为云GaussDB持续深耕创新与开放,打造企业核心数据上云信赖之选

华为云数据库小助手

GaussDB GaussDB(for openGauss) 华为云数据库 GaussDB(for MySQL) UGO

软件测试常用工具总结(测试管理、单元测试、接口测试、自动化测试、性能测试、负载测试...)

六十七点五

程序员 软件测试 自动化测试 接口测试 测试工程师

android LifeCycle-简单使用和详细原理解析,2021大厂Android面试经历

android 程序员 移动开发

想要实现元宇宙,需要哪些技术支撑?

行云创新

技术 云原生 vr 云宇宙 虚拟

Android - 定位方式,火星坐标系统,一键锁屏,字节Android高工面试

android 程序员 移动开发

Android 3年外包工面试笔记,有机会还是要去大厂学习提升

android 程序员 移动开发

怎么用EasyRecovery恢复sd卡中的数据

淋雨

EasyRecovery

Android APK反编译就这么简单 详解(附图),字节跳动大神讲座

android 程序员 移动开发

Android Jsoup:实现HTML解析和Epub解析,论程序员成长的正确姿势

android 程序员 移动开发

Android App关于应用程序升级的一点内容,app软件开发课程

android 程序员 移动开发

Android Glide 3,flutter小程序

android 程序员 移动开发

墨刀发布企业版v3.5 ! 再度赋能“团队协同”新模式

Android 8 通知渠道(Notification Channels),美团移动端开发工程师

android 程序员 移动开发

android activity Intent 传值 传对象(1),头条三面技术四面HR

android 程序员 移动开发

android activity Intent 传值 传对象,android开发框架开源登录界面

android 程序员 移动开发

读完这些“Java技术栈”,拿下阿里Offer没问题

Java MySQL spring 程序员 JVM

Android 6,android网络开发技术实战详解

android 程序员 移动开发

Android Dialog 的一些使用和优化心得(DialogFragment的使用和优化)

android 程序员 移动开发

android hxgsecurity 常用的集中加密方式封装,android项目开发案例

android 程序员 移动开发

Androdid Droid Fu介绍,flutter底部弹窗

android 程序员 移动开发

Android - 在线浏览源码,电话短信相关,文本变化监听器

android 程序员 移动开发

云原生:详解|K8s技术栈解析, 一文读懂K8s工作原理

息之

架构 容器 云原生 k8s 集群

StreamAlert:无服务器实时数据分析_语言 & 开发_麦克周_InfoQ精选文章