日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

從 Prometheus 到 OpenTelemetry:指標監控的演進與實踐

來源: 責編: 時間:2024-06-14 17:40:00 225觀看
導讀背景關于 metrics 我最早接觸相關概念的就是 prometheus,它是第二個加入 CNCF(云原生)社區的項目(第一個是 kubernetes),可見在云原生領域 Metrics 指標監控從誕生之初就是一個非常重要的組件。現實也確實如此,如今只要使用

背景

關于 metrics 我最早接觸相關概念的就是 prometheus,它是第二個加入 CNCF(云原生)社區的項目(第一個是 kubernetes),可見在云原生領域 Metrics 指標監控從誕生之初就是一個非常重要的組件。Ua628資訊網——每日最新資訊28at.com

現實也確實如此,如今只要使用到了 kubernetes 相關的項目,對其監控就是必不可少的。Ua628資訊網——每日最新資訊28at.com

當然也不止是云原生的項目才需要 Metrics 指標監控,我們任何一個業務都是需要的,不然我們的服務運行對開發運維來說都是一個黑盒,無法知道此時系統的運行情況,因此才需要我們的業務系統將一些關鍵運行指標暴露出來。Ua628資訊網——每日最新資訊28at.com

圖片圖片Ua628資訊網——每日最新資訊28at.com

業務數據:比如訂單的增長率、銷售金額等業務數據;同時還有應用自身的資源占用情況:Ua628資訊網——每日最新資訊28at.com

  • QPS
  • Latency
  • 內存
  • CPU 等信息。

在使用 OpenTelemetry 之前,因為 prometheus 是這部分的絕對標準,所以我們通常都會使用 prometheus 的包來暴露這些指標:Ua628資訊網——每日最新資訊28at.com

<!-- The client --><dependency>  <groupId>io.prometheus</groupId>  <artifactId>simpleclient</artifactId>  <version>0.16.0</version></dependency><!-- Hotspot JVM metrics--><dependency>  <groupId>io.prometheus</groupId>  <artifactId>simpleclient_hotspot</artifactId>  <version>0.16.0</version></dependency>

暴露一個自定義的指標也很簡單:Ua628資訊網——每日最新資訊28at.com

