成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Serverless 可觀測性終極實戰:鏈路追蹤 + 彈性監控一網打盡!

云計算 云原生
Serverless 是云原生時代的重要演進方向,而其可觀測性體系則是穩定性保障的核心。通過 SkyWalking 和 Prometheus,我們可以為 Spring Boot Serverless 應用構建一套“日志 + 指標 + 鏈路”一體化的 Observability 方案,既具實時性,也兼具彈性與可插拔能力。

在 Serverless 架構興起的背景下,微服務與函數計算的組合為開發帶來極大便利。但與此同時,可觀測性也面臨全新的挑戰——無固定主機、調用鏈斷裂、動態伸縮頻繁、上下文信息丟失……傳統的監控與追蹤方式難以滿足需求。

本文將帶你從底層實踐出發,結合 Spring Boot 3、SkyWalking 與 Prometheus,打造一套指標、日志、追蹤一體化的 Serverless Observability 方案。

Serverless 應用的監控與可視化挑戰

傳統服務部署在固定主機上,可通過 Agent、端口探針等方式收集指標與日志。但 Serverless 最大的特征就是:

  • 無固定節點容器啟動與銷毀隨調用頻次動態波動;
  • 鏈路不完整執行時間短暫,調用鏈常因網關或異步中斷;
  • 可觀測性工具失效常規的主機監控、Agent 插樁難以落地。

這使得 Serverless 更加依賴代碼層可觀測性埋點,尤其是指標采集(Metrics)、日志聚合(Logs)與鏈路追蹤(Traces)的三位一體能力。

Spring Boot 3 × SkyWalking / Prometheus 集成指南

我們以國產優秀的可觀測性解決方案 SkyWalking(鏈路追蹤)與 Prometheus(指標采集)為例,為 Spring Boot 3 Serverless 應用建立可觀測性能力。

項目結構建議

src/
├── main/
│   ├── java/com/icoderoad/
│   │   ├── ServerlessApplication.java
│   │   ├── controller/
│   │   │   ├── TraceController.java
│   │   │   └── MetricsController.java
│   │   ├── config/
│   │   │   └── SkyWalkingContextConfig.java
│   │   └── metrics/
│   │       └── CustomMetrics.java
│   └── resources/
│       ├── application.yml
│       └── logback-spring.xml

完整代碼示例

啟動類

package com.icoderoad;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication
public class ServerlessApplication {
    public static void main(String[] args) {
        SpringApplication.run(ServerlessApplication.class, args);
    }
}

鏈路追蹤控制器:TraceController

package com.icoderoad.controller;


import org.apache.skywalking.apm.toolkit.trace.TraceContext;
import org.slf4j.MDC;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RestController;


@RestController
public class TraceController {


    @GetMapping("/trace")
    public String trace(@RequestHeader(value = "sw8", required = false) String sw8) {
        String traceId = TraceContext.traceId();
        MDC.put("traceId", traceId);
        return "當前 TraceId: " + traceId;
    }
}

指標采集控制器:MetricsController

package com.icoderoad.controller;


import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
public class MetricsController {


    private final Counter requestCounter;


    public MetricsController(MeterRegistry meterRegistry) {
        this.requestCounter = meterRegistry.counter("custom_requests_total", "endpoint", "metrics");
    }


    @GetMapping("/metrics")
    public String metrics() {
        requestCounter.increment();
        return "請求已記錄";
    }
}

自定義指標注冊:CustomMetrics

package com.icoderoad.metrics;


import io.micrometer.core.instrument.MeterRegistry;
import jakarta.annotation.PostConstruct;
import org.springframework.stereotype.Component;


@Component
public class CustomMetrics {


    private final MeterRegistry meterRegistry;


    public CustomMetrics(MeterRegistry meterRegistry) {
        this.meterRegistry = meterRegistry;
    }


    @PostConstruct
    public void init() {
        meterRegistry.gauge("custom_gauge_metric", 100);
    }
}

SkyWalking Trace ID 注入配置

package com.icoderoad.config;


import org.apache.skywalking.apm.toolkit.trace.TraceContext;
import org.slf4j.MDC;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerInterceptor;


import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;


@Configuration
public class SkyWalkingContextConfig implements HandlerInterceptor {


    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        String traceId = TraceContext.traceId();
        MDC.put("traceId", traceId);
        return true;
    }
}

Prometheus 配置(application.yml)

