写点什么

Robinhood 工程团队是如何实现度量的收集和监控的

  • 2017-05-25
  • 本文字数:1977 字

    阅读完需:约 6 分钟

Robinhood 服务器运营团队发表一系列文章,详细阐述了公司所采用的度量采集、监控和报警的架构。根据文章介绍, OpenTSDB Grafana Kafka Riemann 构成了其技术栈的核心。其中 Kafka 作为代理层,实现将度量流数据推送给 Riemann 处理,并推送到 OpenTSDB 存储。

Robinhood 的技术栈主要由 Python 构成,还有部分 Golang。生产服务器的调试和监控,很大程度上依赖于度量。度量汇集数据库 OpenTSDB 是实现度量收集的主要手段,它不仅针对各类软件栈分别提供了多种标准度量收集器(称为 tcollectors ),而且还支持自定义的收集器。自定义收集器可使用 OpenTSDB 的 telnet 或 HTTP 访问接口收集度量,并将收集到的数据推送到 OpenTSDB 中。对于 Robinhood 应用,度量数据首先被发送到 Kafka 代理。

对于各个服务器,可以使用标准的或自定义的 tcolloctor 发送度量数据给 Kafka。对于应用的性能监测,使用了 statsd 库。应用度量发送到在各服务器本地运行的 statsd 进程。statsd 服务器的实现采用了 C 语言编写的 statsite 。在转化 statsd 度量为本地 tcollector 度量时,采用了自定义的适配器。此后,本地 tcollector 度量由 Kafka 发送给 OpenTSDB。tcollector 进程将度量输出在标准输出上,并调用一个 Python 脚本将输出推送给 Kafka。

作为度量采集系统的中枢,OpenTSDB 需为高可用的。InfoQ 咨询了 Robinhood 的运营工程师 Aravind Gottipati,对此他做了深入的解释:

Robinhood 运行多个独立的 OpenTSDB 实例,各个实例所消费的都是来自于 Kafka 的同一度量流。因为这些实例是相同的,我们可以请求任一 OpenTSDB 实例进行负载均衡,由此轻松实现了高可用。我们并不需要运行整个 HBase 集群,而是对每个实例运行一个单节点的本地 HBase 服务器(也是 Master)。

鉴于 Kafka 以中介方式使用,各消费者(Consumer)可以采用不同的数据处理方式。一种方式是将度量转换后,推送到 OpenTSDB。当需要处理不断增加的数据量时,还可以按需将数据分片到多个 OpenTSDB 服务器。以 Kafka 为代理,在需要维护时可以暂停并恢复消费者。连接 Kafka 和 OpenTSDB 间的桥梁,是一个基于控制台并输出到标准输出的消费者。输出使用 netcat 推送到 OpenTSDB 的 telnet 监听器。

Grafana 是一个可视化的度量查看工具,它支持 Graphite、InfluxDB 和 OpenTSDB 后端。还可以在仪表盘中插入 CloudWatch 度量。

Robinhood 监控和报警工作流的关键组成称为 Riemann。Robinhood 还使用了 Sensu 这样的传统报警系统,传统的报警系统依赖于指定时间点(point in time)查看度量,这并不适合于展示历史数据,原因包括难以编写查询,以及系统运行时存在高延迟。一些度量系统可能还不支持历史记录,因为对缺失数据必须支持插值操作。既然部分问题能被 OpenTSDB 较好地解决,那为什么 Robinhood 还要使用 Riemann?对此问题,Gottipati 给出了解释:“OpenTSDB 依赖于 HBase。HBase 适用于对指定范围内全部数据的访问,并不擅长于获取某个具体时间点上的单个度量数据。如果在报警系统中使用 HBase,需要 HBase 支持查看用户所选定某个具体时间点上的度量数据。在查询通常采用的是一种权宜之计,即为了获取单个数据点,依然必须扫描整个键值范围。”

在度量流的处理中,还需要定义一些规则和过滤器。数据流经时,一旦过滤器或规则得到匹配,就会触发报警。Riemann 可以聚合来自多种数据源的度量流,并提交给一种流处理语言进行处理。整个度量收集系统是绑定到 Riemann 的,使用的是推送数据到 Riemann 的 Kafka 消费者。度量的命名转换受 OpenTSDB 的影响,即每个度量具有一个类型,键值对标记由关联到每个事件的主机和角色构成。其中所使用的 netcat 也会推送数据到 Riemann,这时由起始 tcollector 对每个事件标记的角色(例如 Web 服务器、数据库)要被转化为 Riemann 标记。这使得 Riemann 内建的过滤器功能易于使用。Robinhood 内部对 Riemann 原语开发了一个包装 DSL ,简化了开发人员的使用。这一系统对 DevOps 协作发挥了关键作用。那么在 Robinhood 企业中,什么是 DevOps 文化创立的关键里程碑?Gottipati 是如此答复的:

