使用 Go 和 graphite-ng 或 InfluxDB 扩展 Graphite

导航至

如果您看过 Coda Hale 广受欢迎的 Metrics, Metrics Everywhere 视频,您就会知道他演讲的主要观点之一是,数据可以帮助您做出更好的决策,而数据必须被衡量,才能被有效地管理。

数据,或者更具体地说是关于您系统的指标,可以为您提供对整个堆栈的深刻见解,涉及许多领域。如果您要为所有移动的事物添加指标,那么您最好拥有支持您的基础设施。

在这篇文章中,我们将探讨使用 Go 特定技术(包括 graphite-ng 和 InfluxDB)扩展 graphite 安装的几种方法。

了解 Graphite

graphite

Graphite 是一个流行的实时指标存储和图形工具,用 Python 编写,允许您存储数字时间序列数据并按需绘制图形。您需要为指标方带来的是某种将数据发送到 graphite 的方法。您可以使用像 collectd 这样的收集代理来实现这一点。在高层次上,典型的 graphite 设置的架构由三个主要组件组成

  • carbon - 一个监听指标数据的守护进程
  • whisper - 一个用于存储此数据的存储库
  • graphite web - 一个按需渲染图形的 Web 应用程序

 

graphite1

一个标准的 graphite 设置,其中 carbon 将指标写入 whisper,whisper 存储它们以便在 graphite-web 中可视化

这种配置在小规模上通常运行良好,其中 carbon 守护进程监听指标并将其报告给 whisper 存储数据库。但是,当您达到更高的规模,例如每秒数千到数百万个指标,添加更多时间线,并希望聚合您的指标时,您将开始触及架构的限制。您可能会遇到 carbon 只是丢弃指标的情况,因为它无法管理施加在其上的负载,也无法管理必须在 whisper 中持久化的不同时间线的多个文件句柄。因此,如果您已经设法超越了这种基本设置的限制,接下来会发生什么?

介绍 graphite-ng - 增强型 Graphite

为了解决基本 graphite 基础设施的一些可扩展性问题,Dieter Plaetinck 用 Go 重写了 graphite 服务器,Go 是一种使编写并发程序更容易和更高效的语言。

Graphite-ng 的性能优于原始 graphite 安装,并且可以轻松处理每秒数百万个指标。当指标流入由 graphite-ng 驱动的系统时,它可以预先执行所有传入数据指标的验证,因此您不必担心稍后在后端清理指标。它还可以将多个指标序列即时组合成一个新序列,并且他的功能允许根据需要更快地聚合指标。

graphite2

Go 编写的 Graphite-ng 和 Carbon-relay-ng 的高层架构图,带有 Whisper 后端。

还值得注意的是,graphite-ng 可以配置为将数据复制到多个后端,例如 ceres 和 elasticsearch,以提供冗余或分区数据以平衡负载。

InfluxDB 正在开发更具可扩展性的解决方案

为了优化您的整个 graphite 堆栈,选择正确的后端数据库来存储指标非常重要。在考虑使用哪种后端基础设施时,以下是您的数据库需要具备的几个高级特性

  • 可扩展 - 寻找支持数百万并发写入操作的后端
  • 高可用性 - 宕机的后端不允许您存储或可视化数据
  • 时间序列支持 - 确保后端可以原生处理时间序列数据,并能够高效地存储和提供数据

 

Whisper 是默认的 graphite 存储引擎,但遗憾的是它不满足所有这些要求。它是用 Python 编写的,无法在重写场景中扩展。它也很耗内存,并且一次保持打开多个文件描述符,每个指标一个。

InfluxDB 旨在在即将发布的版本中解决这些问题。InfluxDB 的 0.8.8 版本使用 LevelDB 作为底层存储引擎,其性能优于 Whisper。即将发布的 0.9 系列版本正在从 LevelDB 中吸取教训,并旨在在存储引擎方面超越 0.8 的性能,同时引入集群以实现高可用性和水平可扩展性。

graphite3

基于 Go 的 carbon-relay-ng 向 InfluxDB 馈送信息的高层架构

InfluxDB 被设计为易于安装和配置。当集群支持普遍可用时,您将能够运行多节点集群,并在节点之间完全复制您的数据以实现高可用性。当然,您现在可以开始测试集群,但它尚未准备好用于生产环境。InfluxDB 还提供了多种将数据写入其中的方法,包括 line 协议、多个客户端库和用于 graphite 等常见格式的插件。

除了 graphite-ng 项目之外,Dieter 还有一个很酷的 repo,它使用 Docker 来简化使用 InfluxDB 后端安装和配置 graphite 系统的过程。请在此处查看。

docker 设置大致归结为

1) 在您的系统上安装 Docker

2) 创建一个新目录并将您自己的 Dockerfile 放入其中,使其看起来像这样

FROM vimeo/graphite-api-influxdb

3) 在此目录中放入一个自定义的 graphite-api.yaml,您可以基于此存储库中的 graphite-api.yaml

4) 构建!

docker build .

5) 运行!

docker run -p 8000:8000 <image-id>

下一步是什么?

在托管环境中寻找 InfluXDB 的所有优点和可扩展性,以及 Grafana(一个功能丰富的指标仪表板和 graphite 图形编辑器)?然后注册免费试用 14 天的 Hosted InfluxDB + Grafana,让您在几秒钟内启动并运行!

在 InfluxDB 连帽衫售罄之前快来领取吧!

您的公司是否有在生产环境中使用 InfluxDB 的酷炫应用或产品?我们很乐意在 influxdb.com 上推荐它,并在社交媒体上向您致意。作为“感谢”礼物,我们将向您发送一件 InfluxDB 连帽衫和一包贴纸。只需填写此简单表格,我们就会在您的条目上线且连帽衫已寄出时通知您。如果您有任何问题,请发送邮件至 [[email protected] 联系我们。感谢您的支持!