服務(wù)監(jiān)控:Actuator + Prometheus + Grafana
服務(wù)監(jiān)控Actuator Prometheus Grafana線上服務(wù)就像一輛行駛中的汽車——沒有儀表盤你不知道油量、不知道速度、不知道發(fā)動機溫度等真拋錨了才發(fā)現(xiàn)問題那就晚了。一、為什么需要監(jiān)控線上服務(wù)跑著跑著突然卡了、內(nèi)存滿了、響應(yīng)慢了——如果沒監(jiān)控你只能靠用戶投訴來發(fā)現(xiàn)問題。被動救火永遠慢半拍。監(jiān)控的核心價值線上問題無感知→提前預(yù)警CPU飆到90%就告警而不是等服務(wù)掛了才知道性能瓶頸定位哪個接口慢慢在哪是GC停頓還是數(shù)據(jù)庫查詢?nèi)萘恳?guī)劃QPS趨勢分析什么時候該加機器、加多少數(shù)據(jù)說話故障復(fù)盤出問題后回溯監(jiān)控曲線快速定位根因完整的監(jiān)控體系分三層指標監(jiān)控Metrics→日志收集Logging→鏈路追蹤Tracing即所謂的可觀測性三支柱。本文聚焦指標監(jiān)控。二、SpringBoot ActuatorActuator是SpringBoot自帶的監(jiān)控模塊提供了一系列HTTP端點開箱即用。2.1 引入依賴dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-actuator/artifactId/dependency2.2 核心端點一覽端點路徑說明health/actuator/health應(yīng)用健康狀態(tài)探活用info/actuator/info應(yīng)用基本信息metrics/actuator/metrics各類指標數(shù)據(jù)loggers/actuator/loggers日志級別查看與動態(tài)修改env/actuator/env環(huán)境變量配置threaddump/actuator/threaddump線程轉(zhuǎn)儲信息heapdump/actuator/heapdump堆內(nèi)存轉(zhuǎn)儲文件下載2.3 端點安全配置默認只暴露/health需要手動開啟其他端點的Web訪問management:endpoints:web:exposure:include:*# 暴露所有端點生產(chǎn)環(huán)境按需選擇exclude:env,beans# 排除敏感端點base-path:/actuator# 基礎(chǔ)路徑endpoint:health:show-details:always# 顯示健康詳情默認NEVER不顯示shutdown:enabled:false# 禁止遠程關(guān)機千萬別開訪問/actuator/health返回示例{status:UP,components:{db:{status:UP,details:{database:MySQL}},diskSpace:{status:UP,details:{total:500107862016,free:198656831488}},ping:{status:UP}}}三、Micrometer — 監(jiān)控門面Actuator本身的指標格式不夠通用Micrometer作為監(jiān)控門面類似SLF4J之于日志將指標數(shù)據(jù)適配為不同監(jiān)控系統(tǒng)的格式。dependencygroupIdio.micrometer/groupIdartifactIdmicrometer-registry-prometheus/artifactId/dependency引入后訪問/actuator/prometheus即可看到Prometheus格式的指標文本# HELP jvm_memory_used_bytes The amount of used memory # TYPE jvm_memory_used_bytes gauge jvm_memory_used_bytes{areaheap,idG1 Eden Space} 2.5165824E7 jvm_memory_used_bytes{areaheap,idG1 Survivor Space} 1048576.0 # HELP http_server_requests_seconds HTTP請求耗時 # TYPE http_server_requests_seconds summary http_server_requests_seconds_count{methodGET,status200,uri/api/user/{id}} 1523 http_server_requests_seconds_sum{methodGET,status200,uri/api/user/{id}} 12.345四、Prometheus — 時序數(shù)據(jù)庫Prometheus是CNCF旗下的開源監(jiān)控系統(tǒng)采用Pull模式主動從目標服務(wù)抓取指標數(shù)據(jù)。4.1 核心概念時序數(shù)據(jù)每個指標按時間戳存儲形成時間序列Pull模式Prometheus主動去拉取數(shù)據(jù)而非被推送PromQL專用查詢語言靈活聚合分析指標4.2 配置抓取目標# prometheus.ymlglobal:scrape_interval:15s# 每15秒抓取一次scrape_configs:-job_name:springboot-appmetrics_path:/actuator/prometheusstatic_configs:-targets:[localhost:8080]labels:application:my-appenv:dev4.3 常用PromQL查詢# HTTP請求QPS每秒請求數(shù) rate(http_server_requests_seconds_count[1m]) # 接口平均響應(yīng)時間 rate(http_server_requests_seconds_sum[1m]) / rate(http_server_requests_seconds_count[1m]) # JVM堆內(nèi)存使用率 jvm_memory_used_bytes{areaheap} / jvm_memory_max_bytes{areaheap} * 100五、Grafana — 可視化儀表盤Grafana是一個開源的數(shù)據(jù)可視化平臺支持多種數(shù)據(jù)源配合Prometheus做指標展示再合適不過。5.1 配置流程添加數(shù)據(jù)源Settings → Data Sources → Add Prometheus填寫地址http://localhost:9090導(dǎo)入儀表盤Dashboards → Import輸入模板ID或上傳JSON常用模板ID4701— JVM Micrometer監(jiān)控面板12900— SpringBoot 2.1 Statistics11378— Node Exporter服務(wù)器監(jiān)控5.2 儀表盤核心面板一個完整的SpringBoot監(jiān)控面板通常包含面板指標說明JVM內(nèi)存heap/non-heap used/max堆/非堆內(nèi)存使用情況JVM線程threads_live/daemon/peak活躍線程數(shù)GC統(tǒng)計gc_pause_secondsGC停頓時間和頻率HTTP請求QPS/響應(yīng)時間/錯誤率接口性能指標CPU使用process_cpu_usage進程CPU占用六、監(jiān)控指標分類6.1 JVM層面內(nèi)存堆/非堆使用量、各內(nèi)存區(qū)使用詳情線程活躍線程數(shù)、守護線程數(shù)、線程狀態(tài)分布GCGC次數(shù)、GC耗時、各代GC統(tǒng)計6.2 應(yīng)用層面HTTP請求QPS、響應(yīng)時間分布、錯誤率線程池活躍線程數(shù)、隊列積壓數(shù)、拒絕任務(wù)數(shù)數(shù)據(jù)庫連接池活躍連接數(shù)、等待線程數(shù)6.3 自定義業(yè)務(wù)指標通過Micrometer的MeterRegistry注冊自定義指標ComponentpublicclassOrderMetrics{privatefinalCounterorderCreateCounter;privatefinalCounterorderFailCounter;privatefinalGaugeorderPendingGauge;publicOrderMetrics(MeterRegistryregistry,OrderServiceorderService){// Counter只增不減的計數(shù)器this.orderCreateCounterCounter.builder(order.create.total).description(訂單創(chuàng)建總數(shù)).tag(type,all).register(registry);this.orderFailCounterCounter.builder(order.create.fail).description(訂單創(chuàng)建失敗數(shù)).register(registry);// Gauge瞬時值this.orderPendingGaugeGauge.builder(order.pending.count,()-orderService.getPendingCount()).description(待處理訂單數(shù)).register(registry);}publicvoidincrementCreate(){orderCreateCounter.increment();}publicvoidincrementFail(){orderFailCounter.increment();}}// Timer耗時統(tǒng)計ServicepublicclassPaymentService{AutowiredprivateMeterRegistryregistry;publicvoidpay(Orderorder){Timer.SamplesampleTimer.start(registry);try{// 支付邏輯doPay(order);}finally{sample.stop(Timer.builder(payment.duration).description(支付耗時).tag(channel,order.getChannel()).register(registry));}}}三種核心指標類型類型說明場景Counter只增不減請求總數(shù)、錯誤總數(shù)Gauge可增可減的瞬時值隊列長度、內(nèi)存使用量Timer耗時統(tǒng)計接口響應(yīng)時間、方法執(zhí)行時間七、完整搭建流程1. SpringBoot應(yīng)用引入actuator micrometer-prometheus 2. 配置management.endpoints暴露prometheus端點 3. 啟動Prometheus配置scrape_configs抓取應(yīng)用指標 4. 啟動Grafana添加Prometheus數(shù)據(jù)源 5. 導(dǎo)入JVM儀表盤模板ID: 4701 6. 創(chuàng)建自定義業(yè)務(wù)監(jiān)控面板 7. 配置告警規(guī)則Alertmanager告警規(guī)則示例# alert_rules.ymlgroups:-name:springboot-alertsrules:-alert:HighErrorRateexpr:rate(http_server_requests_seconds_count{status~5..}[5m])0.1for:2mlabels:severity:criticalannotations:summary:接口錯誤率過高description:{{ $labels.uri }} 5xx錯誤率超過10%-alert:HighMemoryUsageexpr:jvm_memory_used_bytes{areaheap}/ jvm_memory_max_bytes{areaheap}0.85for:5mlabels:severity:warningannotations:summary:JVM堆內(nèi)存使用率超過85%Actuator采集指標Prometheus存儲和查詢Grafana展示和告警——三件套配合起來線上服務(wù)的健康狀況就盡在掌握了。這套監(jiān)控體系不需要寫復(fù)雜的代碼主要是配置工作但帶來的運維價值是巨大的。

