阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

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

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

关注

评论

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

10年阿里开发架构师经验分享:rabbitmq教程go,Java零基础入门pdf

Java 程序员 后端

做一名真正的软件工程师

百度开发者中心

程序员 最佳实践 分享 工程师

2020-2021京东Java面试真题解析,在线面试指南

Java 程序员 后端

「The Data Way」1024 特别节目|一线工程师的开源路

SphereEx

开源 开源社区 开源青年

告别传统压测:全链路压测在中通的实践分享

TakinTalks稳定性社区

全链路压测 系统稳定高可用 性能压测 电商大促 系统保障

【活动报名】首次 「Apache ShardingSphere Dev Meetup 」期待你的参与!

SphereEx

开源 ShardingSphere 技术沙龙 Meetup SphereEx

在阿里云ECS服务器上部署OpenVPN

wong

Centos 7 OpenVPN ECS

如何轻松集成多厂家推送服务

融云 RongCloud

消息推送

新里程碑!TDSQL金融核心系统客户数国内领先

腾讯云数据库

tdsql

SoFlu,让 DevOps 更进一步

SoFlu软件机器人

DevOps 敏捷开发

TDSQL:解锁数据库前沿技术要点 | 腾讯云数据库DTCC 2021亮点回顾

腾讯云数据库

tdsql

首例“微服务+国产分布式数据库”架构,TDSQL助力昆山农商行换“心”

腾讯云数据库

数据库 tdsql

万物智联与烟火人间,一场跨越20年的双向奔赴

脑极体

恒源云(GpuShare)_训练指引

恒源云

深度学习

自定义View:measureChildWidthMargins

Changing Lin

10月月更

TDSQL助力建设数字政务

腾讯云数据库

数据库 tdsql

低代码平台的爆火,会导致程序员失业吗?

J2PaaS低代码平台

低代码 低代码开发 低代码平台

从小公司到大厂,从8K到30K-一个iOS开发的艰辛路程

iOSer

ios iOS面试

移动CRM软件是销售人员必备办公工具

低代码小观

管理 软件 移动 CRM CRM系统

15个经典面试问题及回答思路,Java面试你必须要知道的那些知识

Java 程序员 后端

实时通信全链路质量追踪与指标体系构建

融云 RongCloud

通信云 Qoe

浅谈云上攻防——CVE-2020-8562漏洞为k8s带来的安全挑战

腾讯安全云鼎实验室

漏洞分析

12道Java高级面试题:开课吧数据分析百度云,大厂Java开发面试解答

Java 程序员 后端

13分钟彻底搞懂分布式系统服务注册与发现原理,写给互联网大厂员工的真心话

Java 程序员 后端

5G、元宇宙和被重新定义的社交出海

融云 RongCloud

微信的业务架构图

张平

架构实战营

腾讯云数据库TDSQL PG版重磅升级:查询性能提升百倍

腾讯云数据库

tdsql

1200页文档笔记,Java+JVM+MySQL+数据结构与算法

Java 程序员 后端

微信业务架构图和学生管理系统架构

Geek_cb2b43

你的 APP 能否精准「推送」击中用户?!

融云 RongCloud

消息推送 双十一

12年高级工程师的“飞升之路”,Java知识点总结合集

Java 程序员 后端

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