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