天天看點

Istio on ACK內建生态(1): 內建TSDB助力可觀測性存儲

阿裡雲容器服務Kubernetes(簡稱ACK)支援一鍵部署Istio,可以參考 文檔 在ACK上部署使用Isito。Istio on ACK提供了豐富的監控能力,為網格中的服務收集遙測資料,其中Mixer是負責提供政策控制和遙測收集的Istio元件。使用Prometheus進行監控是Istio提供的監控能力之一。Prometheus是一個開源的監控和報警系統,Prometheus依賴少,功能齊全,廣泛用于Kubernetes叢集的監控系統中。Istio自0.8版本開始預設将Prometheus包含在内,Mixer支援對接到Prometheus監控設施的Adapter。使用者可以通過查詢service或pod看到Prometheus的運作狀态和位址。也可以通過簡潔明了的Prometheus的UI界面檢視監測資料。

Prometheus的存儲挑戰及解決方案

Prometheus的本地存儲設計可以減少其自身運維和管理的複雜度,能夠滿足大部分使用者監控規模的需求,但是本地存儲也意味着Prometheus無法持久化資料,無法存儲大量曆史資料,同時也無法靈活擴充。Prometheus本身沒有嘗試解決以上問題,而是通過定義一組remote storage adapter标準接口,讓使用者可以基于這組标準接口自主決定将Promthues中的監控樣本資料存儲至第三方的遠端存儲服務中,來解決本地存儲帶來的問題。

TSDB for Prometheus是一種高性能,低成本,穩定可靠的線上時序資料庫服務,通過内置實作的Prometheus的remote storage adapter,天然原生支援作為Promtheus的第三方線上遠端存儲服務。

相較于其他第三方遠端存儲而言,TSDB for Prometheus具有內建程度高,同時支援讀寫等優勢。

  • 內建程度高

    目前Prometheus對接第三方存儲系統的主流做法是實作一個獨立于第三方存儲系統的remote storage adapter, 這個adapter需要單獨部署和運維,另外單獨部署的remote storage adapter還存在單點故障和讀寫性能問題。

TSDB for Prometheus在服務端内置實作的Prometheus remote storage adapter,隻需在Prometheus的配置檔案prometheus.yaml中修改下遠端讀寫配置,即可原生支援Prometheus直接讀寫TSDB,內建程度高,無需額外單獨部署adapter,極大地降低了adapter的單點故障風險和運維成本。

  • 同時支援讀寫

    目前一些第三方遠端存儲僅支援Prometheus将監控樣本資料寫入,而不支援讀取。比如對于OpenTSDB、Graphite和Elasticsearch等第三方存儲,Prometheus社群提供的adapter隻支援寫入模式,不支援讀取模式。而TSDB for Prometheus同時支援讀寫。如要了解更多第三方存儲系統對于Prometheus讀寫的支援程度,請參考

    Remote Endpoints and Storage

TSDB for Prometheus

時序時空資料庫(Time Series & Spatial Temporal Database,簡稱 TSDB)是一種高性能、低成本、穩定可靠的線上時序時空資料庫服務,提供高效讀寫、高壓縮比存儲、時序資料插值及聚合計算等服務。TSDB 具備秒級寫入百萬級時序資料的性能,提供高壓縮比低成本存儲、預降采樣、插值、多元聚合計算、可視化查詢結果等功能。

TSDB for Prometheus是阿裡雲時序時空資料庫TSDB為Prometheus提供的一種高性能、低成本、穩定可靠的線上遠端存儲服務,具備以下能力:

  • 提供高效讀寫、高壓縮比存儲的能力,可無縫被Prometheus內建,在協定上原生支援Prometheus遠端存儲對接至TSDB。
  • 解決了以往需要為Prometheus額外開發remote storage adapter的問題,極大的降低了Prometheus遠端存儲對接TSDB的成本。
  • TSDB for Prometheus最大程度的相容Prometheus的PromQL查詢文法,進而降低了使用者的開發,遷移和維護成本。
  • 解決Prometheus local stroge 無法存儲大量曆史資料的場景,且無法擴充的問題。
  • 通過内置實作的Prometheus的remote storage adapter,天然原生支援作為Promtheus的第三方線上遠端存儲服務。

TSDB for Prometheus的使用要求具體可以參見

使用要求

阿裡雲提供的不同規格的TSDB執行個體,設定了不同的最大寫入TPS,避免過大TPS導緻TSDB示例不可用,保護TSDB執行個體正常運作。當寫入TPS超過TSDB執行個體允許的最大TPS時,将觸發TSDB執行個體限流保護規則,會造成寫入失敗異常。是以需要根據TSDB執行個體規格來調整Prometheus的remote_write配置,進而實作平穩可靠的将Prometheus采集到的名額寫入TSDB中。

關于Remote Write配置,除了參考Prometheus官方提供的

Remote Write配置

說明之外,還可以參考Prometheus對接阿裡雲TSDB時的寫入配置

最佳實踐

建立TSDB執行個體

建立一個TSDB執行個體非常簡單,登入

TSDB 控制台

,參照

建立執行個體文檔

即可建立。

擷取開通的TSDB執行個體的位址,可以參考TSDB官方文檔

快速入門

