原文做者 Tom Wilkie 簡介:Tom Wikie,現居倫敦。曾就任於 Citrix Systems;以後聯合創辦 Acunu,並出任 CTO;再後來在 Google 出任 Site Reliability Manager;現於 Weaveworks 任項目工程總監。本文是他在嘗試將 Prometheus 與 Kubernetes 進行結合使用後發表的文章。html
在倫敦那場 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)ide
《運行 Prometheus 和 Kubernetes》——Fabian Reinartz微服務
(連接:https://coreos.com/blog/prometheus-and-kubernetes-up-and-running.html)工具
《用 Kubernetes 監控基於 Kubernetes 的微服務架構》—— Fabian Reinartzoop
(連接:https://devops.jaxlondon.com/wp-content/uploads/2016/05/Monitoring-a-Kubernetes-backed-microservice-architecture-with-Prometheus_Fabian-Reinartz-Bj%C3%B6rn-Rabenstein.pdf)測試
背景spa
五月份,繼第一個項目 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 來加快開發進程。
原文連接:https://www.weave.works/prometheus-kubernetes-perfect-match