Weaveworks 访谈
2017 年 2 月 20 日作者 Brian Brazil
在我们的 Prometheus 用户系列访谈中,我们继续邀请了来自 Weaveworks 的 Tom Wilkie,他将与我们探讨他们为何选择 Prometheus,以及现在如何在其基础上进行构建。
能介绍一下 Weaveworks 吗?
Weaveworks 提供 Weave Cloud ,这项服务通过结合开源项目和软件即服务(SaaS)的方式,将微服务“操作化”。
Weave Cloud 包含:
- 使用 Weave Scope 实现可视化
- 使用 Weave Flux 实现持续部署
- 使用容器软件定义网络(SDN)Weave Net 实现网络连接
- 使用 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 的 ConfigMap 中——每当配置更改时,我们的 CI 系统就会更新它。我们在 Prometheus Pod 中运行一个小型的 sidecar 容器来监视配置文件,并在其变化时通知 Prometheus。这意味着我们不必频繁重启 Prometheus,可以不使用复杂的存储方案,也不会丢失历史数据。
然而,周期性丢失 Prometheus 历史数据的问题仍然困扰着我们,而现有的解决方案,如 Kubernetes volumes 或定期的 S3 备份,都有各自的缺点。再加上我们使用 Prometheus 监控 Scope 服务的绝佳体验,这促使我们构建了一个云原生的、分布式的 Prometheus 版本——一个可以升级、迁移并能在主机故障后不丢失历史数据的版本。Weave Cortex 就这样诞生了。
切换后你们看到了哪些改进?
暂且不谈 Cortex,我们对 HA Alert Manager 的推出感到特别兴奋;这主要是因为它是首批使用 Weave Mesh 的非 Weaveworks 项目之一 ,Weave Mesh 是我们的 gossip 和协调层。
我也对 Fabian 做的 Kubernetes 服务发现 V2 版本的更改特别感兴趣——这解决了一个我们监控 Consul Pods 时遇到的棘手问题,即我们需要在同一个 Pod 上抓取多个端口。
而且,如果我不提远程写入功能(我亲自参与开发的功能),那就太失职了。有了这个功能,Prometheus 成为了 Weave Cortex 本身的一个关键组件,负责抓取目标并将样本发送给我们。
您认为 Weaveworks 和 Prometheus 的未来会是怎样的?
对我来说,近期的未来就是 Weave Cortex,即 Weaveworks 的 Prometheus 即服务。我们在内部广泛使用它,并且已经开始从中获得相当不错的查询性能。它目前正在生产环境中为真实用户运行,很快我们将引入告警支持,以实现与上游 Prometheus 的功能对等。之后我们将进入一个稳定化的 beta 阶段,然后在年中全面推出。
作为 Cortex 的一部分,我们开发了一个智能的 Prometheus 表达式浏览器,支持 PromQL 的自动补全和类似 Jupyter 的笔记本功能。我们期待将它展示给更多的人,并最终将其开源。
我还有一个名为 Loki 的小项目,它将 Prometheus 的服务发现和抓取功能引入到 OpenTracing 中,使得分布式追踪变得简单而稳健。我将在三月底的 KubeCon/CNCFCon 柏林大会上就此发表演讲 。