确認Prometheus所在機器能夠正常通路TSDB執行個體。直接使用http通路TSDB執行個體的位址,如果能夠得到包含”Welcome to use the TSDB”的字元串,表示Prometheus所在機器能夠正常通路TSDB執行個體。

設TSDB執行個體的公網位址為: ts-xxxxxxxxxxxx.hitsdb.rds.aliyuncs.com:3242,在啟用了Prometheus的Istio所在Kubernetes叢集下,執行指令:

kubectl exec -it -n istio-system $(kubectl get pods -n istio-system -l app=prometheus -o jsonpath='{.items[0].metadata.name}') sh

進入到Prometheus容器之後,執行指令

wget -S ts-xxxxxxxxxxxx.hitsdb.rds.aliyuncs.com:3242

,可以得到如下結果:

Connecting to ts-bp1839ak5uf20igcw.hitsdb.rds.aliyuncs.com:3242 (101.37.143.44:3242)
  HTTP/1.1 200 OK
  Content-Type: Content-Type

index.html           100% |*****************************************************************************************|   361   0:00:00 ETA           

然後執行指令 cat index.html,可以得到如下結果:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv=content-type content="text/html;charset=utf-8"><title>TSDB</title>
<style><!--
body{font-family:arial,sans-serif;margin-left:2em}A.l:link{color:#6f6f6f}A.u:link{color:green}.fwf{font-family:monospace;white-space:pre-wrap}//--></style><div>Welcome to use the TSDB!</div>           

內建TSDB到Istio on ACK

第一次部署Istio

在ACK上部署Isito。

如果是第一次部署使用Isito,可以直接按照文檔步驟進行部署。

注意,勾選啟用Prometheus 度量日志收集選項,預設情況下啟用,并勾選持久化存儲,提示需要提供可以通路的TSDB位址。此處填寫在上述步驟中已經驗證可以使用的TSDB執行個體的位址,例如ts-xxxxxxxxxxxx.hitsdb.rds.aliyuncs.com:3242。

Istio on ACK內建生态(1): 內建TSDB助力可觀測性存儲

然後單擊部署 Istio,啟動部署。部署成功之後,Prometheus的監控資料将持久化到對應的TSDB執行個體中。

更改已有Isito部署配置

如果之前已經部署過Istio,但沒有啟用Prometheus的持久化存儲,則可以按照如下步驟進行配置。

  • 登入容器服務管理控制台。
  • 在 Kubernetes 菜單下,單擊左側導航欄的應用 > 釋出,進入釋出頁面。
  • 單擊Helm,選擇所需的叢集,選擇待更新的Istio,單擊操作列的更新。
    Istio on ACK內建生态(1): 內建TSDB助力可觀測性存儲
  • 在彈出的對話框中,對Istio的Prometheus參數進行修改:
配置 說明
enabled true或者false,表示是否啟用Prometheus 收集度量日志。預設情況下啟用,即值為true。
replicaCount prometheus容器組的副本數,預設值為1。
persist true或者false,表示是否啟用持久化存儲。設定為true時,必須指定TSDB執行個體位址。
tsdbEndpoint TSDB執行個體位址,啟用持久化存儲時必須指定。
retention 預設的資料保留時間,8760h0m0s即為24*365小時,即1年
scrapeInterval 全局預設抓取時間間隔,預設為15s
Istio on ACK內建生态(1): 內建TSDB助力可觀測性存儲
  • 修改完畢之後,單擊更新。

檢視Prometheus配置

登入容器服務管理控制台,單擊左側導航欄中的應用配置下的配置項,進入配置項清單頁面。點選名稱為prometheus的配置項,進入配置項明細頁面,如下圖所示,可以看到對應的TSDB執行個體的位址:

Istio on ACK內建生态(1): 內建TSDB助力可觀測性存儲

TSDB寫入和讀取驗證

TSDB寫入驗證

可以簡單的通過TSDB執行個體的管理控制台界面的“執行個體監控”界面,觀察寫入的TPS是否有所變化來驗證。一般剛開始沒有任何資料寫入時,寫入的TPS為0;若TPS開始從0變為正數時,則說明Prometheus已經将資料上報到了TSDB中,如下圖所示。

Istio on ACK內建生态(1): 內建TSDB助力可觀測性存儲

讀取驗證

在啟用了Prometheus的Istio所在Kubernetes叢集下,執行指令:

kubectl port-forward -n istio-system svc/prometheus 9090:9090

打開浏覽器,輸入位址

http://localhost:9090

,進入Prometheus控制台頁面。

Istio提供了一系列的預設監控名額,以Prometheus采集到Istio的一個監控名額istio_request_bytes_count為例進行查詢認證,結果如下圖所示。

Istio on ACK內建生态(1): 內建TSDB助力可觀測性存儲

至此,一個完整內建TSDB到Istio可觀性Prometheus服務的過程已經結束。

總結

在阿裡雲Kubernetes容器服務基礎之上,快速搭建一套用于連接配接、管理以及安全化微服務的開放平台Istio,為應用引入和配置多個相關服務。使用Prometheus進行監控是Istio提供的監控能力之一,通過內建TSDB有效地解決持久化存儲的問題。

繼續閱讀