Thanos如何讓Prometheus更易用?

Prometheus本身其實非常棒:它提供了出色的查詢語言和統一的收集、發佈指標的方法。不過,要讓Prometheus具備高可用性和可擴展性卻是一個不小的挑戰。

我們需要以下這些特性:

  • 高可用的Prometheus;
  • 可在一個地方查詢所有指標;
  • 輕鬆備份和歸檔數據。

而這就是Thanos的用武之地。

讓Prometheus具備高可用性

Thanos最基本的功能就是讓你可以一次查詢多個Prometheus實例,並且能夠對來自多個實例的相同指標進行去重。這樣你就可以運行多個相同的Prometheus副本,而無需擔心重複指標。

Thanos邊車是Thanos提供的一個組件,它與每個Prometheus容器一起運行,共同形成一個集羣。你實際上查詢的是Thanos Query組件,而不是Prometheus實例。下圖有助於理解Prometheus與Thanos之間的關係。

光是這一點就已經很棒了,因爲它可以讓你輕鬆地實現高可用的Prometheus。除此之外,你還可以使用這些構建塊做更多的事情。

在同一個地方查看指標

下一個問題是如何將所有指標集中到一個地方。

我們運行了多個Kubernetes集羣,每個集羣都有自己的Prometheus實例。我們之前通常是通過使用特殊的Prometheus來抓取每個Prometheus實例的聯合端點來聚合它們的指標。這樣確實可行,但是太浪費資源了,因爲我們複製了所有指標,而且這個特殊的Prometheus存在單點故障問題。

Thanos Query節點可以將另一個Query節點作爲數據源,如果將集羣中Thanos Query節點的gRPC端點公開,就可以將它們作爲數據存儲,並創建聚合它們的Thanos Query,見下圖。

我們可以使用一個Thanos Query來獲取所有集羣的指標。在下面的屏幕截圖中,我只用一個查詢查詢三個集羣(紅色、黑色、藍色)中的Daemonset副本數量。

但是這個設置仍然存在問題,因爲在每個集羣中都有一個特殊的Thanos Query,我們通過它將獲取指標視圖,如果它宕機就會導致不可用。我們希望運行多個Thanos Query節點,每個集羣中都有一個這樣的節點,實現用戶查詢的負載均衡。通過使用我們的AWS多集羣負載均衡工具Yggdrasil,可以在多個Kubernetes集羣中分配流量。用戶可以查詢任意的集羣,並接收所有的指標。

當我們把它們放在一起時看起來像這樣:

請注意,每個Thanos Query層都是Thanos Query節點的副本集,這樣做是爲了增加彈性。

這爲我們提供了一個令人難以置信的彈性Prometheus設置,跨多個集羣,並具有多個副本,爲我們提供了大量的冗餘層。如果你想查看Prometheus指標,可以直接在一個地方查看,而無需操心應用程序所在的集羣和命名空間等問題。

存儲

Prometheus的另一個常見問題是備份和保留所有指標。將數據保存在Prometheus實例上通常很昂貴,並且會影響性​​能。Thanos通過邊車不斷將數據備份到雲存儲(如S3),然後通過Store節點公開數據來解決這個問題。Store節點讓你感覺好像在Thanos集羣中有另一個Prometheus實例,但所有數據都來自S3存儲桶。

如果集羣發生故障,Store節點也會爲我們提供一些很好的彈性。因爲如果Prometheus實例消失,就無法查詢到最新的數據,但我仍然可以通過查詢另一個集羣中的Store節點來訪問數據,因爲這些節點可以訪問S3中的歷史數據。

未來的工作

一直以來,我們很想做的一件事情是可以按照團隊或命名空間來拆分Prometheus集羣,這樣,每個Prometheus實例就不會太大,並且具備了冗餘,避免有團隊產生大量的指標搞垮Prometheus。但這樣做會非常費力,因爲爲每個團隊或命名空間設置一個單獨的端點會帶來很多開銷,但是有了Thanos,我們就可以將基於團隊的Prometheus添加到Thanos集羣中,並且仍然可以使用相同的單一指標來源。因此,我們希望切換到使用很多小型的Prometheis,並使用Prometheus Operator來創建它們。

總的來說,Thanos給了我們:

  • 高可用的Prometheus ——使用Thanos邊車 + Thanos Query進行數據去重;
  • 在一個地方查詢所有指標——聚合所有集羣的Thanos Query;
  • 輕鬆備份和歸檔數據——Thanos邊車和Thanos Store(基於S3)。

Thanos確實將我們的指標設置提升到了一個新的水平,簡化了用戶查詢指標的方式,併爲我們提供了一定的彈性。現在,從新的Kubernetes集羣添加指標變得非常容易。不過,有一點需要注意的是,Thanos仍然是一個相對較新的產品,所以它可能還是會存在一些奇怪的bug,幸好它的背後有一個非常活躍的團隊和社區在不斷地改進它。如果你想加入他們,可以看看他們的Github項目Slack頻道

英文原文:https://medium.com/uswitch-labs/making-prometheus-more-awesome-with-thanos-fbec8c6c28ad

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章