由于开发者通过接口修改了菜单配置_开发者说:Seata 0.7.0 版本,你 get 'Metrics' 技能了吗?...
從用戶的視角來感受一個開源項目的成長,是我們推出「開發者說」專欄的初衷,即在開發者進行開源項目選型時,提供更為立體的項目信息。專欄所有內容均來自作者原創/投稿,本文是「開發者說」的第9篇,作者鄭揚勇,云粒智慧技術專家,開源愛好者,關注微服務、IOT領域技術,希望通過參與開源幫助別人的同時幫助自己。
Seata 0.7.0版本中將包含全新的特性 - Metrics,作為 APM(Application Performance Management & Monitoring)三大基石之一,通過它可以快速詳盡的獲取到TC、TM(規劃中)和RM(規劃中)中事務的活動狀態以及時延等重要統計信息。
設計思路
模塊說明
Seata Metrics 的模塊全部在seata-metrics下,0.7版本包含:
由2個核心 API 模塊 seata-metrics-api和seata-metrics-core,以及N個實現模塊,例如:seata-metrics-registry-compact、seata-metrics-exporter-prometheus構成:
- seata-metrics-api 模塊
此模塊是 Metrics 的核心,將作為 Seata 基礎架構的一部分被 TC、TM 和 RM 引用,它內部沒有任何具體實現代碼,僅包含接口定義,定義的內容包括:
1、Meter類接口:Gauge、Counter、Timer...
2、注冊容器接口:Registry
3、Measurement 數據導出接口:Exporter
提示:Metrics 本身在開源領域也已有很多實現,例如 Netflix-Spectator、Dropwizard-Metrics、Dubbo-Metrics。它們有的輕而敏捷,有的重而強大,由于也是“實現”,因此不會納入seata-metrics-api中,避免實現綁定。
- seata-metrics-core 模塊
- Metrics核心模塊,根據配置組織(加載)1個Registry和N個Exporter;
- seata-metrics-registry-compact 模塊
- 這是我們提供的默認(內置)的Registry實現,不使用其它Metrics開源庫,輕量級的實現了以下四種Meter:
其中包含的 Registry,即CompactRegistry,它只有接受 measure() 方法調用的時候才計算度量值,因此計算窗口完全取決于Exporter的實現,故目前不太適合需要多Exporter 的場景使用(如何擴展請參見后文)。
說明:未來可能增加更豐富復雜的度量器例如Histogram,這是一種可以本地統計聚合75th, 90th, 95th, 98th, 99th,99.9th...的度量器,適合某些場合,但需要更多內存。所有的計量器都將繼承自Meter,所有的計量器執行 measure() 方法后,都將歸一化的生成1或N個 Measurement 結果。
- seata-metrics-exporter-prometheus模塊
- Prometheus 發布器PrometheusExporter,將度量數據同步給 Prometheus。
工作原理
TC中Metrics的初始化步驟和工作原理如下:
可以看出,Metrics 定位為一個可選特性,如果不配置,事件訂閱器 MetricsSubscriber并不會創建和注冊,避免無謂的性能開銷。
如何使用
如果需要開啟 TC 的 Metrics,需要在其配置中增加配置項:
## metrics settings metrics { registry-type = "compact" # multi exporters use comma divided exporter-list = "prometheus" exporter-prometheus-port = 9898 }啟動TC,即可在http://tc-server-ip:9898/metrics上獲取到Metrics的文本格式數據。
提示:默認使用9898端口,Prometheus 已登記的端口列表在此,如果想更換端口,可通過metrics.exporter-prometheus-port配置修改。
下載并啟動 Prometheus
下載完畢后,修改 Prometheus 的配置文件prometheus.yml,在scrape_configs中增加一項抓取 Seata 的度量數據:
scrape_configs: # The job name is added as a label `job=` to any timeseries scraped from this config. - job_name: 'prometheus' # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ['localhost:9090'] - job_name: 'seata' # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ['tc-server-ip:9898']查看數據輸出
推薦結合配置 Grafana 獲得更好的查詢效果,目前Seata導出的Metrics包括:
提示:seata.transaction(role=tc,meter=summary,statistic=count,status=committed/rollback)和seata.transaction(role=tc,meter=timer,statistic=count,status=committed/rollback)的值可能相同,但它們來源于兩個不同的度量器。
如何擴展
如果有下面幾種情況:
1、您不是使用 Prometheus 作為運維監控系統,但希望能夠將Seata的Metrics數據集成進 Dashboard 中;
您需要實現新的Exporter,例如如果需要對接Zabbix,創建seata-metrics-exporter-zabbix模塊,然后在ExporterType中添加新的Exporter類型,最后在metrics.exporter-list中配置。
2、您需要更復雜強大的度量器類型,這些度量器在其他 Metrics 實現庫中已有,希望集成這些第三方依賴直接使用;
您可以不使用內置的 CompactRegistry 的實現,完全擴展一個新的Registry庫,例如希望使用 Netflix Spectator 的實現,擴展名為seata-metrics-registry-spectator的模塊,然后在RegistryType中添加新的Registry類型,開發完成后,設置metrics.registry-type為對應的類型。
3、您需要改變默認 Metric 的 Measurement 輸出,例如在 Timer 中增加一個min或sd(方差);
您可以修改對應 Meter 的實現,包括measure()方法返回的 Measurement 列表。
未來發展
1. 為 TM 和 RM 追加 Metrics 特性:
TM:稍后實現,包括諸如:
seata.transaction(role=tm,name{GlobalTransactionalName},meter=counter,status=active/committed/rollback) : 以GlobalTransactionalName為維度區分不同Transactional的狀態。
RM:稍后實現,包括諸如:
eata.transaction(role=rm,name{BranchTransactionalName},mode=at/mt,meter=counter,status=active/committed/rollback):以BranchTransactionalName為維度以及AT/MT維度區分不同分支 Transactional 的狀態。
2. 響應社區,擴展更多的 Registry 和 Exporter ,以及支持更豐富的 Meter。
結束語
文介紹的 Metrics 是一個侵入式特性,如果用戶希望只使用無侵入的 Metrics,則可以使用 SkyWalking 在6.3版本中增加的與 Seata 集成的方案。
本文作者:中間件小哥
總結
以上是生活随笔為你收集整理的由于开发者通过接口修改了菜单配置_开发者说:Seata 0.7.0 版本,你 get 'Metrics' 技能了吗?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 各种排序笔记---基于非比较排序部分
- 下一篇: 五笔拼音反查精灵 v6.69 绿色版