相關(guān)新聞

維修工程師的示波器實戰(zhàn):02 探頭地線——示波器最大的“坑”

維修工程師的示波器實戰(zhàn):02 探頭地線——示波器最大的“坑”

第二篇:探頭地線——示波器最大的“坑” ——那根不起眼的小地線,可能比你測的信號還重要 很多工程師第一次用示波器時,都會經(jīng)歷這樣一個“驚魂”時刻。 某食品廠包裝線,伺服偶發(fā)報警。年輕工程師判斷是編碼器信號受干擾,便拿出示波器認真測量。波形一出來,所有人都倒…

2026/7/31 0:14:40 閱讀更多
HART協(xié)議詳解:05 HART現(xiàn)場通信實戰(zhàn)

HART協(xié)議詳解:05 HART現(xiàn)場通信實戰(zhàn)

第五季 HART現(xiàn)場通信實戰(zhàn) ——從USB-HART Modem抓包到工程診斷:讓協(xié)議知識變成維修能力 各位工業(yè)現(xiàn)場的工程師朋友們,大家好! 經(jīng)過前四季的系統(tǒng)學習,我們已經(jīng)構(gòu)建了HART協(xié)議的完整理論框架: 第一季:六層生命模型與本質(zhì)認知 第二季:物理層4–20mA與FSK魔法 第三季:數(shù)…

