服务商概述
Riemann 是 2012 年发布的开源事件流处理器,由 Kyle Kingsbury(以 Jepsen 分布式系统一致性测试闻名)使用 Clojure 编写。Riemann 的核心能力是毫秒级低延迟地接收、聚合、过滤、转换与分发来自不同源的流式事件数据,定位为监控基础设施中的"事件路由中枢"——接收来自 Nagios、Sensu、syslog、StatsD 等系统的事件,处理后路由到告警系统、时序数据库或自动化响应工具。
Riemann 采用函数式事件流处理模型,事件在流中经过索引(Index)、折叠(Fold)、分割(Split)等操作后输出。其 Clojure DSL 配置语言虽然学习曲线陡峭,但表达能力极强,可实现"5 分钟内同一主机出现 3 次 CPU 告警则升级为 Critical"这类复杂事件关联规则,支持 TCP、UDP、TLS 协议接入,可与现有监控技术栈灵活集成。
核心优势
- 毫秒级低延迟处理:基于 Clojure 的事件流引擎,端到端处理延迟通常在 1-10 毫秒级别,"收到事件到发出告警"的端到端链路可在 50 毫秒内完成,远优于轮询式监控系统。
- 强大的事件流处理能力:支持 Index(维护事件最新状态)、Fold(状态折叠聚合)、Split(分流处理)、Periodic 定时触发等 5 类操作,可基于时间窗(Sliding Window)做事件计数与速率计算,实现复杂告警降噪逻辑。
- Clojure DSL 灵活告警:使用 Clojure 函数式语言定义告警规则而非 YAML/JSON 配置文件,支持条件分支、模式匹配、状态保持与自定义函数 4 类能力,表达能力远超传统监控告警模板。
- 多协议广泛接入:支持 TCP、UDP、TLS、WebSocket 4 种协议接收事件,提供 Java、Ruby、Python、Node.js、Go 等 5 种语言客户端库,可从 syslog、StatsD、collectd、Prometheus Alertmanager 等系统接收事件。参见 Prometheus + Grafana 基础。
产品生态
事件流引擎(Event Stream)
核心处理组件。事件进入 Riemann 后流经配置的流处理管道,支持 where(过滤)、tag(标记)、withdraw(取消)、expire(过期)、coalesce(合并)等操作。
Index(状态索引)
维护所有活跃事件的最新状态(类似"当前告警列表"),支持根据主机、服务、标签等维度查询,可作为事件状态 API 供外部系统调用。
Fold(折叠/聚合)
对时间窗内的事件做状态折叠与聚合计算,可用于"过去 5 分钟错误计数""平均响应时间"等场景。
Output(输出/路由)
事件处理后可通过多种方式输出:写入 Graphite/InfluxDB、触发 Webhook、写入日志文件、发送告警邮件或 HTTP 回调,支持与 Grafana 等可视化平台配合使用。
不足之处
- Clojure DSL 学习曲线陡峭:配置采用 Clojure 函数式语言,需要理解不可变数据、递归、高阶函数等概念,运维团队通常需要 2-4 周才能独立编写配置。
- 社区规模很小:GitHub Stars 约 4,000+,相比主流监控方案社区资源非常有限,Stack Overflow 问答、第三方插件与最佳实践文档较少。
- 无内置可视化与持久化:Riemann 本身不提供 Web 界面、仪表盘或数据持久化,事件展示需搭配 Grafana,指标存储需集成 InfluxDB/Elasticsearch。
- 项目迭代缓慢:核心维护者有限,重大版本更新间隔较长,新功能依赖社区自建插件与补丁。
适用场景
- 实时事件路由中枢(★★★★★):将多个监控系统的告警事件统一路由到告警通知平台,构建"事件总线"。
- 复杂告警聚合降噪(★★★★☆):基于时间窗、事件频率、主机依赖等条件的复杂告警关联与抑制逻辑。
- 高性能事件处理(★★★★☆):对事件处理延迟有毫秒级要求的高频交易系统或实时控制系统。
- Clojure/函数式编程团队(★★★☆☆):团队已有 Clojure 经验,可充分发挥 Riemann DSL 的表达能力。
价格参考
| 版本 | 定价 | 说明 |
|---|---|---|
| Riemann(开源) | 免费 | Apache 2.0 协议,全功能,无限制 |
常见问题
- Riemann 与 Prometheus 能一起使用吗? 可以。Riemann 可接收 Prometheus Alertmanager 的 Webhook 事件,处理后路由到不同告警渠道或工单系统,作为告警事件的路由增强层,见 Prometheus + Grafana 基础。
- Riemann 需要数据库吗? Riemann 将事件状态保存在内存中(Index),不提供内置持久化。如需长期存储事件历史,需配置 Output 写入 InfluxDB、Elasticsearch 或 Kafka,体系见 监控告警体系。
- Riemann 适合大规模部署吗? Riemann 设计为高吞吐低延迟,单实例可处理万级事件/秒。更大规模可做 Riemann 集群,事件按 key(如主机名)分片路由到不同实例,选型见 云监控服务对比。
- Riemann 的配置如何管理? Riemann 配置是 Clojure 代码文件,建议纳入 Git 版本管理,支持配置热加载(无需重启进程),可结合 CI/CD 对配置做自动化测试,工作流见 Git 工作流。