我们构建了一些仪表盘样板,可以展示我们所采集的各种系统度量以及应用的度量仪表盘(来自于 statsd 度量)。作为对各用户疑问请求的响应,我们着手使用并共享这些仪表盘,让一些老用户开始使用它们。一段时间后,我们帮助这些用户添加更多的应用特定仪表盘,并继续这一过程。我们的后台 / 应用团队构建和维护了一系列的仪表盘,其中一些甚至不为运营人员所知。他们会培训新加入的工程师,如何去查阅并使用这些仪表盘。

在 Riemann 中查看事件时使用的是 Elasticsearch(ELS)实例,而非默认的 Riemann 仪表盘。大约 50% 来自 Kafka 的事件被推送到 ELS,峰值时可达每秒约 20,000 次事件。

查看英文原文: Metrics Collection and Monitoring at Robinhood Engineering

2017-05-25 19:002296
用户头像

发布了 227 篇内容, 共 77.8 次阅读, 收获喜欢 28 次。

关注

评论

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

OverOps在根本原因分析中重要性

阿泽🧸

10月月更 OverOps

【web 开发基础】PHP 的流程控制之多向条件分支结构 -PHP 快速入门 (14)

迷彩

10月月更 PHP基础 if条件分支 多条件分支

高效IO之零拷贝技术

乌龟哥哥

10月月更

架构实战训练营模块 3 作业

atcgnu

TOGAF企业架构框架-1概览

Marvin Ma

架构 企业架构 TOGAF

智慧城市、数字政府、城市大脑、一网统管之间有什么关系

雨果

智慧城市 城市大脑 数字政府 一网统管

上网冲浪总是慢?试试华为云CDN,高效加速真体验!

路过的憨憨

【web 开发基础】PHP 的流程控制之嵌套(巢状)条件分支结构 -PHP 快速入门 (15)

迷彩

嵌套条件表达式 10月月更 web开发基础 PHP基础

Laravel-EloquentORM高级部分解析

乌龟哥哥

10月月更

揭开epoll面纱:Nginx,Redis等都在用的多路复用,到底是什么?

董哥的黑板报

源码 高并发 多路复用 C语言 网络

华为云CDN为什么能够打通数据传输阻碍?

路过的憨憨

华为

技术同学如何面对裁员浪潮?

老张

职场发展 求职面试

千锋HTML5大前端全网首发Web3.0面授课程,助力个人入局热门赛道!

千锋IT教育

Impala基本架构

穿过生命散发芬芳

impala 10月月更

2022-10-26:以下go语言代码输出什么?A:1 3 2;B:1 2 3;C:3 1 2;D:3 2 1。 package main import “fmt“ type temp struc

福大大架构师每日一题

golang 福大大 选择题

模块三作业-外包学生管理系统架构设计

Diana S

架构训练营

IoT设备与手机App之间如何实现实时消息通信——业务场景最佳实践

阿里云AIoT

物联网 IoT 传感器 智能硬件

外包学生管理系统架构设计

Jack

架构实战训练营9期

华为云 CDN 是如何修炼 “ 内功 ” 的?

IT科技苏辞

一文带你了解 Python 中的继承知识点

宇宙之一粟

Python 面向对象 继承 10月月更

网络畅通的“无名英雄”:华为云CDN,让数据传输又快又稳

路过的憨憨

华为

架构实战营 - 学生管理系统架构设计

π

#架构实战营

TOGAF企业架构框架-2常见术语

Marvin Ma

架构 企业架构 TOGAF TOGAF术语

服务巡检

芯动大师

Python 10月月更 服务巡检

速度快、时延低、更安全,华为云CDN助力企业创新发展!

路过的憨憨

华为

“程”风破浪的开发者|OpenHarmony 开发环境搭建

鸿蒙之旅

OpenHarmony 10月月更 “程”风破浪的开发者

3分钟快速了解什么是千兆以太网?

wljslmz

网络技术 以太网 10月月更 千兆以太网

node版本管理器:nvm 和 n区别

乌龟哥哥

10月月更

安全、快速、稳定,华为云CDN赋能中小企业数字化发展

IT科技苏辞

“程”风破浪的开发者|研究生学习路程回顾

Studying_swz

学习方法 “程”风破浪的开发者

Robinhood工程团队是如何实现度量的收集和监控的_DevOps & 平台工程_Hrishikesh Barua_InfoQ精选文章