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界面查看監測數據。html

Prometheus的存儲挑戰及解決方案

Prometheus的本地存儲設計能夠減小其自身運維和管理的複雜度,可以知足大部分用戶監控規模的需求,可是本地存儲也意味着Prometheus沒法持久化數據,沒法存儲大量歷史數據,同時也沒法靈活擴展。Prometheus自己沒有嘗試解決以上問題,而是經過定義一組remote storage adapter標準接口,讓用戶能夠基於這組標準接口自主決定將Promthues中的監控樣本數據存儲至第三方的遠端存儲服務中,來解決本地存儲帶來的問題。數據庫

TSDB for Prometheus是一種高性能,低成本,穩定可靠的在線時序數據庫服務,經過內置實現的Prometheus的remote storage adapter,自然原生支持做爲Promtheus的第三方在線遠端存儲服務。json

相較於其餘第三方遠端存儲而言,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 具有秒級寫入百萬級時序數據的性能,提供高壓縮比低成本存儲、預降採樣、插值、多維聚合計算、可視化查詢結果等功能。app

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 for Prometheus的使用要求具體能夠參見使用要求微服務

阿里雲提供的不一樣規格的TSDB實例,設置了不一樣的最大寫入TPS,避免過大TPS致使TSDB示例不可用,保護TSDB實例正常運行。當寫入TPS超過TSDB實例容許的最大TPS時,將觸發TSDB實例限流保護規則,會形成寫入失敗異常。所以須要根據TSDB實例規格來調整Prometheus的remote_write配置,從而實現平穩可靠的將Prometheus採集到的指標寫入TSDB中。性能

關於Remote Write配置,除了參考Prometheus官方提供的Remote Write配置說明以外,還能夠參考Prometheus對接阿里雲TSDB時的寫入配置最佳實踐jsonp

建立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

阿里雲容器服務Kubernetes(簡稱ACK)支持一鍵部署Istio,能夠參考文檔在ACK上部署Isito。
若是是第一次部署使用Isito,能夠直接按照文檔步驟進行部署。
注意,勾選啓用Prometheus 度量日誌收集選項,默認狀況下啓用,並勾選持久化存儲,提示須要提供能夠訪問的TSDB地址。此處填寫在上述步驟中已經驗證可使用的TSDB實例的地址,例如ts-xxxxxxxxxxxx.hitsdb.rds.aliyuncs.com:3242。

而後單擊部署 Istio,啓動部署。部署成功以後,Prometheus的監控數據將持久化到對應的TSDB實例中。

更改已有Isito部署配置

若是以前已經部署過Istio,但沒有啓用Prometheus的持久化存儲,則能夠按照以下步驟進行配置。

  • 登陸容器服務管理控制檯。
  • 在 Kubernetes 菜單下,單擊左側導航欄的應用 > 發佈,進入發佈頁面。
  • 單擊Helm,選擇所需的集羣,選擇待更新的Istio,單擊操做列的更新。
  • 在彈出的對話框中,對Istio的Prometheus參數進行修改:
配置 說明
enabled true或者false,表示是否啓用Prometheus 收集度量日誌。默認狀況下啓用,即值爲true。
replicaCount prometheus容器組的副本數,默認值爲1。
persist true或者false,表示是否啓用持久化存儲。設置爲true時,必須指定TSDB實例地址。
tsdbEndpoint TSDB實例地址,啓用持久化存儲時必須指定。
retention 默認的數據保留時間,8760h0m0s即爲24*365小時,即1年
scrapeInterval 全局默認抓取時間間隔,默認爲15s

  • 修改完畢以後,單擊更新

查看Prometheus配置

登陸容器服務管理控制檯,單擊左側導航欄中的應用配置下的配置項,進入配置項列表頁面。點擊名稱爲prometheus的配置項,進入配置項明細頁面,以下圖所示,能夠看到對應的TSDB實例的地址:

TSDB寫入和讀取驗證

TSDB寫入驗證

能夠簡單的經過TSDB實例的管理控制檯界面的「實例監控」界面,觀察寫入的TPS是否有所變化來驗證。通常剛開始沒有任何數據寫入時,寫入的TPS爲0;若TPS開始從0變爲正數時,則說明Prometheus已經將數據上報到了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爲例進行查詢認證,結果以下圖所示。

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

總結

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

 

原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索