import io.prometheus.client.Counter;class YourClass {  static final Counter requests = Counter.build()     .name("requests_total").help("Total requests.").register();  void processRequest() {    requests.inc();    // Your code here.  }}

這是暴露一個單調遞增的指標,prometheus 還提供了其他幾種指標類型:Ua628資訊網——每日最新資訊28at.com

  • Counter
  • Gauge
  • Histogram

之后我們只需要在 prometheus 中配置一些抓取規則即可:Ua628資訊網——每日最新資訊28at.com

scrape_configs:  - job_name: 'springboot'    scrape_interval: 10s    static_configs:      - targets: ['localhost:8080'] # Spring Boot ip+port

當然如果是運行在 kubernetes 環境,prometheus 也可以基于服務發現配置一些規則,自動抓取我們的 Pod 的數據,由于不是本文的重點就不過多介紹。Ua628資訊網——每日最新資訊28at.com

基本組件

在 OpenTelemetry 中自然也提供了 Metrics 這個組件,同時它也是完全兼容 Prometheus,所以我們理解和使用起來并不復雜。Ua628資訊網——每日最新資訊28at.com

MeterProvider

不同于 prometheus 客戶端中直接提供了 Counter 就可以創建指標了,在 OpenTelemetry 中會提供一個 MeterProvider 的接口,使用這個接口可以獲取 Meter,再使用 Meter 才可以創建 Counter、Gauge、Histogram 等數據。Ua628資訊網——每日最新資訊28at.com

下面來看看具體如何使用,這里我以 Pulsar 源碼的代碼進行演示:Ua628資訊網——每日最新資訊28at.com

public InstrumentProvider(OpenTelemetry otel) {      if (otel == null) {          // By default, metrics are disabled, unless the OTel java agent is configured.          // This allows to enable metrics without any code change.        otel = GlobalOpenTelemetry.get();      }    this.meter = otel.getMeterProvider()              .meterBuilder("org.apache.pulsar.client")              .setInstrumentationVersion(PulsarVersion.getVersion())              .build();  }LongCounterBuilder builder = meter.counterBuilder(name)          .setDescription(description)          .setUnit(unit.toString());

Meter Exporter

Meter Exporter 則是一個 OpenTelemetry 獨有的概念,與我們之前講到的一樣:OpenTelemetry 作為廠商無關的平臺,允許我們將數據寫入到任何兼容的產品里。Ua628資訊網——每日最新資訊28at.com

所以我們在使用 Metrics 時需要指定一個 exporter:Ua628資訊網——每日最新資訊28at.com

Exporter 類型Ua628資訊網——每日最新資訊28at.com

作用Ua628資訊網——每日最新資訊28at.com

備注Ua628資訊網——每日最新資訊28at.com

參數Ua628資訊網——每日最新資訊28at.com

OTLP ExporterUa628資訊網——每日最新資訊28at.com

通過 OpenTelemetry Protocol(OTLP) 發送指標數據到 collect。Ua628資訊網——每日最新資訊28at.com

默認生產環境中推薦使用,需要將數據發送到支持 OTLP 的后端,如 OpenTelemetry Collector。Ua628資訊網——每日最新資訊28at.com

-Dotel.metrics.exporter=otlp (default)Ua628資訊網——每日最新資訊28at.com

Console ExporterUa628資訊網——每日最新資訊28at.com

將指標數據打印到控制臺的導出器。Ua628資訊網——每日最新資訊28at.com

開發和調試,快速查看指標數據。Ua628資訊網——每日最新資訊28at.com

-Dotel.metrics.exporter=consoleUa628資訊網——每日最新資訊28at.com

Prometheus ExporterUa628資訊網——每日最新資訊28at.com

將指標數據以 Prometheus 抓取的格式暴露給 Prometheus 服務。Ua628資訊網——每日最新資訊28at.com

與 Prometheus 集成,適用于需要 Prometheus 監控的場景,這個可以無縫和以往使用 prometheus 的場景兼容Ua628資訊網——每日最新資訊28at.com

-Dotel.metrics.exporter=prometheusUa628資訊網——每日最新資訊28at.com

Metric Instruments

與 prometheus 類似,OpenTelemetry 也提供了以下幾種指標類型:Ua628資訊網——每日最新資訊28at.com

  • Counter:單調遞增計數器,比如可以用來記錄訂單數、總的請求數。
  • UpDownCounter:與 Counter 類似,只不過它可以遞減。
  • Gauge:用于記錄隨時在變化的值,比如內存使用量、CPU 使用量等。
  • Histogram:通常用于記錄請求延遲、響應時間等。

同時每個指標還有以下幾個字段:Ua628資訊網——每日最新資訊28at.com

  • Name:名稱,必填。
  • Kind:類型,必填。
  • Unit:單位,可選。
  • Description:描述,可選。
messageInCounter = meter          .counterBuilder(MESSAGE_IN_COUNTER)          .setUnit("{message}")          .setDescription("The total number of messages received for this topic.")          .buildObserver();

還是以 Pulsar 的為例,messageInCounter 是一個記錄總的消息接收數量的 Counter 類型。Ua628資訊網——每日最新資訊28at.com

subscriptionCounter = meter          .upDownCounterBuilder(SUBSCRIPTION_COUNTER)          .setUnit("{subscription}")          .setDescription("The number of Pulsar subscriptions of the topic served by this broker.")          .buildObserver();

這是記錄一個訂閱者數量的指標,類型是 UpDownCounter,也就是可以增加減少的指標。Ua628資訊網——每日最新資訊28at.com

private static final List<Double> latencyHistogramBuckets =          Lists.newArrayList(.0005, .001, .0025, .005, .01, .025, .05, .1, .25, .5, 1.0, 2.5, 5.0, 10.0, 30.0, 60.0);DoubleHistogramBuilder builder = meter.histogramBuilder("pulsar.client.producer.message.send.duration")          .setDescription("Publish latency experienced by the application, includes client batching time")          .setUnit(Unit.Seconds.toString())          .setExplicitBucketBoundariesAdvice(latencyHistogramBuckets);

這是一個記錄 Pulsar producer 發送延遲的指標,類型是 Histogram。Ua628資訊網——每日最新資訊28at.com

backlogQuotaAge = meter          .gaugeBuilder(BACKLOG_QUOTA_AGE)          .ofLongs()          .setUnit("s")          .setDescription("The age of the oldest unacknowledged message (backlog).")          .buildObserver();

這是一個記錄最大 unack 也就是 backlog 時間的指標,類型是 Gauge。Ua628資訊網——每日最新資訊28at.com

案例

在之前的文章:實戰:如何編寫一個 OpenTelemetry Extensions中講過如何開發一個 OpenTelemetry 的 extension,其實當時我就是開發了一個用于在 Pulsar 客戶端中暴露指標的一個插件。Ua628資訊網——每日最新資訊28at.com

不過目前 Pulsar 社區已經集成了該功能。Ua628資訊網——每日最新資訊28at.com

其中的核心代碼與上面講到的類似:Ua628資訊網——每日最新資訊28at.com

public static void registerObservers() {        Meter meter = MetricsRegistration.getMeter();            meter.gaugeBuilder("pulsar_producer_num_msg_send")                .setDescription("The number of messages published in the last interval")                .ofLongs()                .buildWithCallback(                        r -> recordProducerMetrics(r, ProducerStats::getNumMsgsSent));private static void recordProducerMetrics(ObservableLongMeasurement observableLongMeasurement, Function<ProducerStats, Long> getter) {        for (Producer producer : CollectionHelper.PRODUCER_COLLECTION.list()) {            ProducerStats stats = producer.getStats();            String topic = producer.getTopic();            if (topic.endsWith(RetryMessageUtil.RETRY_GROUP_TOPIC_SUFFIX)) {                continue;            }        observableLongMeasurement.record(getter.apply(stats),                    Attributes.of(PRODUCER_NAME, producer.getProducerName(), TOPIC, topic));        }}

只是這里使用了 buildWithCallback 回調函數,OpenTelemetry 會每隔 30s 調用一次這個函數,通常適用于 Gauge 類型的數據。Ua628資訊網——每日最新資訊28at.com

java -javaagent:opentelemetry-javaagent.jar /       -Dotel.javaagent.extensinotallow=ext.jar  /     -Dotel.metrics.exporter=prometheus /     -Dotel.exporter.prometheus.port=18180 /     -jar myapp.jar

配合上 Prometheus 的兩個啟動參數就可以在本地 18180 中獲取到指標數據:Ua628資訊網——每日最新資訊28at.com

curl http://127.0.0.1:18180/metrics

當然也可以直接發往 OpenTelemetry-Collector 中,再由它發往 prometheus,只是這樣需要額外在 collector 中配置一下:Ua628資訊網——每日最新資訊28at.com

exporters:  debug: {}  otlphttp:    metrics_endpoint: http://promethus:8480/insert/0/opentelemetry/api/v1/pushservice:  pipelines:    metrics:      exporters:      - otlphttp      processors:      - k8sattributes      - batch      receivers:      - otlp

圖片圖片Ua628資訊網——每日最新資訊28at.com

這樣我們就可以在 Grafana 中通過 prometheus 查詢到數據了。Ua628資訊網——每日最新資訊28at.com

有一點需要注意,如果我們自定義的指標最好是參考官方的語義和命名規范來定義這些指標名稱。Ua628資訊網——每日最新資訊28at.com

圖片圖片Ua628資訊網——每日最新資訊28at.com

比如 OpenTelemetry 的規范中名稱是用 . 來進行分隔的。Ua628資訊網——每日最新資訊28at.com

切換為 OpenTelemetry 之后自然就不需要依賴 prometheus 的包,取而代之的是 OTel 的包:Ua628資訊網——每日最新資訊28at.com

compileOnly 'io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi:1.34.1'  compileOnly 'io.opentelemetry.instrumentation:opentelemetry-instrumentation-api:1.32.0'

總結

相對來說 Metrics 的使用比 Trace 簡單的多,同時 Metrics 其實也可以和 Trace 進行關聯,也就是 Exemplars,限于篇幅就不在本文展開了,感興趣的可以自行查閱。Ua628資訊網——每日最新資訊28at.com

參考鏈接:Ua628資訊網——每日最新資訊28at.com

  • https://github.com/apache/pulsar/blob/master/pulsar-client/src/main/java/org/apache/pulsar/client/impl/metrics/InstrumentProvider.java
  • https://opentelemetry.io/docs/specs/semconv/general/metrics/
  • https://opentelemetry.io/docs/specs/otel/metrics/data-model/#exemplars

本文鏈接:http://m.www897cc.com/showinfo-26-93865-0.html從 Prometheus 到 OpenTelemetry:指標監控的演進與實踐

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 23k star超火項目,請求優化寫的一塌糊涂!我直接重構!

下一篇: 有點東西,Template可以直接使用Setup語法糖中的變量原來是因為這個

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
亚洲欧美日韩精品在线| 国产日产欧美一区| 精品动漫av| 亚洲欧美一区在线| 在线观看成人网| 最新精品在线| 一本色道久久综合精品竹菊 | 国产无一区二区| 欧美xxx成人| 一二三四社区欧美黄| 久久久久国内| 久久精品视频网| 亚洲影院色在线观看免费| 在线电影国产精品| 一本色道久久88综合亚洲精品ⅰ| 亚洲国产视频一区二区| 亚洲深夜激情| 欧美bbbxxxxx| 欧美日本一道本| 久久精品一级爱片| 欧美护士18xxxxhd| 国产精品日韩欧美一区| 激情综合五月天| 日韩亚洲在线观看| 欧美亚洲自偷自偷| 欧美精品18| 国产日韩精品一区| 日韩亚洲综合在线| 久久精品人人做人人综合 | 在线观看日韩www视频免费| 一区二区三区四区在线| 久久人人九九| 国产精品黄色| 亚洲国产一区在线观看| 欧美在线免费播放| 欧美日韩在线一区| 在线观看视频一区二区| 亚洲资源av| 欧美精品色一区二区三区| 黄色亚洲网站| 亚久久调教视频| 欧美色综合天天久久综合精品| 樱桃成人精品视频在线播放| 午夜精品电影| 欧美丝袜第一区| 亚洲精品一区二区三区蜜桃久 | 欧美精品一区二区三区四区| 国产综合精品| 亚洲欧美中文日韩v在线观看| 欧美精彩视频一区二区三区| 亚洲成色www久久网站| 欧美在线资源| 国产精品中文字幕在线观看| 在线视频精品一区| 蜜臀av一级做a爰片久久 | 99国产精品久久| 欧美成人午夜激情视频| 韩国一区二区三区在线观看| 亚洲欧美在线免费| 欧美视频在线观看| 亚洲日韩欧美一区二区在线| 久久综合九色欧美综合狠狠| 国产一区二区三区免费不卡 | 国产欧美91| 亚洲一区二区高清视频| 欧美激情91| 亚洲国产日本| 美女91精品| 一区二区视频免费完整版观看| 午夜精品www| 国产精品综合色区在线观看| 亚洲网站在线观看| 欧美性片在线观看| 亚洲视频网在线直播| 欧美三级欧美一级| 一区二区三区四区精品| 欧美日韩国产一区二区三区地区| 亚洲日韩欧美视频一区| 欧美激情在线| 日韩亚洲精品视频| 欧美日韩午夜激情| 亚洲一区二区动漫| 国产精品乱码久久久久久| 亚洲午夜国产一区99re久久 | 伊人色综合久久天天| 久久这里只精品最新地址| 激情欧美一区二区三区在线观看| 久久精品国产久精国产思思| 国产亚洲观看| 久久精品一本久久99精品| 国产综合视频| 猛男gaygay欧美视频| 亚洲国产日韩美| 一区二区高清在线| 欧美日韩在线三区| 亚洲一级高清| 国产日韩一区二区三区| 久久久久久久久久久久久久一区| 好吊视频一区二区三区四区 | 国内久久精品| 嫩模写真一区二区三区三州| 亚洲青色在线| 欧美色精品天天在线观看视频| 亚洲一区久久久| 国产欧美亚洲视频| 久久夜色撩人精品| 99pao成人国产永久免费视频| 欧美深夜福利| 久久成人一区二区| 1024国产精品| 亚洲精品视频二区| 欧美日韩免费一区二区三区| 亚洲午夜免费视频| 国产丝袜一区二区三区| 猫咪成人在线观看| 中文在线一区| 国产美女精品视频免费观看| 久久国产手机看片| 亚洲三级影片| 国产精品美女在线观看| 久久精品国产第一区二区三区最新章节| 精品福利电影| 欧美日韩国产一中文字不卡| 午夜精品区一区二区三| 在线观看欧美黄色| 欧美日韩国产一区二区三区地区| 午夜精品视频在线观看| 欧美深夜影院| 久久久久99精品国产片| 亚洲免费高清| 欧美激情在线观看| 午夜精品福利视频| 亚洲国产精品123| 国产精品任我爽爆在线播放| 久久久久久久久久久久久9999| 亚洲毛片av在线| 国产一区二区三区精品欧美日韩一区二区三区 | 伊人成人在线视频| 欧美天堂亚洲电影院在线观看| 久久精品在线观看| 一区二区冒白浆视频| 国内久久婷婷综合| 欧美日韩在线免费| 麻豆91精品91久久久的内涵| 亚洲一区二区3| 91久久精品一区| 国产午夜精品在线| 欧美日韩一区国产| 麻豆九一精品爱看视频在线观看免费 | 最新成人av网站| 欧美wwwwww| 午夜久久福利| 日韩一级在线观看| 在线观看视频日韩| 国产精品最新自拍| 欧美日韩人人澡狠狠躁视频| 久久综合网hezyo| 香港久久久电影| 9久草视频在线视频精品| 一区二区亚洲精品国产| 国产精品专区一| 欧美日韩亚洲一区二区三区| 麻豆成人av| 久久高清福利视频| 亚洲一区久久| 99re66热这里只有精品4| 蜜桃av一区二区三区| 亚洲尤物视频在线| 日韩亚洲在线| 91久久精品一区二区三区| 精品av久久707| 国产视频精品网| 久久超碰97人人做人人爱| 一区二区三区视频在线看| 亚洲经典自拍| 伊人久久综合97精品| 国产一区二区精品| 国产日韩欧美| 国产精品久久久久久户外露出| 欧美日本三级| 欧美精品18+| 欧美国产精品va在线观看| 久热爱精品视频线路一| 久久久久99| 久久久久久网| 久久久精品久久久久| 久久av一区二区| 欧美一二三区在线观看| 亚洲免费在线看| 亚洲一区二区成人在线观看| 一本综合久久| av不卡在线观看| 一级成人国产| 亚洲视频一区二区| 亚洲少妇最新在线视频| 一区二区日韩精品| 中日韩美女免费视频网站在线观看| 999亚洲国产精| 亚洲私人黄色宅男| 亚洲一区二区三区在线视频| 亚洲午夜一区二区| 亚洲综合视频在线| 亚洲欧美中文日韩v在线观看| 亚洲欧美日韩网|