management:
  endpoints:
    web:
      exposure:
        include: prometheus
  metrics:
    export:
      prometheus:
        enabled: true

日志 TraceID 輸出格式(logback-spring.xml)

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - [%X{traceId}] %msg%n</pattern>
    </encoder>
  </appender>


  <root level="INFO">
    <appender-ref ref="console"/>
  </root>
</configuration>

部署與驗證

SkyWalking 部署

推薦使用官方 Docker 鏡像:

docker run -d--name skywalking-oap \
-eSW_STORAGE=elasticsearch \
-eSW_STORAGE_ES_CLUSTER_NODES=127.0.0.1:9200 \
-p11800:11800 -p12800:12800 \
  apache/skywalking-oap-server

docker run -d--name skywalking-ui \
-eSW_OAP_ADDRESS=http://host.docker.internal:12800 \
-p8081:8080 \
  apache/skywalking-ui

應用中使用官方 Java Agent:

-javaagent:/path/to/skywalking-agent/skywalking-agent.jar \
-Dskywalking.agent.service_name=spring-serverless \
-Dskywalking.collector.backend_service=localhost:11800

構建完備的 Serverless Observability 方案

Serverless 可觀測性最佳實踐:

類型

技術棧

功能

Traces

SkyWalking

分布式鏈路追蹤

Metrics

Prometheus + Micrometer

自定義指標采集與導出

Logs

Logback + MDC

統一日志記錄帶 traceId

你可以通過 SkyWalking UI 查看完整調用鏈,通過 Prometheus + Grafana 構建監控面板,通過日志聚合(ELK)實現全局日志檢索。

總結

Serverless 是云原生時代的重要演進方向,而其可觀測性體系則是穩定性保障的核心。通過 SkyWalking 和 Prometheus,我們可以為 Spring Boot Serverless 應用構建一套“日志 + 指標 + 鏈路”一體化的 Observability 方案,既具實時性,也兼具彈性與可插拔能力。


責任編輯:武曉燕 來源: 路條編程
相關推薦

2024-04-26 00:25:52

Rust語法生命周期

2011-12-02 09:22:23

網絡管理NetQos

2021-08-05 06:54:05

流程控制default

2024-02-27 10:11:36

前端CSS@規則

2023-04-03 08:30:54

項目源碼操作流程

2021-10-11 07:55:42

瀏覽器語法Webpack

2022-09-15 10:47:19

數據庫事務工作單元

2021-10-26 16:15:26

Spring 事務隔離性

2013-08-02 10:52:10

Android UI控件

2024-06-12 00:00:05

2024-08-26 10:01:50

2024-04-07 08:41:34

2010-08-25 01:59:00

2013-10-16 14:18:02

工具圖像處理

2023-04-06 09:08:41

BPM流程引擎

2020-10-19 06:43:53

Redis腳本原子

2009-04-02 10:17:00

交換機產品選購

2023-09-26 00:29:40

CSS布局標簽

2020-02-21 08:45:45

PythonWeb開發框架

2021-10-29 09:32:33

springboot 靜態變量項目
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久99精品久久久久久狂牛 | 亚洲精品久久区二区三区蜜桃臀 | 四虎成人免费视频 | 天天躁日日躁狠狠躁白人 | 91精品国产91久久久久游泳池 | 中文字幕一区二区三区精彩视频 | 亚洲一区国产精品 | 免费av一区二区三区 | 亚洲精品aⅴ | 国产精品资源在线 | 国产成人高清 | 亚洲一区二区免费视频 | 婷婷丁香激情 | 成人免费小视频 | 久久综合一区二区三区 | 亚洲成人免费 | 国产高清一区二区 | 91精品国产91久久久久久吃药 | 国产精品久久久久久久久 | 99久久精品视频免费 | 精品一二区 | 一区二区成人 | 国产人免费人成免费视频 | 欧美精品日韩 | 另类 综合 日韩 欧美 亚洲 | 成人在线播放 | 97视频久久 | 国产日韩久久久久69影院 | 成人在线精品视频 | 中国美女撒尿txxxxx视频 | 99热在线播放 | 亚洲国产一 | 欧美日韩精品在线一区 | 在线国产小视频 | 精品国产乱码久久久久久蜜退臀 | 亚洲首页 | 一区二区三区播放 | 中文字幕日韩欧美一区二区三区 | 一区二区成人 | 欧美日韩国产精品 | 久久久久av |