原文作者 Tom Wilkie 简介:​Tom Wilkie,现居伦敦。曾就职于 Citrix Systems;之后联合创办 Acunu,并出任 CTO;再后来在 Google 出任 Site Reliability Manager;现于 Weaveworks 任项目工程总监。本文是他在尝试将 Prometheus 与 Kubernetes 进行结合使用后发表的文章。

在伦敦那场 Meetup 上,我做过一个“Weaveworks 使用 Prometheus 来管理 Weave 云(Weave 云运行在 Kubernetes 集群上)”的演讲(PPT 分享链接:http://www.slideshare.net/weaveworks/kubernetes-and-prometheus)。在这篇帖子中,我会分享我们在过去 6 个月的开发过程的实践,同时也会分享一些很棒的工具,对 Weave 云进行弹性扩容。Prometheus 并非很新的项目,最近社区内的一些成员也贡献了很多优秀的帖子:

  • 《用 Prometheus 监控 Kubernetes》——Brian Brazil(链接:http://www.slideshare.net/brianbrazil/monitoring-kubernetes-with-prometheus-kubernetes-ireland-2016
  • 《运行 Prometheus 和 Kubernetes》——Fabian Reinartz(链接:https://coreos.com/blog/prometheus-and-kubernetes-up-and-running.html
  • 《用 Kubernetes 监控基于 Kubernetes 的微服务架构》—— Fabian Reinartz(链接:https://devops.jaxlondon.com/wp-content/uploads/2016/05/Monitoring-a-Kubernetes-backed-microservice-architecture-with-Prometheus_Fabian-Reinartz-Bj%C3%B6rn-Rabenstein.pdf

背景

五月份,继第一个项目 Kubernetes 之后,CNCF(Cloud Native Computing Foundation)将 Prometheus 项目也收入囊中。在 Prometheus 发布第一版之后,一如 Björn Rabenstein(SoundCloud 核心开发人员)在 JaxEnter 上描述的那样:Prometheus 和 Kubernetes 有着同样的起源。首先,他们都流着 Google 的血液:Kubernetes 起源于 Google 项目 Borg,Prometheus 起源于 Google 项目 Borgmon。但是它们两者之间还有一层更深的“羁绊”——Prometheus 有几个很关键的设计,可以使 Prometheus 成为最好的监控系统(针对你的基础设施和部署在 Kubernetes 上的应用来说)。

 Pulling 和 Discovery

Prometheus 是一个基于 pull 的监控系统,主要的 Prometheus 服务器会从你的 service 发现和拉取参数。这个发现和拉取系统跟动态的云本地环境(比如 Kubernetes)十分匹配,在这个云本地环境,Prometheus 跟 Kubernetes 整合在一起来发现、列举你正在运行的 service。随着 service 的放大,Prometheus 开始自动从额外的 replicas 拉取参数。同样的道理,节点运行失败,然后 pod 在不同的节点上重新启动,Prometheus 会自动注意到,并且进行梳理。在我们的起步阶段,同样的 Prometheus 配置被用于我们的开发和产品环境,大大简化了测试。


标签

Prometheus 和 Kubernetes 中标签(键值对)的概念是一样的:用于在系统内挑选对象。Prometheus 用这些标签来识别时序数据,用一系列的匹配标签在查询语言(PromQL)中挑选时序数据。Kubernetes 在很多地方都使用标签。比如,要挑选 Pod 来组成 service,或者启用更加先进的工作流,例如 canarying。通过分享这个普遍的概念,Prometheus 和 Kubernetes 结合可以为开发人员带来较低的认知负荷。


Exporters 和 Pod

Prometheus 的最佳实践就是本地指导你的 service(service 是 Kuberentes 的一个组件)。但是对于不是本地指导的 service 来说(比如 Memcached,Postgres 等等),有可能的话,还是使用 exporter 比较好。Exporter 是一个进程,跟你的 service 一起运行,将 service 的参数翻译成 Prometheus 能够理解的格式。Kubernetes 有一个概念叫做 Pod(就是容器组),是一个便于管理和调度的单元。Pod 是一个包含了多个容器的容器组,共享网络 namespace,使用 loopback 定位(localhost/127.0.0.1)就可以进行互相定位。Pod 提供完美的抽象层,跟你想要监控的 service 结合一起部署 exporters。


Prometheus 和 Kubernetes:完美结合!

Prometheus 部署在 Kubernetes 的监控有了上述几个特性之后,不仅用起来简单方便,而且连贯统一。之后,我们还会再发布一些帖子,内容主要是在 Kubernetes 上部署 Prometheus 的一些经验和教训。我们会在帖子中具体描述我们是如何用 Prometheus 管理我们的 service 和基础设施,以及我们是如何使用 Prometheus 来加快开发进程。原文作者:Tom Wilkie文章由才云科技翻译,如若转载,必须注明转载自“才云科技”。查看原文请点击:https://www.weave.works/prometheus-kubernetes-perfect-match/