2026/7/31 0:14:40 閱讀更多
基于8051單片機的HRTOS雙任務(wù)LED應(yīng)用實例

基于8051單片機的HRTOS雙任務(wù)LED應(yīng)用實例

1. 前言傳統(tǒng)8051裸機開發(fā)中,當程序功能逐漸增加時,通常需要在主循環(huán)中不斷判斷各種狀態(tài)。例如:while(1) {if(flag1)task1();if(flag2)task2(); }當任務(wù)數(shù)量增加后,代碼維護難度逐漸提升。RTOS通過任務(wù)調(diào)度機制,可以將不…

2026/7/31 3:34:54 閱讀更多
ABB工業(yè)機器人RAPID編程實戰(zhàn):從架構(gòu)設(shè)計到焊接應(yīng)用

ABB工業(yè)機器人RAPID編程實戰(zhàn):從架構(gòu)設(shè)計到焊接應(yīng)用

1. 項目概述:從“會動”到“會干活”的工業(yè)機器人 提到工業(yè)機器人,很多人腦海里浮現(xiàn)的是汽車生產(chǎn)線上那些揮舞著機械臂、精準焊接或搬運的“鋼鐵俠”。但要讓這些價值不菲的設(shè)備真正“會干活”,核心就在于程序。ABB作為全球工業(yè)機器人領(lǐng)域的巨…

2026/7/31 3:34:54 閱讀更多
關(guān)于流批一體架構(gòu)的思考

關(guān)于流批一體架構(gòu)的思考

1. 流批一體平臺的主要作用數(shù)據(jù)采集:從各種異構(gòu)數(shù)據(jù)源(如數(shù)據(jù)庫、文件、消息隊列等)中實時抽取數(shù)據(jù),包括增量和全量抽取。數(shù)據(jù)轉(zhuǎn)換:對抽取的數(shù)據(jù)進行清洗、轉(zhuǎn)換和處理,以滿足目標系統(tǒng)的要求。它提供了一系列…

2026/7/31 3:34:54 閱讀更多
ERP生產(chǎn)單附件功能實現(xiàn):數(shù)據(jù)庫設(shè)計到前后端集成完整方案

ERP生產(chǎn)單附件功能實現(xiàn):數(shù)據(jù)庫設(shè)計到前后端集成完整方案

如果你正在使用ERP系統(tǒng)管理生產(chǎn)流程,可能會遇到這樣的困擾:生產(chǎn)單上只有文字描述,工人需要反復(fù)核對圖紙和工藝文件,或者質(zhì)檢人員無法快速查看產(chǎn)品標準圖片。這種信息割裂不僅影響效率,還容易導(dǎo)致生產(chǎn)錯誤。 傳統(tǒng)ERP的…

2026/7/31 3:34:54 閱讀更多
HART協(xié)議詳解:05 HART現(xiàn)場通信實戰(zhàn)

HART協(xié)議詳解:05 HART現(xiàn)場通信實戰(zhàn)

第五季 HART現(xiàn)場通信實戰(zhàn) ——從USB-HART Modem抓包到工程診斷:讓協(xié)議知識變成維修能力 各位工業(yè)現(xiàn)場的工程師朋友們,大家好! 經(jīng)過前四季的系統(tǒng)學習,我們已經(jīng)構(gòu)建了HART協(xié)議的完整理論框架: 第一季:六層生命模型與本質(zhì)認知 第二季:物理層4–20mA與FSK魔法 第三季:數(shù)…

2026/7/31 0:14:40 閱讀更多
維修工程師的示波器實戰(zhàn):02 探頭地線——示波器最大的“坑”

維修工程師的示波器實戰(zhàn):02 探頭地線——示波器最大的“坑”

第二篇:探頭地線——示波器最大的“坑” ——那根不起眼的小地線,可能比你測的信號還重要 很多工程師第一次用示波器時,都會經(jīng)歷這樣一個“驚魂”時刻。 某食品廠包裝線,伺服偶發(fā)報警。年輕工程師判斷是編碼器信號受干擾,便拿出示波器認真測量。波形一出來,所有人都倒…

2026/7/31 0:14:40 閱讀更多