采访 Weaveworks

2017年2月20日作者 Brian Brazil

在我们的 Prometheus 用户系列采访中,来自 Weaveworks 的 Tom Wilkie 讲述了他们选择 Prometheus 的原因,以及目前如何在其基础上进行构建。

你能给我们介绍一下 Weaveworks 吗?

Weaveworks  提供 Weave Cloud ,这是一种通过开源项目和软件即服务(SaaS)相结合来“运营化”微服务的服务。

Weave Cloud 包含:

您可以 免费试用 Weave Cloud 60 天 。获取产品的最新动态,请查看我们的 博客 Twitter Slack  (邀请链接 )。

在使用 Prometheus 之前,您的监控体验是怎样的?

Weave Cloud 是从零开始实现的,因此此前没有使用过任何监控系统。团队成员以前使用过诸如 Munin 和 Nagios 之类的典型工具。Weave Cloud 最初是作为 Scope 的多租户托管版本启动的。Scope 本身包含用于监控 CPU 和内存使用情况等的基础功能,所以我觉得我们可以说我们用过那些。但我们需要一个能够监控 Scope 自身的工具……

你们为什么决定研究 Prometheus?

我们的员工中有许多前 Google SRE,因此他们对 Borgmon 有丰富的经验,还有一位前 SoundCloud 员工对 Prometheus 也很有经验。我们基于 Kubernetes 构建了这项服务,并一直在寻找一种能与其动态调度特性“契合”的工具——所以 Prometheus 是不二之选。我们甚至写了一系列博客文章,其中为什么 Prometheus 和 Kubernetes 是绝配  是第一篇。

你们是如何过渡的?

当我们刚开始使用 Prometheus 时,Kubernetes 的服务发现功能还仅仅是一个 PR,因此相关文档很少。我们有一段时间运行的是自定义版本,只是在摸索中前行,自己去解决问题。最终,我们在 伦敦 Prometheus 聚会  上分享了 我们的经验 ,并发布了 一系列  关于 博客  文章 

我们几乎尝试了所有运行 Prometheus 的不同方案。起初,我们构建了自己的容器镜像,并将配置嵌入其中,将其与 Grafana 和 Alert Manager 一起运行在同一个 Pod 中。我们使用 Pod 内部的临时存储来存放时间序列数据。后来,我们将这些组件拆分到不同的 Pod 中,这样每次更改仪表板时就不必重启 Prometheus(从而避免丢失历史数据)。最近,我们改为使用上游官方镜像,并将配置存储在 Kubernetes 的 ConfigMap 中——每当我们进行更改时,CI 系统就会更新该配置。我们在 Prometheus Pod 中使用一个小型边车(sidecar)容器来监听配置文件,并在其发生变化时向 Prometheus 发送信号。这意味着我们不必频繁重启 Prometheus,无需进行复杂的存储管理,也不会丢失历史数据。

然而,定期丢失 Prometheus 历史数据的问题依然困扰着我们,而当时可用的方案(如 Kubernetes 卷或定期的 S3 备份)各有各的弊端。再加上我们使用 Prometheus 监控 Scope 服务的出色体验,这促使我们构建了一个云原生的、分布式的 Prometheus 版本——一个可以进行升级、灵活调度且在主机故障时不会丢失历史数据的版本。这就是 Weave Cortex 的诞生由来。

切换后你们看到了哪些改进?

抛开 Cortex 不谈,我们对 HA Alert Manager(高可用报警管理器)的引入感到非常兴奋;虽然主要是因为它成为了首批使用 Weave Mesh 的非 Weaveworks 项目之一,而 Weave Mesh 正是我们的 gossip 和协调层。

我还特别关注 Fabian 所做的第二版 Kubernetes 服务发现变更——这解决了一个我们监控 Consul Pod 时遇到的紧迫问题,即我们需要在同一个 Pod 上抓取多个端口。

另外,如果我不提到远程写入(remote write)功能(我自己也参与了该功能的开发),那将是一个疏忽。通过该功能,Prometheus 成为了 Weave Cortex 自身的一个关键组件,负责抓取目标并向我们发送样本数据。

你认为 Weaveworks 和 Prometheus 的未来会怎样?

对我而言,即刻的未来是 Weave Cortex,即 Weaveworks 的“Prometheus 即服务”。我们在内部广泛使用它,并开始从中获得相当不错的查询性能。它目前已经在生产环境中供真实用户使用,不久后我们将引入对报警的支持,实现与上游 Prometheus 的功能对等。此后,我们将进入稳定版 Beta 计划,并在今年年中实现全面上市(GA)。

作为 Cortex 的一部分,我们开发了一个智能的 Prometheus 表达式浏览器,具备 PromQL 自动补全功能和类似 Jupyter 的笔记本界面。我们期待能让更多人使用它,并最终将其开源。

我还有一个小型的副项目,叫 Loki ,它将 Prometheus 的服务发现和抓取能力带入了 OpenTracing,使分布式追踪变得轻松而稳健。我将在三月底的 KubeCon/CNCFCon Berlin 大会上针对此做一个演讲。