從 Agent 到 Meter 系統(tǒng)的完整鏈路)
可觀測性APM鏈路追蹤指標(biāo)監(jiān)控日志分析微服務(wù)【免費(fèi)下載鏈接】skywalkingAPM, Application Performance Monitoring System項(xiàng)目地址https://gitcode.com/gh_mirrors/sk/skywalking點(diǎn)擊查看免費(fèi)下載本文以 SkyWalking 官方文檔 micrometer-observations.md 為核心骨架系統(tǒng)講解如何在 SkyWalking OAP 后端啟用 MicroMeter Observation 指標(biāo)采集從 Java Agent 側(cè)集成 MicroMeter 1.10 Observation API到后端開啟 meter receiver、激活spring-micrometer.yaml分析規(guī)則再到 Dashboard 展示與自定義指標(biāo)擴(kuò)展。讀完本文你將掌握一條可復(fù)現(xiàn)的 Spring 應(yīng)用指標(biāo) → SkyWalking Meter 系統(tǒng) 完整配置路徑并能基于倉庫源碼理解每條 MAL 規(guī)則背后的換算邏輯。背景MicroMeter Observation 與 SkyWalking Meter 系統(tǒng)MicroMeter Observation 是 Micrometer 項(xiàng)目的一部分提供了一整套 Observation API觀測 API用于統(tǒng)一描述 HTTP 請(qǐng)求、數(shù)據(jù)庫連接、JVM 運(yùn)行時(shí)等可觀測數(shù)據(jù)。SkyWalking 集成了 MicroMeter 1.10 的 API使其上報(bào)的指標(biāo)可以直接匯入 SkyWalking 后端的 Meter 系統(tǒng)。Meter 系統(tǒng)是 SkyWalking OAP 內(nèi)部的指標(biāo)流式處理系統(tǒng)專門負(fù)責(zé)處理與分析聚合后的指標(biāo)數(shù)據(jù)來自 OpenTelemetry、Zabbix、Prometheus 以及 SkyWalking Meter API 等。它提供了一門函數(shù)式分析語言MALMeter Analysis Language用戶可以用 MAL 表達(dá)式對(duì)原始 meter 數(shù)據(jù)進(jìn)行過濾、聚合、重命名與下采樣最終落庫并供查詢使用。spring-micrometer.yaml正是用 MAL 編寫的、面向 Spring 應(yīng)用指標(biāo)的分析規(guī)則文件。需要注意的是接入分為 Agent 側(cè)與后端 OAP 側(cè)兩個(gè)環(huán)節(jié)Agent 側(cè)負(fù)責(zé)把 Spring 應(yīng)用內(nèi) Micrometer Observation 產(chǎn)生的指標(biāo)通過 Java Agent 上報(bào)出去后端側(cè)負(fù)責(zé)接收、解析并存儲(chǔ)這些指標(biāo)。本文聚焦后端Agent 側(cè)的詳細(xì)配置請(qǐng)參閱 Java Agent 的 Observations 文檔。第一步在后端啟用 Meter Receiver在 SkyWalking 后端配置文件application.yml默認(rèn)位于$SKYWALKING_BASE_DIR/config/application.yml中確保 meter receiver 模塊處于啟用狀態(tài)receiver-meter: selector: ${SW_RECEIVER_METER:default} default:該配置段對(duì)應(yīng)源碼中的 MeterReceiverModule 與 MeterReceiverProvider。selector支持通過環(huán)境變量SW_RECEIVER_METER覆蓋默認(rèn)值為default即啟用內(nèi)置實(shí)現(xiàn)。Meter 協(xié)議接收器在 MeterServiceHandler 中處理 Agent 上報(bào)的指標(biāo)數(shù)據(jù)并在收集到的數(shù)據(jù)樣本上自動(dòng)附加service與instance兩個(gè)標(biāo)簽其值取自 SkyWalking Agent 中定義的 service / service instance 名稱用于標(biāo)識(shí)指標(biāo)歸屬詳見 backend-meter.md 的 Report Meter Telemetry Data 一節(jié)。如果指標(biāo)通過 Kafka 中轉(zhuǎn)還需要在application.yml中啟用 Kafka Fetcherkafka-fetcher: selector: ${SW_KAFKA_FETCHER:default} default: bootstrapServers: ${SW_KAFKA_FETCHER_SERVERS:localhost:9092}第二步激活 spring-micrometer 分析規(guī)則SkyWalking 后端已經(jīng)內(nèi)置了 Spring Micrometer 的 meter 配置文件即 spring-micrometer.yaml。它位于 OAP 的$CLASSPATH/meter-analyzer-config目錄下。重要新增的 meter-analyzer-config 文件默認(rèn)不會(huì)生效必須通過agent-analyzer模塊下的meterAnalyzerActiveFiles顯式激活。在application.yml中加入agent-analyzer: selector: ${SW_AGENT_ANALYZER:default} default: meterAnalyzerActiveFiles: ${SW_METER_ANALYZER_ACTIVE_FILES:spring-micrometer}參數(shù)說明meterAnalyzerActiveFiles需要激活的規(guī)則文件名不帶擴(kuò)展名多個(gè)文件用英文逗號(hào)分隔例如spring-micrometer,datasource,threadpoolSW_METER_ANALYZER_ACTIVE_FILES對(duì)應(yīng)的環(huán)境變量覆蓋項(xiàng)默認(rèn)值為spring-micrometer。這里有一個(gè)值得注意的約束meterAnalyzerActiveFiles中列出的每個(gè)條目都必須在$CLASSPATH/meter-analyzer-config下存在同名規(guī)則文件若某條目找不到匹配文件OAP 將啟動(dòng)失敗在早期版本中這類條目會(huì)被靜默忽略。另外配置文件在 OAP 啟動(dòng)時(shí)加載如果新配置格式不合法OAP 同樣會(huì)啟動(dòng)失敗。從版本演進(jìn)看該規(guī)則文件的默認(rèn)啟用狀態(tài)經(jīng)歷過調(diào)整在 8.7.0 中 Spring sleuth meter analyzer 曾被默認(rèn)禁用見 changes-8.7.0.md9.0.0 起spring-sleuth重新被列入meterAnalyzerActiveFiles默認(rèn)值見 changes-9.0.0.md9.4.0 中規(guī)則文件由spring-sleuth.yaml更名為spring-micrometer.yaml見 changes-9.4.0.md。因此使用當(dāng)前倉庫版本時(shí)默認(rèn)配置即指向spring-micrometer。第三步理解內(nèi)置規(guī)則文件 spring-micrometer.yaml當(dāng)前倉庫內(nèi)置的 spring-micrometer.yaml 是理解整套 Micrometer 指標(biāo)映射的關(guān)鍵。文件首部兩行定義了全局行為expSuffix: instance([service], [instance], Layer.GENERAL) metricPrefix: meterexpSuffix附加到本文件所有 MAL 表達(dá)式末尾。這里調(diào)用了 MAL 的instance([svc_label1, svc_label2...], [ins_label1, ins_label2...], Layer)函數(shù)即從指標(biāo)標(biāo)簽中提取service與instance兩個(gè)標(biāo)簽分別作為服務(wù)級(jí)與實(shí)例級(jí)標(biāo)簽并聲明該指標(biāo)歸屬Layer.GENERAL通用服務(wù)實(shí)例層。這正是 backend-meter.md 中所說的接收器附加的service/instance標(biāo)簽在此被 MAL 提升為指標(biāo)的服務(wù)、實(shí)例層級(jí)信息metricPrefix插入到指標(biāo)名前的固定前綴最終存儲(chǔ)的指標(biāo)名為metricPrefix_raw_metric_name例如原始指標(biāo)http_server_requests_count會(huì)以meter_http_server_requests_count落庫并出現(xiàn)在 UI 中。metricsRules中共有 22 條規(guī)則將 Agent 上報(bào)的原始 Micrometer 指標(biāo)名映射為經(jīng)過處理后的 Meter 指標(biāo)。完整對(duì)照關(guān)系如下規(guī)則 name落庫名MAL 表達(dá)式語義http_server_requests_counthttp_server_requests_count.increase(PT1M)HTTP 請(qǐng)求計(jì)數(shù)按分鐘窗口計(jì)算增量http_server_requests_durationhttp_server_requests_sum.increase(PT1M)HTTP 請(qǐng)求耗時(shí)求和按分鐘窗口計(jì)算增量jdbc_connections_activejdbc_connections_activeJDBC 活躍連接數(shù)瞬時(shí)值jdbc_connections_idlejdbc_connections_idleJDBC 空閑連接數(shù)瞬時(shí)值jdbc_connections_maxjdbc_connections_maxJDBC 最大連接數(shù)瞬時(shí)值jvm_classes_loadedjvm_classes_loaded已加載類數(shù)量瞬時(shí)值jvm_classes_unloadedjvm_classes_unloaded.increase(PT1M)卸載類數(shù)量按分鐘窗口計(jì)算增量jvm_gc_pause_countjvm_gc_pause_count.increase(PT1M)GC 暫停次數(shù)按分鐘窗口計(jì)算增量jvm_gc_pause_durationjvm_gc_pause_sum.increase(PT1M)GC 暫停耗時(shí)求和按分鐘窗口計(jì)算增量jvm_memory_committedjvm_memory_committedJVM 內(nèi)存 committed 大小瞬時(shí)值jvm_memory_maxjvm_memory_maxJVM 內(nèi)存 max 大小瞬時(shí)值jvm_memory_usedjvm_memory_usedJVM 內(nèi)存 used 大小瞬時(shí)值jvm_threads_daemonjvm_threads_daemon守護(hù)線程數(shù)瞬時(shí)值jvm_threads_livejvm_threads_live存活線程數(shù)瞬時(shí)值jvm_threads_peakjvm_threads_peak峰值線程數(shù)瞬時(shí)值process_cpu_usageprocess_cpu_usage.multiply(100)進(jìn)程 CPU 使用率 ×100轉(zhuǎn)為百分比展示system_cpu_usagesystem_cpu_usage.multiply(100)系統(tǒng) CPU 使用率 ×100轉(zhuǎn)為百分比展示system_load_average_1msystem_load_average_1m系統(tǒng) 1 分鐘平均負(fù)載瞬時(shí)值tomcat_sessions_active_currenttomcat_sessions_active_currentTomcat 當(dāng)前活躍會(huì)話數(shù)瞬時(shí)值tomcat_sessions_active_maxtomcat_sessions_active_maxTomcat 歷史最大活躍會(huì)話數(shù)瞬時(shí)值tomcat_sessions_rejectedtomcat_sessions_rejected.increase(PT1M)Tomcat 拒絕會(huì)話數(shù)按分鐘窗口計(jì)算增量process_files_maxprocess_files_max進(jìn)程可打開文件數(shù)上限瞬時(shí)值process_files_openprocess_files_open進(jìn)程當(dāng)前打開文件數(shù)瞬時(shí)值從這些表達(dá)式可以看出三個(gè)典型的 MAL 用法模式函數(shù)語義詳見 mal.md 的 Function 一節(jié)瞬時(shí)量直通對(duì) gauge 類指標(biāo)連接數(shù)、內(nèi)存、線程數(shù)、CPU 使用率等不做聚合原樣透傳增量計(jì)算對(duì) counter 類指標(biāo)請(qǐng)求數(shù)、請(qǐng)求耗時(shí)、GC 次數(shù)、會(huì)話拒絕數(shù)等使用increase(PT1M)按 ISO-8601 時(shí)長格式PT1M1 分鐘計(jì)算窗口內(nèi)的增量量綱換算對(duì) CPU 使用率使用multiply(100)把 0~1 的小數(shù)換算為 0~100 的百分比數(shù)值便于 Dashboard 直接展示。倉庫中 spring-micrometer.data.yaml 是這套規(guī)則的可執(zhí)行測試用例它向 22 個(gè)原始指標(biāo)輸入value: 100.0的樣本攜帶instance: test-instance標(biāo)簽并斷言輸出結(jié)果。例如meter_http_server_requests_count的期望值為50.0驗(yàn)證了increase(PT1M)的增量計(jì)算meter_process_cpu_usage的期望值為10000.0驗(yàn)證了multiply(100)的量綱換算所有結(jié)果實(shí)體的 scope 均為SERVICE_INSTANCE、layer 為GENERAL印證了expSuffix中instance(...)的層級(jí)聲明。這組測試可以作為你驗(yàn)證自定義規(guī)則文件的模板。支持的指標(biāo)類型Application / System / JVMMicrometer Observations 接入后支持三類信息這也是spring-micrometer.yaml中 22 條規(guī)則對(duì)應(yīng)的數(shù)據(jù)來源Application應(yīng)用層HTTP 請(qǐng)求計(jì)數(shù)與耗時(shí)http_server_requests_*、JDBC 最大/空閑/活躍連接數(shù)jdbc_connections_*、Tomcat 會(huì)話活躍/拒絕數(shù)tomcat_sessions_*System系統(tǒng)層系統(tǒng)/進(jìn)程 CPU 使用率system_cpu_usage/process_cpu_usage、操作系統(tǒng)系統(tǒng)負(fù)載system_load_average_1m、操作系統(tǒng)進(jìn)程文件數(shù)process_files_*JVM運(yùn)行時(shí)層GC 暫停次數(shù)與耗時(shí)jvm_gc_pause_*、內(nèi)存 max/used/committed 大小jvm_memory_*、線程峰值/存活/守護(hù)數(shù)量jvm_threads_*、類加載/卸載數(shù)量jvm_classes_*。這些指標(biāo)由 Java Agent 側(cè)的 Micrometer Observation toolkit 自動(dòng)采集上報(bào)無需在應(yīng)用代碼中手工埋點(diǎn)覆蓋了 Spring 應(yīng)用日常巡檢最核心的運(yùn)行時(shí)維度。Dashboard 展示與自定義指標(biāo)SkyWalking 默認(rèn)在通用服務(wù)實(shí)例general service instance下提供了Spring Sleuth Dashboard其中包含 Spring Sleuth 默認(rèn)提供的上述指標(biāo)無需額外配置即可在 UI 中查看。如果你在應(yīng)用中添加了自定義指標(biāo)并在后端配置了對(duì)應(yīng)的 meter 規(guī)則文件則需要按 自定義 Dashboard 文檔 的說明將新指標(biāo)手工加入 Dashboard。自定義 meter 的完整流程Agent 側(cè)在應(yīng)用中通過 Micrometer Observation API 定義并上報(bào)自定義指標(biāo)Agent 側(cè)的 API 用法請(qǐng)參見 Java Agent Micrometer 文檔后端規(guī)則文件在meter-analyzer-config目錄$CLASSPATH/meter-analyzer-config下新建或修改 YAML 規(guī)則文件。規(guī)則文件的頂層結(jié)構(gòu)與字段如下括號(hào)表示可選參數(shù)# 過濾指標(biāo)僅滿足此閉包條件的指標(biāo)才會(huì)進(jìn)入下方 metricsRules filter: closure # 示例: { tags - tags.job_name vm-monitoring } # expPrefix 在指標(biāo)執(zhí)行其他函數(shù)之前執(zhí)行 expPrefix: string # expSuffix 追加到本文件所有表達(dá)式的末尾 expSuffix: string # 將 metricPrefix 插入指標(biāo)名: metricPrefix_raw_metric_name metricPrefix: string # 可選內(nèi)聯(lián)聲明自定義 layer詳見 mal.md layerDefinitions: - name: string ordinal: int normal: bool # 指標(biāo)規(guī)則允許對(duì)查詢進(jìn)行重算 metricsRules: # 規(guī)則名稱與前綴 metricPrefix_ 組合后作為存儲(chǔ)中的 index/table 名 # 帶前綴的名稱也可在 UIDashboard/Template/Item/Metrics中引用 - name: string # MAL 表達(dá)式可直接使用自定義指標(biāo)采集的原始名稱 exp: string激活在application.yml的agent-analyzer.default.meterAnalyzerActiveFiles中加入自定義規(guī)則文件名不帶擴(kuò)展名多個(gè)用逗號(hào)分隔并確保$CLASSPATH/meter-analyzer-config下存在同名文件Dashboard按 自定義 Dashboard 文檔 將落庫后的指標(biāo)形如meter_name加入 Dashboard 的 Metrics 項(xiàng)中。關(guān)于rate/irate/increase的使用建議MAL 后端雖然支持rate、irate、increase等函數(shù)但官方建議優(yōu)先在客戶端Agent 側(cè)完成這類計(jì)算原因有二后端計(jì)算需要為這些函數(shù)建立緩存來推算數(shù)值一旦 Agent 重連到另一臺(tái) OAP 實(shí)例rate 計(jì)算的時(shí)間窗口會(huì)被打斷導(dǎo)致結(jié)果不準(zhǔn)確。因此自定義指標(biāo)時(shí)應(yīng)優(yōu)先在 Micrometer 側(cè)完成速率/增量計(jì)算后端只負(fù)責(zé)透傳或做輕量變換。進(jìn)階規(guī)則的運(yùn)行時(shí)熱更新與調(diào)試Meter-analyzer-config 規(guī)則與otel-rules走同一條規(guī)則管線因此支持在OAP 運(yùn)行期間動(dòng)態(tài)新增、覆蓋、停用規(guī)則或?qū)⒁?guī)則恢復(fù)為內(nèi)置內(nèi)容全程無需重啟 OAP。相關(guān) API 的目錄名統(tǒng)一為meter-analyzer-config運(yùn)行時(shí)規(guī)則熱更新見 Runtime Rule Hot-Update APIMAL DSL 調(diào)試規(guī)則還可以掛載到采樣調(diào)試會(huì)話上查看 MAL 表達(dá)式每個(gè)階段的中間結(jié)果見 DSL Debug API — MAL。這意味著spring-micrometer.yaml里的任意規(guī)則都可以在不停機(jī)的情況下臨時(shí)調(diào)整例如修改increase窗口、追加multiply換算、變更落庫名驗(yàn)證通過后再固化為正式配置。總結(jié)Micrometer Observations 接入的完整鏈路可以歸納為Agent 側(cè)Micrometer 1.10 Observation API 采集 Spring 運(yùn)行時(shí)指標(biāo)→Meter 協(xié)議上報(bào)receiver-meter接收并附加service/instance標(biāo)簽→MAL 規(guī)則分析spring-micrometer.yaml由meterAnalyzerActiveFiles激活完成增量計(jì)算、量綱換算與層級(jí)聲明→落庫與展示meter_name指標(biāo)在 Spring Sleuth Dashboard 中呈現(xiàn)。核心配置只需三處receiver-meter模塊開啟、meterAnalyzerActiveFiles激活spring-micrometer、Dashboard 引用指標(biāo)。在此基礎(chǔ)上你可以復(fù)用 spring-micrometer.yaml 的 22 條規(guī)則模式與 spring-micrometer.data.yaml 的測試范式快速擴(kuò)展出自定義指標(biāo)的采集與驗(yàn)證閉環(huán)。贊分享可觀測性APM鏈路追蹤指標(biāo)監(jiān)控日志分析微服務(wù)【免費(fèi)下載鏈接】skywalkingAPM, Application Performance Monitoring System項(xiàng)目地址https://gitcode.com/gh_mirrors/sk/skywalking點(diǎn)擊查看免費(fèi)下載相關(guān)推薦SkyWalking OAP Zabbix Receiver 接入指南將 Zabbix Agent 指標(biāo)納入 Meter System 統(tǒng)一監(jiān)控SkyWalking OAP Zabbix Receiver 接入指南將 Zabbix Agent 指標(biāo)納入 Meter System 統(tǒng)一監(jiān)控 本文圍繞 A可觀測性后端微服務(wù)云原生SkyWalking OAP Meter Receiver 完整指南從 Meter 協(xié)議接入到 MAL 規(guī)則配置與運(yùn)行時(shí)熱更新SkyWalking OAP Meter Receiver 完整指南從 Meter 協(xié)議接入到 MAL 規(guī)則配置與運(yùn)行時(shí)熱更新 導(dǎo)讀 Meter Receiv可觀測性APM鏈路追蹤指標(biāo)監(jiān)控日志分析微服務(wù)SkyWalking Meter API 詳解原生指標(biāo)上報(bào)協(xié)議、采集模式與 OAP 處理鏈路SkyWalking Meter API 詳解原生指標(biāo)上報(bào)協(xié)議、采集模式與 OAP 處理鏈路 本篇技術(shù)指南圍繞 Apache SkyWalking 的 Met可觀測性APM鏈路追蹤指標(biāo)監(jiān)控日志分析微服務(wù)創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考