对 Weaveworks 的采访

2017年2月20日作者 Brian Brazil

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

您能介绍一下 Weaveworks 吗?

Weaveworks 提供 Weave Cloud,该服务通过结合开源项目和软件即服务来“操作化”微服务。

Weave Cloud 包含

您可以免费试用 Weave Cloud 60 天。要了解我们产品的最新信息,请查看我们的博客TwitterSlack邀请链接)。

您在使用 Prometheus 之前的监控经验如何?

Weave Cloud 是一个全新实施的项目,因此之前没有使用任何监控系统。在之前的工作中,团队使用过 Munin 和 Nagios 等典型工具。Weave Cloud 最初是 Scope 的多租户托管版本。Scope 包含 CPU 和内存使用等基本监控功能,所以我想可以说我们使用了它。但我们需要一个东西来监控 Scope 本身...

您为什么决定关注 Prometheus?

我们公司有许多前 Google SRE 人员,因此在 Borgmon 方面拥有丰富的经验,并且还有一位前 SoundClouder 拥有 Prometheus 经验。我们将服务构建在 Kubernetes 上,并正在寻找能够与其动态调度特性“契合”的工具——因此 Prometheus 是一个显而易见的决定。我们甚至撰写了一系列博客文章,其中《Prometheus 和 Kubernetes 为何如此契合》是第一篇。

您是如何进行过渡的?

当我们开始使用 Prometheus 时,Kubernetes 服务发现功能还只是一个 Pull Request (PR),因此文档很少。我们运行了一段时间的自定义构建版本,有点摸索着前进,自己解决了问题。最终,我们在伦敦 Prometheus 社区聚会上就我们的经验做了一次演讲,并发布了一系列博客文章

我们尝试了运行 Prometheus 的几乎所有不同选项。我们最初构建了带有嵌入式配置的自己的容器镜像,将它们与 Grafana 和 Alert Manager 一起运行在单个 Pod 中。我们使用临时的、Pod 内存储来存放时间序列数据。后来,我们将其拆分为不同的 Pod,这样每当我们更改仪表盘时,就不必重新启动 Prometheus(并丢失历史数据)。最近,我们已转向使用上游镜像,并将配置存储在 Kubernetes 配置映射中——每当我们更改配置时,我们的 CI 系统都会更新它。我们在 Prometheus Pod 中使用了一个小型 sidecar 容器来监视配置文件,并在文件更改时通知 Prometheus。这意味着我们不必经常重新启动 Prometheus,可以不用为存储做任何复杂的事情,并且不会丢失历史数据。

周期性丢失 Prometheus 历史数据的问题仍然困扰着我们,而诸如 Kubernetes 卷或定期 S3 备份等可用解决方案都有其缺点。结合我们使用 Prometheus 监控 Scope 服务的出色经验,这促使我们构建了一个云原生、分布式版本的 Prometheus——一个可以升级、重新调度并在主机故障时仍能保留历史数据的版本。Weave Cortex 就这样诞生了。

切换后您看到了哪些改进?

暂且不提 Cortex,我们特别高兴地看到 HA Alert Manager 的推出;尽管这主要是因为它成为首批使用 Weave Mesh(我们的 Gossip 和协调层)的非 Weaveworks 项目之一。

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

如果我不提及远程写入功能(我亲自参与开发的功能),那将是我的疏忽。有了这个功能,Prometheus 本身就成为了 Weave Cortex 的一个关键组件,负责抓取目标并向我们发送样本。

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

对我而言,近期重点是 Weave Cortex,即 Weaveworks 的 Prometheus 即服务。我们内部广泛使用它,并且开始从中获得相当不错的查询性能。目前它已在生产环境中为真实用户运行,很快我们将引入警报支持,并实现与上游 Prometheus 的功能对等。之后,我们将在年中正式发布之前进入稳定版 Beta 计划。

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

我还有一个名为 Loki 的小型副项目,它将 Prometheus 服务发现和抓取功能引入 OpenTracing,使分布式追踪变得简单而强大。我将在三月底的 KubeCon/CNCFCon Berlin 上就此发表演讲。