Spring Boot Actuator 集成 Micrometer(官網文檔解讀)

目錄

概述

實現 Observation 可觀測性

Observation 功能核心類

ObservationPredicate

GlobalObservationConvention

ObservationFilter

ObservationHandler

ObservationRegistryCustomizer

Observation?相關注解

多線程處理機制

配置上下文傳播

常用標簽配置

OpenTelemetry 支持

關閉可觀測功能

自定義Micrometer?健康檢查映射

Loggers

OpenTelemetry 支持

Metrics

監控系統支持

度量指標支持

JVM 指標

系統指標

應用程序啟動指標

logging Metrics:

任務執行和調度指標

JMS Metrics

Spring MVC Metrics

Spring WebFlux Metrics

Jersey Server Metrics

HTTP Client Metrics

Tomcat Metrics

Cache Metrics

DataSource Metrics

Hibernate Metrics

Spring Data Repository Metrics

RabbitMQ Metrics

Spring Integration Metrics

Kafka Metrics

MongoDB Metrics

Jetty Metrics

Redis Metrics

注冊自定義指標

自定義單個指標

Meterics?Endpoint

Tracing

基于 OpenTelemetry 的追蹤器

基于 OpenZipkin Brave 的追蹤器

追蹤器實現

OpenTelemetry 與 Zipkin

OpenTelemetry 與 Wavefront

使用 OTLP 的 OpenTelemetry

OpenZipkin Brave 與 Zipkin

OpenZipkin Brave 與 Wavefront

學習拓展

Micrometer 官網

Observability for JDBC

openTelemetry

參考文獻


概述

????????Spring Boot Actuator 與 Micrometer 的集成使得開發者可以輕松地收集和監控應用程序的性能指標。Actuator 提供了眾多端點(endpoints)來幫助開發者監控和管理應用程序,而 Micrometer 則作為度量數據收集和分發的庫。通過將兩者結合起來,你可以獲得一個強大的工具集來監視生產環境中應用的健康狀態。

實現 Observation 可觀測性

  • 可觀測性是從外部觀察正在運行的系統的內部狀態的能力。它由三部分組成分別是:日志記錄、指標和跟蹤。

  • Spring Boot 使用 Micrometer Observation 實現指標和追蹤。我們可以通過注入ObservationRegistry 來實現自己的監控邏輯。

  • 示例代碼:

