Weaveworks 访谈
2017年2月20日作者 Brian Brazil
我们将继续对 Prometheus 用户进行系列访谈,本期 Weaveworks 的 Tom Wilkie 将和我们谈谈他们为何选择 Prometheus,以及现在如何在其基础上进行构建。
能给我们介绍一下 Weaveworks 吗?
Weaveworks 提供了 Weave Cloud 服务,该服务通过结合开源项目和软件即服务 (SaaS) 的方式,将微服务“操作化”。
Weave Cloud 包含:
- 可视化工具 Weave Scope
- 持续部署工具 Weave Flux
- 网络工具 Weave Net,即容器 SDN
- 监控工具 Weave Cortex,我们开源的、分布式的 Prometheus 即服务。
您可以 免费试用 Weave Cloud 60 天。要了解我们产品的最新信息,请查看我们的博客、Twitter或 Slack (邀请链接)。
在使用 Prometheus 之前,您的监控体验是怎样的?
Weave Cloud 是一个全新的实现,因此之前没有监控系统。在过去的工作中,团队成员使用过 Munin 和 Nagios 等典型工具。Weave Cloud 最初是一个多租户、托管版本的 Scope。Scope 包含对 CPU 和内存使用情况等基本指标的监控,所以我想你可以说我们用过那个。但我们需要一个东西来监控 Scope 本身……
你们为什么决定研究 Prometheus?
我们团队里有一群前谷歌的 SRE,所以他们有丰富的 Borgmon 使用经验,还有一位前 SoundClouder 有 Prometheus 的使用经验。我们基于 Kubernetes 构建服务,并寻找能够“适应”其动态调度特性的工具——因此 Prometheus 是一个显而易见的选择。我们甚至写了一系列博客文章,其中第一篇是为什么 Prometheus 和 Kubernetes 是天作之合。
你们是如何过渡的?
当我们开始使用 Prometheus 时,Kubernetes 的服务发现功能还只是一个 PR,因此相关文档很少。我们运行了一段时间的自定义构建版本,基本上是自己摸索着前进。最终,我们在伦敦 Prometheus 聚会上就我们的经验做了一次演讲,并发表了一系列博客 文章。
我们几乎尝试了所有运行 Prometheus 的不同选项。我们最初构建了自己的带有嵌入式配置的容器镜像,将它们与 Grafana 和 Alert Manager 一起运行在一个 Pod 中。我们使用临时的、Pod 内的存储来保存时间序列数据。然后我们把它们拆分到不同的 Pod 中,这样每次更改仪表盘时就不用重启 Prometheus(并丢失历史数据)。最近,我们转向使用上游镜像,并将配置存储在 Kubernetes 的 config map 中——每当我们更改配置时,我们的 CI 系统就会更新它。我们在 Prometheus Pod 中使用一个小的 sidecar 容器来监视配置文件,并在其发生变化时通知 Prometheus。这意味着我们不必频繁重启 Prometheus,可以避免使用复杂的存储方案,并且不会丢失历史数据。
然而,周期性丢失 Prometheus 历史数据的问题仍然困扰着我们,而现有的解决方案,如 Kubernetes volumes 或定期的 S3 备份,都有其缺点。再加上我们使用 Prometheus 监控 Scope 服务的绝佳体验,这促使我们构建了一个云原生的、分布式的 Prometheus 版本——一个可以在升级、调度和主机故障中存活而不会丢失历史数据的版本。这就是 Weave Cortex 诞生的由来。
切换后你们看到了哪些改进?
暂且不谈 Cortex,我们对高可用 Alert Manager 的推出感到特别兴奋;虽然主要原因在于它是首批使用 Weave Mesh 的非 Weaveworks 项目之一,我们的 gossip 和协调层。
我也对 Fabian 做的第二版 Kubernetes 服务发现变更特别感兴趣——这解决了一个我们监控 Consul Pods 时遇到的棘手问题,即我们需要在同一个 Pod 上抓取多个端口。
如果我不提远程写入功能(我自己也参与了这项工作),那就太失职了。有了这个功能,Prometheus 成为 Weave Cortex 本身的一个关键组件,负责抓取目标并将样本发送给我们。
您认为 Weaveworks 和 Prometheus 的未来会是怎样的?
对我来说,眼前的未来就是 Weave Cortex,即 Weaveworks 的 Prometheus 即服务。我们在内部广泛使用它,并且已经开始从中获得相当不错的查询性能。它目前正在生产环境中为真实用户运行,很快我们将引入对告警的支持,以实现与上游 Prometheus 的功能对等。之后,我们将进入一个稳定化的 Beta 计划阶段,然后在年中正式发布。
作为 Cortex 的一部分,我们开发了一个智能的 Prometheus 表达式浏览器,它支持 PromQL 的自动补全和类似 Jupyter 的笔记本功能。我们期待将它展示给更多的人,并最终将其开源。
我还有一个名为 Loki 的小副业项目,它将 Prometheus 的服务发现和抓取功能引入到 OpenTracing 中,使得分布式追踪变得简单而健壮。我将在三月底的 KubeCon/CNCFCon Berlin 大会上就此发表演讲。