1. 程式人生 > 其它 >上手後才知道,這套儀表盤系統用起來是真的爽!

上手後才知道,這套儀表盤系統用起來是真的爽!

為了讓大家更好的瞭解 MSP 中 APM 系統的設計實現,我們決定編寫一個《詳聊微服務觀測》系列文章,深入 APM 系統的產品、架構設計和基礎技術。本文為該系列文章的第二篇,主要分享了我們自研的儀表盤系統 Erda DashBoard 的使用操作及未來願景。


作者|張安哲(落羽)
來源|爾達Erda公眾號

導讀:為了讓大家更好的瞭解 MSP 中 APM 系統的設計實現,我們決定編寫一個《詳聊微服務觀測》系列文章,深入 APM 系統的產品、架構設計和基礎技術。本文為該系列文章的第二篇,主要分享了我們自研的儀表盤系統 Erda DashBoard 的使用操作及未來願景。

《詳聊微服務觀測》系列文章:

引言

容器化與微服務,使系統擴充套件性與魯棒性相比以往提升了許多,但隨之也帶來了問題:運維的任務與工作量日漸繁重。

構成這一應用的微服務以及支撐這一應用的所有基礎設施,都會有各自的日誌、指標資料,以及構建在上游的監控、日誌系統。各處分散的資料和系統,會給支援團隊造成極大的負擔,最終也會成為開發運維工作的攔路虎。

我們的思考

我們已經統一了不同服務的日誌、資料、指標等的分析與聚合及儲存,但不同租戶、應用、服務、例項可能都需要一套自己的具像化監控用以分析排查,這給監控靈活性帶來了極大挑戰。

時至今日,市面上已然出現了許多自定義、視覺化的開源錶盤,如 Kibana、Grafana、Dash 等,也有一定的缺憾,如使用上手難度大,學習成本高等,但最大的問題是操作不連貫導致無法快速排查問題。還有一些系統自帶的監控圖表,但這些資料範圍與查詢規則、排列組合都是程式固定好的,遇到一些複雜情況,還是需要用到第三方工具進行分析排查,不僅費時還費力。作為 PaaS 平臺,我們研發了 Erda Dashboard,統一了使用體驗。

簡介

Erda DashBoard 是一套自研的儀表盤系統,前端基於 Echarts 和 React-grid-layout,後端採用 Influxql 時序查詢語言與自研的 Metrics Search Engine,被 Erda 上絕大多數圖表所採用,包含了自定義儀表盤等功能。

架構簡圖


出於需要對大量資料進行儲存與分析的考慮,且大多數場景需要藉助時間生成時序圖、需要在數千萬條資料中進行搜尋,壓力非常大;除此之外,我們還有定製化的需求,這就決定了元件必須是開源的。結合以上種種原因,我們採用了分散式開源的 ElasticSearch 進行儲存,並對其進行了改造,結構如下:

    {
        "_index": "spot-application_cache-full_cluster-r-000001",
        "_type": "spot",
        "_id": "xxx",
        "_score": 1,
        "_source": {
          "name": "application_cache",
          "timestamp": 1621564500000000000,
          "tags": {
            "_meta": "true",
            "source_application_id": "9",
            "source_application_name": "xxx",
            "source_org_id": "1",
            "source_project_id": "5",
            "source_project_name": "xxx",
            "source_runtime_id": "26",
            "source_runtime_name": "xxx",
            "source_service_id": "xxx",
            "source_service_instance_id": "xxx",
            "source_service_name": "xxx",
            "source_workspace": "DEV",
          },
          "fields": {
            "elapsed_count": 2,
            "elapsed_max": 345831,
            "elapsed_mean": 331554,
            "elapsed_min": 317277,
            "elapsed_sum": 663108
          },
          "@timestamp": 1621564500000
        }
    }

考慮到易用性與通用性,我們摒棄了原生的 DSL 查詢方式,封裝了時序查詢語言 Influxql 並對其做了定製化作為高階功能,用以實現複雜的查詢與分析。對與普通的分析,我們使用 Low Code + 自定義函式表示式的搭配快速產出分析圖表。

初步使用

在 Erda MSP 中,我們提供了大量的內建錶盤來幫助排查系統的常見問題,如程序分析、錯誤分析、鏈路追蹤、事務分析等。

這些錶盤由多個不同的圖表組成,我們可以對其單個圖表進行操作與調整時間範圍:

當時間跨度大,資料量繁多的情況下,可以全屏檢視用以統計走勢或具體分析:

產品特性

運維大盤

運維大盤,也稱之為儀表盤,用以給開發人員與運維人員產生高度可定製化的分析圖表,目前存在於多雲管理平臺與微服務治理平臺中,提供高自由度、可擴充套件、高定製化的圖表。


進入新建運維大盤 ->> 新增圖表後,即可進入圖表編輯器,提供豐富的配置功能:

如指標分組(FROM)、維度(GROUP BY)、值(SELECT)、結果篩選器(WHERE)、結果排序(ORDER BY)、結果擷取(LIMIT)等,與 SQL 一一對應,簡單配置後產生圖表,儲存即可生成錶盤。

多種不同的時序圖,可以無縫切換圖表型別展現:

為支援更多複雜查詢與分析,提供 SQL 方式查詢,自由排列組合:

提供匯出功能,一鍵生成錶盤快照、用以共享:

擴充套件與自定義函式

Erda Dashboard 提供了豐富的自定義擴充套件方法,例如:

  • diffps:用以計算磁碟 IO、網路 IO 等速率值。

如 docker container 的一些原生指標是沒有速率值,只有 Counter 值,比如網路 IO,這個時候就需要對 Counter 值進行處理以計算速率,一般的解決方案是用流計算引擎類似 Flink 進行二次聚合,但並不通用且會造成依賴,如自定義指標,我們選擇在查詢端實現,並且支援分組。

   SELECT time(),application_name::tag,diffps(rx_bytes::field)
   FROM docker_container_summary 
   GROUP BY time(),application_name::tag
   Limit 5
  • 使用時序圖+自定義表示式後,更加直觀清晰。

願景

未來,Erda Dashboard 將會統一 Erda MSP 上所有圖表,並且會擴充套件更多豐富的圖表型別與自定義方法,以及支援更多的資料來源,在規劃中的模板市場可以實現秒建錶盤、組織內分享、公開市場等,使運維與開發效率達到極大提升。並且與告警系統聯動形成分析報告,早日達成 “1 分鐘發現問題,3 分鐘定位故障跟因” 的目標。

歡迎參與開源

Erda 作為開源的一站式雲原生 PaaS 平臺,具備 DevOps、微服務觀測治理、多雲管理以及快資料治理等平臺級能力。點選下方連結即可參與開源,和眾多開發者一起探討、交流,共建開源社群。歡迎大家關注、貢獻程式碼和 Star!