微服務:指標和健康監控
在執行或多或少真實的軟體系統時,可以(並且應該)收集大量不同的指標,特別是根據微服務架構原則設計的。在這種情況下,收集和儲存此類狀態資料的過程通常稱為監控。
原始碼:https ://github.com/dtimchenko/custom-microservices-project
基礎設施監控:
基礎設施元件和層的監控在某種程度上是一個已解決的問題。從開源的角度來看,Nagios、Zabbix、Riemann、OpenNMS和Icinga等知名品牌在此佔據主導地位。
應用程式監控:
基礎設施當然屬於“必須監控”的類別,但監控的應用程式方面可以說更有趣,更接近主題。
普羅米修斯
Prometheus是一個開源系統監控和警報工具包,最初在SoundCloud構建。自 2012 年成立以來,許多公司和組織都採用了 Prometheus,該專案擁有非常活躍的開發者和使用者社群。它現在是一個獨立的開源專案,獨立於任何公司進行維護。為了強調這一點,並明確專案的治理結構,Prometheus 於 2016 年加入雲原生計算基金會,成為繼Kubernetes之後的第二個託管專案。
Prometheus 將其指標收集並儲存為時間序列資料,即指標資訊與記錄時的時間戳以及稱為標籤的可選鍵值對一起儲存。
普羅米修斯的主要特點是:
- 具有由度量名稱和鍵/值對標識的時間序列資料的多維資料模型
- PromQL,一種利用這種維度的靈活查詢語言
- 不依賴分散式儲存;單個伺服器節點是自治的
- 時間序列收集透過 HTTP 上的拉模型進行
- 透過中間閘道器支援推送時間序列
- 透過服務發現或靜態配置發現目標
- 多種圖形模式和儀表板支援
AlertManager是一個獨立的二進位制程式,用於處理Prometheus伺服器例項傳送的警報。由於JCG Car Rentals平臺選擇 Prometheus作為指標和監控平臺,因此管理警報也成為合乎邏輯的選擇。
基本上,有幾個步驟可以遵循。該過程包括配置和執行AlertManager例項,配置Prometheus與該AlertManager例項通訊,最後在Prometheus中定義警報規則。
Grafana
Grafana 是一個資料庫分析和監控工具。它允許您建立對您很重要的關鍵指標的儀表板視覺化。Grafana 擁有一個蓬勃發展的愛好者社群,他們共享可重用的儀表板。
Grafana 支援大量資料來源。而且,由於該應用程式是開源的,因此您可以確定,一旦釋出了新資料來源,就會有人為其新增支援。Grafana 最常見的用例是顯示時間序列資料,例如記憶體或 CPU 隨著時間的推移以及當前使用情況資料。
您可以自己託管 Grafana,使用 AWS 中的託管服務或讓建立者為您託管它。Grafana 在您的計算機或伺服器上作為程式執行,您可以透過瀏覽器訪問該介面。您的儀表板可以將您的資料顯示為單個數字、圖形、圖表,甚至是熱圖。
Grafana 透過為您提供分析和監控資料庫所需的工具來幫助您識別和解決效能問題。它不僅可以幫助解決問題,還可以透過使用警報幫助您主動進行維護。Grafana 是開源的,與廣泛的資料庫相容,並且擁有一個蓬勃發展的社群。
Micrometer
Micrometer 為最流行的監控系統的檢測客戶端提供了一個簡單的外觀,允許您檢測基於 JVM 的應用程式程式碼,而無需供應商鎖定。想想 SLF4J,但對於指標。
Micrometer 為計時器、儀表、計數器、分佈摘要和長任務計時器提供了與供應商無關的介面,具有維度資料模型,當與維度監控系統配合使用時,允許有效訪問特定命名的度量,並具有向下鑽取的能力跨越其維度。
作為一個儀表門面,Micrometer 允許您使用具有供應商中立介面的維度度量來儀表程式碼,並在最後一步決定監控系統。使用 Micrometer 檢測您的核心庫程式碼允許將庫包含在將指標傳送到不同後端的應用程式中。
應用程式遙測和微服務
對於開發團隊來說,捕獲遙測資料是瞭解應用程式內部情況的關鍵。您需要構建遙測基礎設施來捕獲和處理資料。遙測處理基礎設施的兩個主要功能是:
- 收集和公開遙測資料——需要對 BMC 微服務進行檢測以公開標準和自定義指標
- 處理和儲存遙測資料——BMC 應用程式開發環境可以攝取大量指標資料(包括對 Prometheus 格式的支援),同時以時序格式對其進行豐富和儲存,以便對其進行處理和進一步視覺化
開始
讓我們從一個簡單的兩步過程開始,以整合 Prometheus 和 Micrometer。
新增micrometer-registry-prometheus登錄檔。
<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency> |
宣告一個 bean 型別MeterRegistryCustomizer<PrometheusMeterRegistry>.
這將生成一個新的端點—— /actuator/prometheus
@Configuration public class MicrometerConfig { @Value("${spring.application.name}") private String appName; @Bean public MeterRegistryCustomizer<PrometheusMeterRegistry> configureMetricsRegistry() { return registry -> registry.config().commonTags("appName", appName); } @Bean public TimedAspect timedAspect(MeterRegistry meterRegistry){ return new TimedAspect(meterRegistry); } } |
@Timed註解將用於監控方法時間執行。
@PostMapping( consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE}, produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE}) @Timed(value = "registerCustomer.time", description = "time to register a new customer") public ResponseEntity<Customer> registerCustomer(@RequestBody @Valid CustomerRegistrationRequest customerRequest){ log.info("new customer registration request {}", customerRequest); return ResponseEntity.ok(customerService.registerCustomer(customerRequest)); } |
要執行Prometheus和Grafana,我們將使用 docker-compose。
prometheus: container_name: prometheus image: prom/prometheus:v2.35.0 volumes: - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml ports: - 9090:9090 depends_on: - customer - fraud - apigw networks: - monitoring grafana: container_name: grafana image: grafana/grafana:8.5.1 ports: - 3000:3000 environment: - GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_ADMIN_PASSWORD=admin networks: - monitoring depends_on: - prometheus |
Prometheus 是一個時間序列資料庫,它透過 HTTP 定期拉取我們的度量資料來儲存它。要正確配置它,我們需要提供prometheus.yaml配置:
global: scrape_interval: 5s evaluation_interval: 5s scrape_configs: - job_name: 'apigw' metrics_path: '/actuator/prometheus' static_configs: - targets: ['apigw:8082'] - job_name: 'customer' metrics_path: '/actuator/prometheus' static_configs: - targets: [ 'customer:8011' ] - job_name: 'fraud' metrics_path: '/actuator/prometheus' static_configs: - targets: [ 'fraud:8012' ] |
更多點選標題
原始碼:https ://github.com/dtimchenko/custom-microservices-project
相關文章
- 基於 prometheus 的微服務指標監控Prometheus微服務指標
- PostgreSQL實時健康監控大屏-低頻指標SQL指標
- MYSQL和SQLServer效能監控指標MySqlServer指標
- 微服務監控微服務
- Orabbix監控指標指標
- EMQ 監控指標MQ指標
- mongodb 監控指標MongoDB指標
- 微服務監控探索微服務
- Java程式監控指標Java指標
- PostgreSQL實時健康監控大屏-高頻指標(伺服器)SQL指標伺服器
- Skywalking微服務監控分析微服務
- 使用Prometheus搞定微服務監控Prometheus微服務
- 系統監控&JVM監控指標資料查詢JVM指標
- 【系統設計】指標監控和告警系統指標
- 運維監控指標彙總運維指標
- go 服務監控指標(metric)上報open-falconGo指標
- 微服務SpringCloud之熔斷監控Hystrix Dashboard和Turbine微服務SpringGCCloud
- go-kit微服務:API監控Go微服務API
- beta版 tomcat 應用監控指標Tomcat指標
- 中介軟體IIS監控指標、配置和Windbg除錯分析指標除錯
- .Net Core服務監控報警指標上報Prometheus+Grafana指標PrometheusGrafana
- 微服務架構之「 監控系統 」微服務架構
- 微服務架構之「 呼叫鏈監控 」微服務架構
- 分散式架構的監控與指標分散式架構指標
- 04、MySQL Case-MySQL常用監控指標MySql指標
- 如何高效利用 Grafana 監控分析 TiDB 指標GrafanaTiDB指標
- 【JVM實戰系列】「監控調優體系」實戰開發arthas-spring-boot-starter監控你的微服務是否健康JVMSpringboot微服務
- go-kit 微服務 服務監控 (prometheus 實現)Go微服務Prometheus
- 使用Prometheus監控Linux系統各項指標PrometheusLinux指標
- RestCloud監控平臺,專為微服務API打造的實時監控中心RESTCloud微服務API
- 微服務架構下的監控系統設計(一)——指標資料的採集展示 UCloud雲端計算微服務架構指標Cloud
- springcloud 微服務配置監控端點 hystrix.streamSpringGCCloud微服務
- Java微服務監控及與普羅米整合Java微服務
- 實戰| 配置DataDog監控Apache Hudi應用指標Apache指標
- upptime:使用GitHub Actions監控你的網站健康監控Github網站
- Trampoline視覺化監控你的Spring Boot微服務視覺化Spring Boot微服務
- 愛奇藝微服務監控的探索與實踐微服務
- OpenTelemetry 實戰:從零實現應用指標監控指標