@Component
public class MyCustomObservation {private final ObservationRegistry observationRegistry;public MyCustomObservation(ObservationRegistry observationRegistry) {this.observationRegistry = observationRegistry;}public void doSomething() {Observation.createNotStarted("doSomething", this.observationRegistry).lowCardinalityKeyValue("locale", "en-US").highCardinalityKeyValue("userId", "42").observe(() -> {// Execute business logic here});}}

Observation 功能核心類

ObservationPredicate
  • 定義:ObservationPredicate是一個用于判斷是否應該對某個操作或事件進行觀測的謂詞接口。它定義了一個test方法,接受一個與觀測相關的上下文對象,返回一個布爾值,表示是否滿足觀測條件。

  • 作用:通過實現ObservationPredicate接口,可以根據具體的業務邏輯或條件來決定是否對特定的操作進行觀測。例如,可以根據請求的路徑、方法名、用戶角色等信息來判斷是否需要記錄觀測數據,從而實現有選擇性地進行觀測,避免不必要的觀測開銷,也能更精準地獲取關注的數據。

GlobalObservationConvention
  • 定義:GlobalObservationConvention是用于定義全局觀測約定的接口。它通常用于設置一些全局的觀測規則和屬性,這些規則和屬性會應用到所有的觀測操作中。

  • 作用:可以利用GlobalObservationConvention來統一設置觀測的標簽、名稱格式、上下文信息等。比如,為所有的觀測添加一些固定的標簽,用于標識應用的版本、環境等信息,或者規定觀測名稱的統一命名規范,使得觀測數據在整個系統中具有一致性和規范性,便于后續的分析和處理。

ObservationFilter
  • 定義:ObservationFilter是用于對觀測數據進行過濾的接口。它提供了一種機制,在觀測數據被記錄或處理之前,對其進行篩選和判斷。

  • 作用:通過實現ObservationFilter,可以根據特定的條件來決定是否允許某個觀測數據通過,或者對觀測數據進行修改、補充等操作。例如,可以過濾掉一些敏感信息,或者根據某些業務規則對觀測數據進行轉換,以便更好地滿足數據安全和分析的需求。

ObservationHandler
  • 定義:ObservationHandler是觀測處理的核心接口,用于處理觀測到的事件和數據。它定義了一系列方法,用于在觀測的不同階段執行相應的操作。

  • 作用

    • 數據記錄:負責將觀測到的數據記錄下來,可能是將數據發送到日志文件、數據庫或其他數據存儲介質中。

    • 數據處理:可以對觀測數據進行各種處理,如計算統計信息、轉換數據格式等。

    • 事件通知:在觀測到特定事件時,可以通過ObservationHandler來觸發一些通知機制,例如發送告警信息、通知其他系統進行相應的處理等。

ObservationRegistryCustomizer
  • 定義:ObservationRegistryCustomizer是 Micrometer 中用于定制ObservationRegistry的工具類。通過實現該接口,可以在應用啟動或初始化階段,對ObservationRegistry進行個性化的設置和調整,以滿足特定的監控和觀測需求。

  • 作用:

    • 配置 ObservationRegistry:允許開發者對ObservationRegistry進行各種配置,比如設置全局的觀測選項、添加自定義的ObservationHandlerObservationFilterGlobalObservationConvention等。通過這些配置,可以定制觀測數據的收集、處理和存儲方式,以及觀測的行為和特性。

    • 添加自定義邏輯:開發者能夠在ObservationRegistryCustomizer的實現中添加自定義的邏輯。例如,可以根據應用的運行環境、配置參數或其他條件,動態地決定是否啟用某些觀測功能,或者調整觀測的詳細程度。還可以在觀測數據記錄之前或之后,插入自定義的處理邏輯,對數據進行額外的加工或轉換。

    • 整合外部系統:有助于將 Micrometer 的觀測功能與其他外部系統或框架進行整合。比如,可以通過ObservationRegistryCustomizer將觀測數據發送到特定的監控平臺或日志系統,實現與現有監控體系的無縫對接,方便進行集中式的監控和管理。

Observation?相關注解

  • @Timed:@Timed注解用于方法或類上,主要用于測量被注解的方法或類中方法執行的時間。它會自動記錄方法執行的耗時,并將其作為一個計時度量指標發布到 Micrometer 的度量系統中。

  • @Counted:@Counted注解用于統計方法的調用次數。當被注解的方法被調用時,Micrometer 會將對應的計數器加一,通過這種方式可以方便地跟蹤方法的調用頻率,了解某個方法在系統運行過程中被調用的次數情況。

  • @MeterTag:@MeterTag注解用于為度量指標添加標簽。可以在方法或類上使用,通過它可以為相關的度量指標提供額外的維度信息,方便對度量數據進行分組、過濾和分析。

  • @NewSpan:@NewSpan注解用于創建一個新的跨度(Span),通常用于分布式追蹤場景中。它可以標記一個方法或代碼塊作為分布式追蹤中的一個獨立跨度,記錄該跨度內的操作和耗時等信息,有助于在分布式系統中跟蹤請求的流轉和處理過程,方便進行性能分析和故障排查。

????????使用這些注釋的時候,需要確保Spring Boot 配置中設置:

management.observations.annotations.enabled=true

多線程處理機制

????????在多線程環境或響應式編程中,實現Micrometer 的觀測功能依賴于上下文傳播(Context Propagation),在管道中保持追蹤信息和其他上下文數據的一致性。

配置上下文傳播

????????Spring 框架提供了一個配置屬性 spring.reactor.context-propagation 來控制上下文傳播的行為。默認情況下,上下文傳播是禁用的,因為這可能會對性能產生影響。你可以將此屬性設置為 auto 來啟用自動上下文傳播,這樣就能保證在響應式操作符之間自動傳播當前的觀察上下文。

spring:reactor:context-propagation: auto

????????一旦啟用了自動上下文傳播,那么在響應式鏈中的每個步驟都會繼承上一步驟的上下文信息,從而確保追蹤和監控數據的一致性和完整性。

常用標簽配置

? ? ? ? 我們可以通過Spring Boot 配置給可觀測性添加常用標簽,常用標簽通常用于對操作環境進行維度深入分析,例如主機、實例、區域、堆棧等。常用標簽作為低基數標簽可以應用于所有觀察,并且可以進行配置。

  • 配置示例:

management:observations:key-values:region: "us-east-1"stack: "prod"

OpenTelemetry 支持

????????Spring Boot 包含兩種關于OpenTelemetry 的支持方式:

  1. OpenTelemetry Java Agent:你可以使用由 OpenTelemetry 社區支持的 Java Agent 來自動儀器化你的應用程序。這個代理可以在不修改代碼的情況下添加追蹤和度量。

  2. OpenTelemetry Spring Boot Starter:這是一個專門為 Spring Boot 應用設計的啟動器,它提供了對 OpenTelemetry 的簡單集成。通過添加這個依賴,可以輕松地將 OpenTelemetry 集成到基于 Spring 的項目中。

????????Spring Boot 的?actuator 模塊則提供了對于OpenTelemetry的基礎支持。

  • 自動配置 OpenTelemetry Bean:

    • 當你引入 OpenTelemetry 相關依賴后,Spring Boot 會自動配置一個?OpenTelemetry?類型的 bean。

    • 如果應用上下文中存在?SdkTracerProviderContextPropagatorsSdkLoggerProvider?或?SdkMeterProvider?類型的 beans,它們會被自動注冊到 OpenTelemetry 中。

    • 此外,還會提供一個?Resource?類型的 bean,其屬性可以通過?management.opentelemetry.resource-attributes?屬性進行配置。如果你自己定義了一個?Resource?bean,則不會使用默認的自動配置。?

  • 自動配置限制

    • Spring Boot 并不提供對 OpenTelemetry 的自動配置,我們需要手動設置這部分的功能。

    • 只有當 OpenTelemetry 跟蹤與 Micrometer Tracing 一起使用時,才會觸發自動配置。這是因為 Micrometer Tracing 為追蹤提供了額外的支持,如上下文傳播等。

關閉可觀測功能

????????我們可以使用management.observations.enable屬性,關閉Spring Boot 的可觀測性功能。

  • 配置示例:

management:observations:enable:denied:prefix: falseanother:denied:prefix: false

自定義Micrometer?健康檢查映射

? ? ? ?Spring Boot 健康指標返回一種Status類型來指示整個系統的健康狀況。如果您想要監控或警告特定應用程序的健康水平,可以使用 Micrometer 將這些狀態導出為指標。默認情況下,Spring Boot 使用狀態代碼“UP”、“DOWN”、“OUT_OF_SERVICE”和“UNKNOWN”。要導出這些,您需要將這些狀態轉換為一組數字,以便它們可以與 Micrometer 一起使用Gauge。

@Configuration(proxyBeanMethods = false)
public class MyHealthMetricsExportConfiguration {public MyHealthMetricsExportConfiguration(MeterRegistry registry, HealthEndpoint healthEndpoint) {// This example presumes common tags (such as the app) are applied elsewhereGauge.builder("health", healthEndpoint, this::getStatusCode).strongReference(true).register(registry);}private int getStatusCode(HealthEndpoint health) {Status status = health.health().getStatus();if (Status.UP.equals(status)) {return 3;}if (Status.OUT_OF_SERVICE.equals(status)) {return 2;}if (Status.DOWN.equals(status)) {return 1;}return 0;}}

Loggers

????????Spring Boot Actuator 包括在運行時查看和配置應用程序日志級別的功能。您可以查看整個列表或單個記錄器的配置,該配置由顯式配置的日志記錄級別以及日志記錄框架賦予的有效日志記錄級別組成。這些級別可以是以下之一:

  • TRACE

  • DEBUG

  • INFO

  • WARN

  • ERROR

  • FATAL

  • OFF

  • null:null表示沒有顯式配置。

OpenTelemetry 支持

  • 為了在項目中啟用OpenTelemetry Logging的支持,我們需要手動配置Spring Boot的相關設置。配置示例:

  • management:otlp:logging:endpoint: "https://otlp.example.com:4318/v1/logs"
  • 我們需要在logback-spring.xmllog4j2-spring.xml的配置文件中添加OpenTelemetry的相關配置項,以確保OpenTelemetry日志記錄功能能夠順利運行。

  • 為了確保Logback 或者 Log4j 可以被正常注冊至OpenTelemetry,我們需要使用 OpenTelemetryAppender ,并在應用程序啟動期間以編程方式設置此實例。

  • @Component
    class OpenTelemetryAppenderInitializer implements InitializingBean {private final OpenTelemetry openTelemetry;OpenTelemetryAppenderInitializer(OpenTelemetry openTelemetry) {this.openTelemetry = openTelemetry;}@Overridepublic void afterPropertiesSet() {OpenTelemetryAppender.install(this.openTelemetry);}}

Metrics

監控系統支持

? ? ? ? Spring Boot Actuator 為 Micrometer 提供依賴管理和自動配置。Spring Boot Metrics?以集成的可自動配置的監控系統包括:

  1. AppOptics:是一種云原生的應用性能監控和可觀測性平臺,提供了對應用程序性能的深入洞察,包括指標、日志和追蹤等功能。可幫助用戶快速識別和解決應用中的性能問題,支持多種編程語言和框架,能與常見的云服務和容器平臺集成。

  2. Atlas:一般指 Apache Atlas,它主要用于數據治理,提供了數據目錄、數據分類、數據血緣等功能,幫助組織管理和理解其數據資產,不是傳統意義上的系統性能監控系統,但可輔助在數據層面進行監控和管理。

  3. Datadog:是一款功能強大的云監控和分析平臺,可收集和分析來自各種來源的指標、日志和追蹤數據,支持大量的集成,包括服務器、容器、數據庫、云服務等。提供實時監控、告警、可視化等功能,幫助用戶全面了解應用和系統的運行狀況。

  4. Dynatrace:是一個全棧式的應用性能管理(APM)和數字化體驗管理(DEM)平臺,具有自動發現、深度監控和智能告警等功能。利用人工智能和機器學習技術,能夠自動識別問題的根本原因,提供端到端的性能可視性,覆蓋從基礎設施到應用程序的各個層面。

  5. Elastic:即 Elastic Stack(ELK Stack),包括 Elasticsearch、Logstash 和 Kibana 等組件。Elasticsearch 用于存儲和搜索數據,Logstash 用于收集和處理日志數據,Kibana 用于可視化展示數據,廣泛用于日志管理、監控和數據分析等場景,可實現對大量日志和指標數據的高效處理和可視化。

  6. Ganglia:是一款用于集群監控的工具,主要用于監控大規模集群系統的性能指標,如 CPU、內存、網絡等使用情況。具有良好的可擴展性和分布式架構,能實時收集和展示集群中各個節點的性能數據,幫助管理員了解集群的整體運行狀態。

  7. Graphite:是一個開源的時間序列數據存儲和可視化系統,專注于存儲和繪制指標數據的圖表。它接收各種來源的指標數據,將其存儲在數據庫中,并提供簡單但有效的可視化界面,用于查看指標的趨勢和變化,常與其他監控工具結合使用,用于數據的可視化展示。

  8. Humio:是一個基于云的日志管理和分析平臺,專注于提供快速、高效的日志搜索和分析功能。具有強大的查詢語言和實時分析能力,可幫助用戶從大量日志數據中快速提取有價值的信息,支持與多種數據源集成,適用于各種規模的企業。

  9. Influx:通常指 InfluxDB,是一個專門用于存儲和處理時間序列數據的數據庫,具有高性能、高可擴展性和易于使用的特點。常用于存儲監控數據、傳感器數據等時間序列數據,可與各種監控工具和可視化平臺集成,為數據分析和可視化提供支持。

  10. JMX(Java Management Extensions):是 Java 平臺的管理和監控規范,允許開發人員通過 Java API 來管理和監控 Java 應用程序、Java 虛擬機(JVM)以及相關的資源。它提供了一種標準的方式來暴露和訪問 Java 應用中的各種指標和管理功能,如內存使用、線程狀態等,可通過 JMX 客戶端工具進行連接和查看。

  11. KairosDB:是一個開源的時間序列數據庫,專門用于存儲和查詢大規模的時間序列數據,如監控指標數據。具有高性能、可擴展性和容錯性,支持多種數據存儲后端,能與多種監控和數據采集工具集成,為監控系統提供數據存儲和查詢支持。

  12. New Relic:是一款廣泛使用的應用性能監控(APM)工具,可提供對 Web 應用程序、移動應用程序和基礎設施的全面監控。它能自動收集各種性能指標,包括響應時間、吞吐量、錯誤率等,還提供代碼級別的分析,幫助開發人員快速定位性能瓶頸和問題所在。

  13. OTLP(OpenTelemetry Protocol):不是一個完整的監控系統,而是 OpenTelemetry 項目中的數據傳輸協議,用于在不同的可觀測性組件之間傳輸指標、日志和追蹤數據,確保數據在收集、處理和存儲過程中的一致性和兼容性,是實現可觀測性數據標準化傳輸的重要基礎。

  14. Prometheus:是一個開源的系統監控和告警工具包,以時間序列數據為核心,采用拉取式的數據收集方式,具有強大的查詢語言 PromQL,可方便地對監控數據進行查詢和分析。它有豐富的生態系統,包括各種 exporter 用于收集不同來源的數據,以及多種可視化工具和告警管理器。

  15. SignalFx:是一家提供云原生監控和可觀測性解決方案的公司,其平臺可收集和分析來自容器、微服務和云環境的各種指標、日志和追蹤數據。利用人工智能和機器學習技術進行異常檢測和問題診斷,提供智能告警和可視化功能,幫助用戶更好地管理復雜的云原生應用。

  16. Simple (in-memory):一般指簡單的內存監控方式或工具,通常是在應用程序內部使用簡單的內存數據結構來臨時存儲和管理監控數據,適用于一些對監控功能要求不高、規模較小的應用場景,優點是簡單易用、開銷小,但功能相對有限,不適合處理大量數據和復雜的監控需求。

  17. Stackdriver:是 Google Cloud Platform 提供的一套監控和診斷工具,可幫助用戶監控和管理在 Google Cloud 上運行的應用程序和基礎設施。提供了指標監控、日志管理、告警等功能,與 Google Cloud 的其他服務緊密集成,方便用戶在 Google Cloud 環境中進行統一的監控和管理。

  18. StatsD:是一個用于收集和匯總應用程序指標數據的工具,通常作為代理運行,接收來自應用程序的實時指標數據,如計數器、儀表盤、定時器等,并將其匯總后發送到后端的存儲和分析系統,如 Graphite、InfluxDB 等,常用于分布式系統中的監控數據收集,能減輕應用程序的監控數據處理負擔。

  19. Wavefront:是一個專注于大規模指標數據監控和分析的平臺,具有強大的可視化和告警功能,能處理大量的時間序列數據,提供對應用程序、基礎設施和業務指標的深入洞察。支持多種數據來源和集成,可幫助用戶快速發現和解決性能問題,優化系統性能。

度量指標支持

? ? ? ? Spring Boot 自動配置支持度量指標的自動注冊。在大多數情況下,默認提供合理的指標,可發布到任何受支持的監控系統。Spring Boot 支持的度量指標包括:

JVM 指標
  • 各種內存和緩沖池詳細信息

  • 垃圾收集相關統計數據

  • 線程利用率

  • 已加載和卸載的類的數量

  • JVM 版本信息

  • JIT 編譯時間

系統指標
  • CPU 指標

  • 文件描述符指標

  • 正常運行時間指標(應用程序運行的時間量和絕對啟動時間的固定值)

  • 可用磁盤空間

應用程序啟動指標
  • application.started.time:啟動應用程序所需的時間。

  • application.ready.time:應用程序準備好服務請求所需的時間。

logging Metrics:

????????自動配置可啟用 Logback 和 Log4J2 的事件指標。詳細信息以log4j2.events.logback.events.計量表名稱發布

任務執行和調度指標

????????自動配置可以檢測所有可用的ThreadPoolTaskExecutor ThreadPoolTaskScheduler 的 beans,只要底層ThreadPoolExecutor可用。指標由執行器的名稱標記,該名稱源自 bean 名稱。

JMS Metrics

? ? ? ? 自動配置可以對所有可用的JmsTemplate bean 和 @JmsListener注釋方法進行檢測。這將分別生成"jms.message.publish""jms.message.process"指標。

Spring MVC Metrics
  • 自動配置:自動對 Spring MVC 控制器和函數式處理器處理的所有請求進行檢測。
  • 指標命名:默認指標名為 http.server.requests,可通過 management.observations.http.server.requests.name 屬性自定義。
  • 標簽定制:通過提供繼承自 DefaultServerRequestObservationConvention@Bean 來添加默認標簽;通過提供實現 ServerRequestObservationConvention@Bean 來替換默認標簽。
  • 異常處理:默認情況下,Web 控制器中處理的異常不會記錄為請求指標標簽,應用可通過將處理的異常設置為請求屬性來記錄。
  • 請求過濾:通過提供實現 FilterRegistrationBean<ServerHttpObservationFilter>@Bean 來自定義請求過濾。
Spring WebFlux Metrics
  • 自動配置:自動對 Spring WebFlux 控制器和函數式處理器處理的所有請求進行檢測。

  • 指標命名:默認指標名和定制方式同 Spring MVC,即默認 http.server.requests,可通過 management.observations.http.server.requests.name 自定義。

  • 標簽定制:在 org.springframework.http.server.reactive.observation 包中,通過繼承 DefaultServerRequestObservationConvention 或實現 ServerRequestObservationConvention 來添加或替換默認標簽。

  • 異常處理:同 Spring MVC,控制器和處理函數中處理的異常默認不記錄為請求指標標簽,可通過設置請求屬性記錄。

Jersey Server Metrics
  • 自動配置:自動對 Jersey JAX - RS 實現處理的所有請求進行檢測。

  • 指標命名:默認指標名及定制方式與前兩者一致,即 http.server.requests,可通過 management.observations.http.server.requests.name 自定義。

  • 默認標簽:默認帶有 exception(處理請求時拋出異常的簡單類名)、method(請求方法)、outcome(基于響應狀態碼的請求結果)、status(響應的 HTTP 狀態碼)、uri(請求的 URI 模板)等標簽。

  • 標簽定制:通過提供實現 JerseyObservationConvention@Bean 來自定義標簽。

HTTP Client Metrics
  • 組件支持:Spring Boot Actuator 管理 RestTemplateWebClientRestClient 的檢測。

  • 實例創建:需注入自動配置的構建器創建實例,如 RestTemplateBuilder 用于 RestTemplateWebClient.Builder 用于 WebClientRestClient.Builder 用于 RestClient,也可手動應用 ObservationRestTemplateCustomizer 等定制器。

  • 指標命名:默認指標名為 http.client.requests,可通過 management.observations.http.client.requests.name 屬性自定義。

  • 標簽定制:對于 RestTemplateRestClient,提供實現 org.springframework.http.client.observation 包中 ClientRequestObservationConvention@Bean 來定制標簽;對于 WebClient,提供實現 org.springframework.web.reactive.function.client 包中 ClientRequestObservationConvention@Bean 來定制。

Tomcat Metrics
  • 自動配置:僅在啟用 MBean 注冊表時自動對 Tomcat 進行檢測,默認 MBean 注冊表禁用,可通過設置 server.tomcat.mbeanregistry.enabled=true 啟用。

  • 指標命名:Tomcat 指標以 tomcat. 為前綴發布。

Cache Metrics
  • 自動配置:啟動時自動對所有可用的緩存實例進行檢測,指標前綴為 cache

  • 支持庫:支持 Cache2kCaffeineHazelcast、任何符合 JCache(JSR - 107)的實現以及 Redis。

  • 標簽設置:指標按緩存名稱和從 Bean 名稱派生的 CacheManager 名稱進行標記。

DataSource Metrics
  • jdbc.connections 相關指標:對所有可用的 DataSource 對象進行檢測,生成表示連接池當前活動、空閑、允許的最大和最小連接數的指標。

  • hikaricp 前綴指標:針對 Hikari 數據源,會以 hikaricp 為前綴暴露特定指標,每個指標通過連接池名稱標記。

  • 標記方式:指標通過基于 bean 名稱計算出的 DataSource 名稱進行標記。

Hibernate Metrics
  • 指標條件:當org.hibernate.orm:hibernate - micrometer在類路徑中,且啟用了統計功能(hibernate.generate_statistics=true)時,對所有可用的 Hibernate EntityManagerFactory 實例進行檢測。

  • 指標名稱:指標名稱為hibernate,并通過從 bean 名稱派生的 EntityManagerFactory 名稱進行標記。

Spring Data Repository Metrics
  • 指標名稱:默認指標名稱為spring.data.repository.invocations,可通過management.metrics.data.repository.metric - name屬性自定義。

  • 標記信息

    • repository:源 Repository 的簡單類名。

    • method:被調用的 Repository 方法名稱。

    • state:結果狀態,包括 SUCCESS、ERROR、CANCELED 或 RUNNING。

    • exception:調用拋出的異常的簡單類名。

RabbitMQ Metrics

????????對所有可用的 RabbitMQ 連接工廠進行檢測,指標名稱為rabbitmq

Spring Integration Metrics

????????只要MeterRegistry bean 可用,Spring Integration 就會自動提供 Micrometer 支持,指標發布在spring.integration下。

Kafka Metrics

????????自動配置分別為消費者工廠和生產者工廠注冊MicrometerConsumerListenerMicrometerProducerListener,還為StreamsBuilderFactoryBean注冊KafkaStreamsMicrometerListener

MongoDB Metrics
  • MongoDB Command Metrics:為發送到底層 MongoDB 驅動程序的每個命令創建名為mongodb.driver.commands的定時器指標。

  • 標記信息

    • command:發出的命令名稱。

    • cluster.id:命令發送到的集群的標識符。

    • server.address:命令發送到的服務器地址。

    • status:命令的結果,SUCCESS 或 FAILED。

  • MongoDB Connection Pool Metrics

  • 指標內容

    • mongodb.driver.pool.size:報告連接池的當前大小,包括空閑和正在使用的連接。

    • mongodb.driver.pool.checkedout:報告當前正在使用的連接數。

    • mongodb.driver.pool.waitqueuesize:報告連接池等待隊列的當前大小。

  • 標記信息

    • cluster.id:連接池對應的集群的標識符。

    • server.address:連接池對應的服務器地址。

Jetty Metrics
  • Jetty’s ThreadPool 指標:通過 Micrometer’s JettyServerThreadPoolMetrics 綁定。

  • Jetty’s Connector instances 指標:通過 Micrometer’s JettyConnectionMetrics 綁定,當server.ssl.enabled=true時,還會通過 Micrometer’s JettySslHandshakeMetrics 綁定。

Redis Metrics

????????為自動配置的LettuceConnectionFactory注冊MicrometerCommandLatencyRecorder

注冊自定義指標

????????要注冊自定義指標,請注入MeterRegistry到您的組件中:

@Component
public class MyBean {private final Dictionary dictionary;public MyBean(MeterRegistry registry) {this.dictionary = Dictionary.load();registry.gauge("dictionary.size", Tags.empty(), this.dictionary.getWords().size());}}

????????如果您的指標依賴于其他 bean,我們建議您使用MeterBinder來注冊它們:

public class MyMeterBinderConfiguration {@Beanpublic MeterBinder queueSize(Queue queue) {return (registry) -> Gauge.builder("queueSize", queue::size).register(registry);}}
  • 使用MeterBinder確保設置了正確的依賴關系,并且在檢索度量值時bean可用。如果您發現在組件或應用程序之間重復檢測一組度量,則MeterBinder實現也可能很有用。

  • 默認情況下,所有MeterBinder bean 的指標都會自動綁定到 Spring 管理的MeterRegistry

自定義單個指標

? ? ? ? 我們可以使用MeterFilter去重新定義某個指標,例如:

@Configuration(proxyBeanMethods = false)
public class MyMetricsFilterConfiguration {@Beanpublic MeterFilter renameRegionTagMeterFilter() {return MeterFilter.renameTag("com.example", "mytag.region", "mytag.area");}}

Meterics?Endpoint

  • Spring Boot 提供了一個指標端點,可用于診斷檢查應用程序收集的指標,但該端點默認不可用,必須進行配置。

  • 查看可用指標列表:訪問/actuator/metrics可以顯示可用的指標名稱列表。

  • 查看特定指標信息:可以通過提供指標名稱作為選擇器來深入查看特定指標的信息,例如/actuator/metrics/jvm.memory.max。這里使用的名稱應該與代碼中使用的名稱匹配,而不是為了適應監控系統命名約定而規范化后的名稱。比如在 Prometheus 中jvm.memory.max可能會按照蛇形命名法顯示為jvm_memory_max,但在指標端點中檢查指標時,仍應使用jvm.memory.max作為選擇器。

  • 通過標簽進一步篩選指標:還可以在 URL 末尾添加任意數量的tag=KEY:VALUE查詢參數來按維度深入查看某個指標,例如/actuator/metrics/jvm.memory.max?tag=area:nonheap。報告的測量結果是所有與指標名稱和已應用的任何標簽匹配的指標統計信息的總和。

    • 如上述示例中,返回的 “Value” 統計信息是堆的 “Code Cache”“Compressed Class Space” 和 “Metaspace” 區域的最大內存占用之和。

    • 如果只想查看 “Metaspace” 的最大大小,可以添加額外的tag=id:Metaspace,即/actuator/metrics/jvm.memory.max?tag=area:nonheap&tag=id:Metaspace

Tracing

? ? ? ? Spring Boot 為以下兩種追蹤器工具提供自動配置:

基于 OpenTelemetry 的追蹤器

????????Spring Boot 能夠對基于 OpenTelemetry 的追蹤器進行自動配置,并且這些追蹤器可以與 Zipkin、Wavefront 或者 OTLP(OpenTelemetry Protocol)集成。

  • Zipkin:是一個開源的分布式追蹤系統,可幫助收集和分析微服務架構中請求的追蹤數據,了解請求在各個服務間的調用鏈路和性能情況。

  • Wavefront:是一個專注于大規模指標數據監控和分析的平臺,支持對追蹤數據的處理和可視化,能幫助用戶深入洞察分布式系統的性能。

  • OTLP:是 OpenTelemetry 項目中的數據傳輸協議,確保追蹤數據在不同組件間高效、可靠地傳輸。

基于 OpenZipkin Brave 的追蹤器

????????Spring Boot 也支持對基于 OpenZipkin Brave 的追蹤器進行自動配置,這些追蹤器可以與 Zipkin 或 Wavefront 集成。OpenZipkin Brave 是一個輕量級的分布式追蹤庫,用于在應用程序中實現追蹤功能,與上述的 Zipkin 和 Wavefront 集成后,可將追蹤數據發送到相應的平臺進行分析和展示。

追蹤器實現

????????由于 Micrometer Tracer 支持多種跟蹤器實現,因此 Spring Boot 可以實現多種依賴項組合。

所有跟蹤器實現都需要org.springframework.boot:spring-boot-starter-actuator依賴。

OpenTelemetry 與 Zipkin

????????使用 OpenTelemetry 進行跟蹤并向 Zipkin 報告需要以下依賴項:

  • io.micrometer:micrometer-tracing-bridge-otel- 將 Micrometer Observation API 連接至 OpenTelemetry。

  • io.opentelemetry:opentelemetry-exporter-zipkin- 向 Zipkin 報告跟蹤。

????????使用management.zipkin.tracing.*配置屬性來配置向 Zipkin 的報告。

OpenTelemetry 與 Wavefront

????????使用 OpenTelemetry 進行跟蹤并向 Wavefront 報告需要以下依賴項:

  • io.micrometer:micrometer-tracing-bridge-otel- 將 Micrometer Observation API 連接至 OpenTelemetry。

  • io.micrometer:micrometer-tracing-reporter-wavefront- 向 Wavefront 報告跟蹤。

????????使用management.wavefront.*配置屬性來配置向 Wavefront 的報告。

使用 OTLP 的 OpenTelemetry

????????使用 OpenTelemetry 進行跟蹤并使用 OTLP 進行報告需要以下依賴項:

  • io.micrometer:micrometer-tracing-bridge-otel- 將 Micrometer Observation API 連接至 OpenTelemetry。

  • io.opentelemetry:opentelemetry-exporter-otlp- 將跟蹤報告給可以接受 OTLP 的收集器。

????????使用management.otlp.tracing.*配置屬性來使用 OTLP 配置報告。

OpenZipkin Brave 與 Zipkin

????????使用 OpenZipkin Brave 進行跟蹤并向 Zipkin 報告需要以下依賴項:

  • io.micrometer:micrometer-tracing-bridge-brave- 將 Micrometer Observation API 連接至 Brave。

  • io.zipkin.reporter2:zipkin-reporter-brave- 向 Zipkin 報告跟蹤。

????????使用management.zipkin.tracing.*配置屬性來配置向 Zipkin 的報告。

OpenZipkin Brave 與 Wavefront

????????使用 OpenZipkin Brave 進行跟蹤并向 Wavefront 報告需要以下依賴項:

  • io.micrometer:micrometer-tracing-bridge-brave- 將 Micrometer Observation API 連接至 Brave。

  • io.micrometer:micrometer-tracing-reporter-wavefront- 向 Wavefront 報告跟蹤。

????????使用management.wavefront.*配置屬性來配置向 Wavefront 的報告。

學習拓展

Micrometer 官網

Micrometer Overview :: Micrometer

Observability for JDBC

Datasource Micrometer Reference Documentation

openTelemetry

OpenTelemetry

參考文獻

Enabling Production-ready Features :: Spring Boot

Monitoring and Management over JMX :: Spring Boot

Observability :: Spring Boot

Loggers :: Spring Boot

Metrics :: Spring Boot

Tracing :: Spring Boot

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/67282.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67282.shtml
英文地址,請注明出處:http://en.pswp.cn/web/67282.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

QModbusTCPClient 服務器斷開引起的程序崩潰

最近使用QModbusTCPClient 與一套設備通信&#xff0c;有一個QTimer頻繁的通過讀取設備寄存器。程序運行良好&#xff0c;但是有個問題&#xff1a;正常進行中設備斷電了&#xff0c;整個程序都會崩潰。解決過程如下&#xff1a; 1.失敗方案一 在QModbusTCPClient的errorOccu…

vue3底層原理和性能優化

Vue 3 在底層原理和性能優化方面做了許多改進&#xff0c;以下是一些主要的優化點和原理&#xff1a; 1. 虛擬 DOM 的改進 靜態樹提升&#xff1a;Vue 3 能夠檢測到靜態組件&#xff08;即不依賴響應式數據的組件&#xff09;并將其提升到渲染函數之外&#xff0c;從而減少不…

開發環境搭建-3:配置 JavaScript 開發環境 (fnm+ nodejs + pnpm + nrm)

在 WSL 環境中配置&#xff1a;WSL2 (2.3.26.0) Oracle Linux 8.7 官方鏡像 node 官網&#xff1a;https://nodejs.org/zh-cn/download 點擊【下載】&#xff0c;選擇想要的 node 版本、操作系統、node 版本管理器、npm包管理器 根據下面代碼提示依次執行對應代碼即可 基本概…

npm:升級自身時報錯:EBADENGINE

具體報錯信息如下&#xff1a; 1.原因分析 npm和當前的node版本不兼容。 // 當前實際版本: Actual: {"npm":"10.2.4","node":"v20.11.0"}可以通過官網文檔查看與自己 node 版本 兼容的是哪一版本的npm&#xff0c;相對應進行更新即可…

WPS數據分析000005

目錄 一、數據錄入技巧 二、一維表 三、填充柄 向下自動填充 自動填充選項 日期填充 星期自定義 自定義序列 1-10000序列 四、智能填充 五、數據有效性 出錯警告 輸入信息 下拉列表 六、記錄單 七、導入數據 ?編輯 八、查找錄入 會員功能 Xlookup函數 VL…

【ProxyBroker】用Python打破網絡限制的利器

ProxyBroker 1. 什么是ProxyBroker2. ProxyBroker的功能3. ProxyBroker的優勢4. ProxyBroker的使用方法5. ProxyBroker的應用場景6.結語項目地址&#xff1a; 1. 什么是ProxyBroker ProxyBroker是一個開源工具&#xff0c;它可以異步地從多個來源找到公共代理&#xff0c;并同…

翼星求生服務器搭建【Icarus Dedicated Server For Linux】

一、前言 本次搭建的服務器為Steam平臺一款名為Icarus的沙盒、生存、建造游戲,由于官方只提供了Windows版本服務器導致很多熱愛Linux的小伙伴無法釋懷,眾所周知Linux才是專業服務器的唯一準則。雖然Github上已經有大佬制作了容器版本但是容終究不夠完美,畢竟容器無法與原生L…

機器學習-線性回歸(參數估計之經驗風險最小化)

給定一組包含 &#x1d441; 個訓練樣本的訓練集 我們希望能夠 學習一個最優的線性回歸的模型參數 &#x1d498; 現在我們來介紹線性回歸的一種模型參數估計方法&#xff1a;經驗風險最小化。 我們前面說過&#xff0c;對于標簽 &#x1d466; 和模型輸出都為連續的實數值&…

前部分知識復習02

一、物體的屏幕UV坐標 float2 ScreenUV i.pos.xy / _ScreenParams.xy; 二、抓取屏幕圖像 GrabPass{" _A "} //_A為貼圖圖像名稱 之后需在Pass中聲明該貼圖才能在Pass中引用此貼圖 三、屏幕抓取并制作熱效應代碼 Shader"unity/HeatDistort 07" {Pr…

YOLOv8:目標檢測與實時應用的前沿探索

隨著深度學習和計算機視覺技術的迅速發展&#xff0c;目標檢測&#xff08;Object Detection&#xff09;一直是研究熱點。YOLO&#xff08;You Only Look Once&#xff09;系列模型作為業界廣受關注的目標檢測框架&#xff0c;憑借其高效、實時的特點&#xff0c;一直迭代更新…

【MQ】探索 Kafka

高性能 消息的順序性、順序寫磁盤 零拷貝 RocketMQ內部主要是使用基于mmap實現的零拷貝&#xff0c;用來讀寫文件 減少cpu的拷貝次數和上下文切換次數&#xff0c;實現文件的高效讀寫操作 Kafka 零拷貝 Kafka 使用到了 mmap 和 sendfile 的方式來實現零拷貝。分別對應 Jav…

VMware 和本機(Win10)安裝共享文件

1. 安裝VM-tools, sudo apt-get install open-vm-tools-desktop -y 2. VMware->設置-> 選項中啟動共享文件夾. 3. 本機設置共享文件夾(文件目錄為data)&#xff0c;右鍵屬性設置: VMware&#xff0c; Other Locations->Computer->mnt->data 即可。 ps: 還有個…

2025美賽MCM數學建模A題:《石頭臺階的“記憶”:如何用數學揭開歷史的足跡》(全網最全思路+模型)

?個人主頁歡迎您的訪問 ?期待您的三連 ? 《石頭臺階的“記憶”&#xff1a;如何用數學揭開歷史的足跡》 目錄 《石頭臺階的“記憶”&#xff1a;如何用數學揭開歷史的足跡》 ?摘要? ?引言? 1. 引言的結構 2. 撰寫步驟 &#xff08;1&#xff09;研究背景 &#…

SpringBoot-Vue整合百度地圖

文章目錄 一、Spring Boot整合百度地圖的步驟1. 申請百度地圖的AK值2. 創建實體類3. 創建Controller層4. 前端集成百度地圖4.1 在Vue項目中安裝百度地圖Vue組件庫4.2 在Vue項目中引入百度地圖API4.3 創建地圖組件 二、實現功能說明1. 前端部分&#xff1a;2. 后端部分&#xff…

Baklib如何優化企業知識管理實現全面數字化升級與協同創新

內容概要 Baklib 作為企業知識管理的重要工具&#xff0c;提供了一個集成化的知識中臺&#xff0c;幫助企業在數字化轉型過程中更高效地管理和利用其知識資產。在現代企業中&#xff0c;知識的管理和應用顯得尤為重要&#xff0c;因為優秀的知識管理能夠直接影響到組織的決策效…

機器學習day4

自定義數據集 使用pytorch框架實現邏輯回歸并保存模型&#xff0c;然后保存模型后再加載模型進行預測 import numpy as np import torch import torch.nn as nn import torch.optim as optimizer import matplotlib.pyplot as pltclass1_points np.array([[2.1, 1.8],[1.9, 2…

天道無極:論文明興衰中的規律自覺與文化覺醒

宇宙洪荒,星河輪轉,人類文明在浩渺時空中不過滄海一粟。當我們剖開青銅器上的饕餮紋,凝視量子計算機的硅基瞳孔,會發現所有文明興衰的背后都躍動著同一組密碼——對規律的認知與駕馭程度,構成了文明存續的底層邏輯。從兩河流域的楔形文字到華爾街的電子屏幕,從雅典學院的…

Linux解決輸入法卡死問題

說明&#xff1a;在Ubuntu系統中&#xff0c;如果您需要重啟輸入法服務&#xff08;比如fcitx或ibus&#xff09;&#xff0c;您可以按照以下步驟操作。這些步驟適用于大多數基于Ubuntu的發行版&#xff0c;例如Ubuntu、Linux Mint等。 一、重啟Fcitx輸入法服務 1、使用Ctrl …

區間選點(貪心)

給定 NN 個閉區間 [ai,bi][ai,bi]&#xff0c;請你在數軸上選擇盡量少的點&#xff0c;使得每個區間內至少包含一個選出的點。 輸出選擇的點的最小數量。 位于區間端點上的點也算作區間內。 輸入格式 第一行包含整數 NN&#xff0c;表示區間數。 接下來 NN 行&#xff0c;…

WPF基礎 | WPF 常用控件實戰:Button、TextBox 等的基礎應用

WPF基礎 | WPF 常用控件實戰&#xff1a;Button、TextBox 等的基礎應用 一、前言二、Button 控件基礎2.1 Button 的基本定義與顯示2.2 按鈕樣式設置2.3 按鈕大小與布局 三、Button 的交互功能3.1 點擊事件處理3.2 鼠標懸停與離開效果3.3 按鈕禁用與啟用 四、TextBox 控件基礎4.…