写点什么

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:001957
用户头像

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

关注

评论

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

AI 浪潮下企业身份管理:特点凸显,安全挑战升级

TechLead Studio

AI 企业身份安全

南京大学与阿里云联合启动人工智能人才培养合作计划,已将通义灵码引入软件学院课程体系

阿里巴巴云原生

阿里云 云原生 通义灵码

人工智能+牙科:临床应用中的几个问题

算AI

人工智能 算法 医疗AI 视觉模型

南京大学与阿里云联合启动人工智能人才培养合作计划,已将通义灵码引入软件学院课程体系

阿里云云效

阿里云 云原生 通义灵码

开源项目:一行代码,批量 PDF 转 Word 轻松搞定!

程序员晚枫

PDF word 自动化办公

CAD怎么创建块遮挡效果

极客天地

高可靠架构+智能运维,华为云会议“始终在线”!

平平无奇爱好科技

【超详细】Mac读取移动硬盘速度很慢的原因及解决方法

阿拉灯神丁

文件存储 磁盘管理 Mac软件 苹果电脑 Tuxera NTFS2024

GraalVM 24 正式发布阿里巴巴贡献重要特性 —— 支持 Java Agent 插桩

阿里巴巴云原生

阿里云 云原生

阿里云可观测 2025 年 3 月产品动态

阿里巴巴云原生

阿里云 云原生 可观测

《Operating System Concepts》阅读笔记:p552-p579

codists

操作系统

征程 6|工具链 VP 示例中日志打印解读

地平线开发者

自动驾驶 算法工具链 地平线征程6

TiDB × AI :DeepSeek 时代你需要什么样的数据基座

TiDB 社区干货传送门

Apipost vs Apifox:高效API协作的差异化功能解析

数据追梦人

智能驾驶中预测模块简介

地平线开发者

自动驾驶 算法工具链 地平线征程6

5分钟手把手教你开发一个MCP服务

巫山老妖

MCP协议

智能体爆发元年,谁在“无人区”绘制地形图?

脑极体

AI

AI框架不牢,模型地动山摇

白洞计划

AI

TiDB 可观测性解读(二)丨算子执行信息性能诊断案例分享

TiDB 社区干货传送门

大模型是否有必要本地化部署?

程序员架构进阶

#架构 4月月更 #大模型 DeepSeek

NineData云原生智能数据管理平台新功能发布|2025年3月版

NineData

掌握 JSON 到表格转换:全面指南

数据追梦人

TiDB 观测性解读(一)丨索引观测:快速识别无用索引与低效索引

TiDB 社区干货传送门

Rust 如何轻松实现 RTMP 流媒体推送?深入解析直播推流场景与解决方案

Yeauty

rust ffmpeg Video RTMP media

大模型 MCP:开启 AI 与现实世界的无缝交互革命

巫山老妖

MCP协议

AI框架不牢,模型地动山摇

脑极体

AI

数据库选型指南:TiDB 与 MySQL 全方位对比清单新鲜出炉!

TiDB 社区干货传送门

百度开放3000+实习机会,AI相关岗位占比87%

科技大数据

LLM 不断提升智能下限,MCP 不断提升创意上限

阿里巴巴云原生

阿里云 微服务 云原生 LLM

使用kvmtool运行和调试Linux内核

Linux内核拾遗

虚拟化 Linux内核 kvm kvmtool

卫浴“家电化”:一场科技驱动洗牌赛拉开序幕

Alter

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