微服务监控与运维体系:构建可观测的 Java 微服务
基于 Java 的微服务可观测性体系构建方案,涵盖监控、日志与链路追踪三大支柱。通过 Prometheus 与 Grafana 实现指标采集与可视化告警,利用 EFK 栈完成分布式日志的集中管理与检索,并结合 SkyWalking 进行无侵入式链路追踪以定位性能瓶颈。文章提供了详细的组件选型对比、环境部署步骤、代码集成示例以及故障排查与性能优化的实战案例,旨在帮助开发者建立完善的微服务运维体系,保障系统稳定性。

基于 Java 的微服务可观测性体系构建方案,涵盖监控、日志与链路追踪三大支柱。通过 Prometheus 与 Grafana 实现指标采集与可视化告警,利用 EFK 栈完成分布式日志的集中管理与检索,并结合 SkyWalking 进行无侵入式链路追踪以定位性能瓶颈。文章提供了详细的组件选型对比、环境部署步骤、代码集成示例以及故障排查与性能优化的实战案例,旨在帮助开发者建立完善的微服务运维体系,保障系统稳定性。

💡 微服务架构下,系统被拆分为多个独立服务,部署在多台服务器或容器中,相比单体应用,运维复杂度呈指数级提升:
可观测性(Observability) 正是为解决这些问题而生,核心是通过收集系统的'信号'(指标、日志、链路),让系统的运行状态'可见',从而快速定位问题、优化性能、保障系统稳定。
可观测性的三大支柱:
一个完整的微服务可观测性体系需覆盖'数据采集→数据存储→数据分析→可视化→告警'全流程,架构如下:
┌─────────────────────────────────────────────────────────────────┐
│ 微服务集群(user-service/order-service/product-service 等) │
└─┬───────────────┬───────────────┬───────────────┬───────────────┘
│ │ │ │
┌─▼───────┐ ┌───▼───────┐ ┌───▼───────┐ ┌───▼───────┐
│指标采集 │ │日志采集 │ │链路采集 │ │健康检查 │
│(Prometheus)│ │(Filebeat)│ │(SkyWalking)│ │(Actuator)│
└─┬───────┘ └───┬───────┘ └───┬───────┘ └───┬───────┘
│ │ │ │
┌─▼───────────────▼───────────────▼───────────────▼───────┐
│ 数据存储层 │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Prometheus │ │Elasticsearch│ │ SkyWalking │ │
│ │(指标存储) │ │(日志存储) │ │(链路存储) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─┬───────────────┬───────────────┬───────────────┬─────────┘
│ │ │ │
┌─▼───────┐ ┌───▼───────┐ ┌───▼───────┐ ┌───▼───────┐
│Grafana │ │ Kibana │ │SkyWalking UI│ │ 告警系统 │
│(指标可视化)│ │(日志分析) │ │(链路分析) │ │(Email/钉钉)│
└─────────┘ └───────────┘ └───────────┘ └───────────┘
| 组件 | 作用 | 核心优势 |
|---|---|---|
| Prometheus | 指标采集、存储与查询 | 时序数据库优化、PromQL 查询灵活、原生支持告警 |
| Grafana | 指标可视化与仪表盘定制 | 支持多数据源、图表类型丰富、配置简单 |
| Filebeat | 日志采集与转发 | 轻量级、低资源消耗、支持日志结构化 |
| Elasticsearch | 日志存储与检索 | 全文检索高效、支持海量日志存储 |
| Kibana | 日志可视化与分析 | 检索功能强大、支持日志聚合分析 |
| SkyWalking | 链路追踪、服务依赖分析 | 无侵入式采集、支持多语言、性能损耗低 |
| Spring Boot Actuator | 微服务健康检查与指标暴露 | 与 Spring Boot 无缝整合、配置简单 |
| 工具 | 适用场景 | 优势 | 不足 |
|---|---|---|---|
| Prometheus | 微服务指标监控、时序数据存储 | 开源免费、查询灵活、告警能力强 | 不适合存储非时序数据、长期存储需结合 Thanos |
| Zabbix | 服务器、硬件监控 | 成熟稳定、支持多设备监控 | 微服务指标采集能力弱、定制化成本高 |
| InfluxDB | 时序数据存储与监控 | 写入性能高、支持高并发 | 生态不如 Prometheus 完善 |
💡 推荐:Prometheus + Grafana(微服务监控首选,生态完善、与 Spring Cloud 无缝整合)。
| 工具组合 | 适用场景 | 优势 | 不足 |
|---|---|---|---|
| ELK(Elasticsearch+Logstash+Kibana) | 海量日志收集、全文检索 | 功能强大、检索高效、可视化丰富 | Logstash 资源消耗高、部署复杂 |
| EFK(Elasticsearch+Filebeat+Kibana) | 海量日志收集、轻量级部署 | Filebeat 替代 Logstash,资源消耗低 | 日志处理能力弱于 Logstash |
| Loki(Prometheus 生态) | 日志与指标协同监控 | 存储成本低、与 Grafana 无缝整合 | 全文检索能力弱于 Elasticsearch |
💡 推荐:EFK(Elasticsearch + Filebeat + Kibana)(轻量级、高性能,满足大多数微服务日志需求)。
| 工具 | 适用场景 | 优势 | 不足 |
|---|---|---|---|
| SkyWalking | 微服务链路追踪、服务依赖分析 | 无侵入式、性能损耗低、支持多语言 | 生态不如 Jaeger 完善 |
| Jaeger | 分布式链路追踪(OpenTelemetry 兼容) | 开源免费、与 Kubernetes 整合好 | 对 Java 微服务的适配不如 SkyWalking |
| Zipkin | 简单链路追踪 | 部署简单、学习成本低 | 功能较基础、不支持复杂链路分析 |
💡 推荐:SkyWalking(Java 微服务首选,无侵入式采集、支持服务依赖图、性能指标与链路结合紧密)。
http_requests_total{method="GET",status="200"}),支持 4 种类型:
Spring Boot Actuator 提供了微服务的健康检查、指标暴露功能,Micrometer 则将 Actuator 的指标转换为 Prometheus 可识别的格式。
<!-- Spring Boot Actuator:健康检查与指标暴露 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- Micrometer:适配 Prometheus -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
management:
endpoints:
web:
exposure:
include: health,info,prometheus # 暴露的端点(prometheus 为指标端点)
base-path: /actuator # 端点基础路径(默认/actuator)
endpoint:
health:
show-details: always # 健康检查显示详细信息
metrics:
tags:
application: ${spring.application.name}# 为指标添加应用名称标签(便于区分不同服务)
export:
prometheus:
enabled: true# 启用 Prometheus 指标导出
# 自定义业务指标(可选)
business:
metrics:
order-count: 0
除了 Actuator 默认提供的 JVM、HTTP 指标外,实际开发中需监控业务指标(如订单创建数、支付成功率),可通过 Micrometer 自定义:
import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class BusinessMetrics {
// 订单创建计数器(Counter 类型,只增不减)
private final Counter orderCreateCounter;
// 注入 MeterRegistry,用于注册自定义指标
@Autowired
public BusinessMetrics(MeterRegistry meterRegistry) {
this.orderCreateCounter = Counter.builder("business.order.create.count")
.description("订单创建总数")
.tag("service", "order-service")// 标签:服务名称
.register(meterRegistry);
}
// 订单创建成功时调用(计数 +1)
public void incrementOrderCreateCount() {
orderCreateCounter.increment();
}
}
在 OrderController 中使用:
@RestController
public class OrderController {
@Autowired
private BusinessMetrics businessMetrics;
@GetMapping("/order/{userId}")
public Order createOrder(@PathVariable Long userId) {
// 订单创建逻辑(略)
// 业务指标计数 +1
businessMetrics.incrementOrderCreateCount();
return order;
}
}
启动 user-service,访问 http://localhost:8081/actuator/prometheus,可看到指标数据(如 JVM 内存使用、HTTP 请求数、自定义业务指标):
# HELP http_server_requests_seconds HTTP server request duration
# TYPE http_server_requests_seconds summary
http_server_requests_seconds_count{application="user-service",exception="None",method="GET",outcome="SUCCESS",status="200",uri="/user/{id}",} 10.0
http_server_requests_seconds_sum{application="user-service",exception="None",method="GET",outcome="SUCCESS",status="200",uri="/user/{id}",} 0.567
# HELP business_order_create_count 订单创建总数
# TYPE business_order_create_count counter
business_order_create_count{service="order-service",} 5.0
① 从 Prometheus 官网 下载 Prometheus(推荐 2.45.0 版本)。
② 解压后修改配置文件 prometheus.yml:
global:
scrape_interval: 15s # 全局采集间隔(默认 15 秒)
evaluation_interval: 15s # 规则评估间隔(默认 15 秒)
# 告警规则配置(后续讲解)
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# 监控任务配置
scrape_configs:
# 任务 1:监控 Prometheus 自身
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
# 任务 2:监控 user-service
- job_name: 'user-service'
metrics_path: '/actuator/prometheus'# 指标端点路径
static_configs:
- targets: ['127.0.0.1:8081']# user-service 实例地址(多实例用逗号分隔)
# 任务 3:监控 order-service
- job_name: 'order-service'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['127.0.0.1:8082']
# 任务 4:监控 product-service
- job_name: 'product-service'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['127.0.0.1:8083']
③ 启动 Prometheus:
prometheus.exe。./prometheus --config.file=prometheus.yml。
④ 访问 http://localhost:9090,进入 Prometheus 控制台。在 Prometheus 控制台的'Graph'页面,可通过 PromQL 查询指标,常用查询示例:
| 需求 | PromQL 查询语句 |
|---|---|
| 查询 user-service 的 HTTP 请求总数 | http_server_requests_seconds_count{application="user-service"} |
| 查询 user-service 的 GET 请求错误率 | sum(http_server_requests_seconds_count{application="user-service",status=~"5.."} / sum(http_server_requests_seconds_count{application="user-service"})) * 100 |
| 查询 order-service 的订单创建总数 | business_order_create_count{service="order-service"} |
| 查询所有服务的 JVM 堆内存使用量 | jvm_memory_used_bytes{area="heap",application=~".+"} |
| 查询 user-service 的 P95 响应时间 | http_server_requests_seconds{application="user-service",quantile="0.95"} |
Prometheus 的可视化能力较弱,Grafana 可通过连接 Prometheus 数据源,生成美观、定制化的仪表盘,并支持告警功能。
① 从 Grafana 官网 下载 Grafana(推荐 10.2.0 版本)。 ② 启动 Grafana:
grafana-server.exe。./grafana-server(默认端口 3000)。
③ 访问 http://localhost:3000,默认用户名/密码:admin/admin(首次登录需修改密码)。① 点击左侧'Configuration'→'Data Sources'→'Add data source'。 ② 选择'Prometheus',配置数据源信息:
http://localhost:9090(Prometheus 地址)。Grafana 官网提供了大量现成的仪表盘模板(Dashboards),可直接导入使用:
① 搜索 Spring Boot 微服务相关模板,推荐模板 ID:
除了导入模板,还可自定义仪表盘展示业务指标(如订单创建数、支付成功率):
① 点击左侧'Dashboards'→'New dashboard'→'Add visualization'。
② 选择 Prometheus 数据源,输入 PromQL 查询语句(如 business_order_create_count{service="order-service"})。
③ 配置图表类型(如折线图、柱状图)、标题、坐标轴等,点击'Apply'。
④ 重复步骤②-③,添加多个业务指标图表,最终形成业务监控仪表盘。
当指标超过阈值时(如错误率>5%、响应时间>1 秒),Grafana 需及时发送告警通知(邮件、钉钉、短信等):
① 配置告警通道:
② 配置告警规则:
avg() of query(A, 5m) > 1(5 分钟内平均响应时间超过 1 秒)。2m(持续 2 分钟触发告警)。③ 测试告警:
首先需规范微服务的日志输出格式(结构化日志),便于 Elasticsearch 检索。
在 user-service 的 src/main/resources 目录下创建 logback-spring.xml:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 日志输出格式(JSON 格式,便于结构化解析) -->
<property name="LOG_PATTERN" value='{"timestamp":"%d{yyyy-MM-dd HH:mm:ss.SSS}","level":"%p","thread":"%t","logger":"%logger{50}","message":"%msg","service":"${spring.application.name}","traceId":"%X{traceId:-}","exception":"%ex{full}"}'/>
<!-- 日志存储路径 -->
<property name="LOG_PATH" value="logs/${spring.application.name}"/>
<!-- 控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>${LOG_PATTERN}</pattern>
</layout>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 文件输出(按天滚动) -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/app-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>7</maxHistory><!-- 保留 7 天日志 -->
</rollingPolicy>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>${LOG_PATTERN}</pattern>
</layout>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 根日志级别 -->
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
<!-- 业务日志级别(可单独配置) -->
<logger name="com.example.order.service" level="DEBUG"/>
</configuration>
为了将日志与链路追踪关联,需在日志中添加 TraceID(每个请求的唯一标识),可通过 SkyWalking 或 Spring Cloud Sleuth 实现(此处以 SkyWalking 为例,后续链路追踪章节详细讲解)。
① 从 Elasticsearch 官网 下载 Elasticsearch 7.17.0。
② 解压后修改 config/elasticsearch.yml:
cluster.name: elasticsearch-cluster # 集群名称
node.name: node-1# 节点名称
network.host: 0.0.0.0 # 绑定所有 IP(允许外部访问)
http.port: 9200# HTTP 端口
discovery.seed_hosts:["127.0.0.1"]# 种子节点
cluster.initial_master_nodes:["node-1"]# 初始主节点
xpack.security.enabled:false# 关闭安全认证(开发环境)
③ 启动 Elasticsearch:
bin/elasticsearch.bat。bin/elasticsearch。
④ 访问 http://localhost:9200,返回如下结果则启动成功:{"name":"node-1","cluster_name":"elasticsearch-cluster","cluster_uuid":"xxx","version":{"number":"7.17.0","build_flavor":"default","build_type":"zip","build_hash":"xxx","build_date":"2022-01-28T08:36:04.875279988Z","build_snapshot":false,"lucene_version":"8.11.1","minimum_wire_compatibility_version":"6.8.0","minimum_index_compatibility_version":"6.0.0-beta1"},"tagline":"You Know, for Search"}
Filebeat 负责采集微服务的日志文件,并转发到 Elasticsearch。
① 从 Filebeat 官网 下载 Filebeat 7.17.0。
② 解压后修改 filebeat.yml:
filebeat.inputs:
- type: filestream
enabled: true
paths:
# 微服务日志文件路径(多个服务用逗号分隔,或新增 inputs)
- D:\projects\user-service\logs\user-service\app-*.log
- D:\projects\order-service\logs\order-service\app-*.log
- D:\projects\product-service\logs\product-service\app-*.log
fields:
service: ${spring.application.name}# 自定义字段(服务名称)
# 输出到 Elasticsearch
output.elasticsearch:
hosts:["localhost:9200"]# Elasticsearch 地址
index:"micro-service-logs-%{+yyyy.MM.dd}"# 日志索引名称(按天分割)
# 关闭 Elasticsearch 索引自动创建(可选)
setup.ilm.enabled:false
setup.template.enabled:false
# Kibana 配置(用于自动创建索引模式)
setup.kibana:
host:"localhost:5601"
③ 启动 Filebeat:
filebeat.exe -e -c filebeat.yml。./filebeat -e -c filebeat.yml。① 从 Kibana 官网 下载 Kibana 7.17.0。
② 解压后修改 config/kibana.yml:
server.port: 5601# Kibana 端口
server.host:"0.0.0.0"# 允许外部访问
elasticsearch.hosts:["http://localhost:9200"]# Elasticsearch 地址
i18n.locale:"zh-CN"# 中文界面
③ 启动 Kibana:
bin/kibana.bat。bin/kibana。
④ 访问 http://localhost:5601,进入 Kibana 控制台。Kibana 需通过索引模式关联 Elasticsearch 中的日志索引:
① 点击左侧'Management'→'Stack Management'→'Index Patterns'→'Create index pattern'。
② 输入索引名称模式(如 micro-service-logs-*),点击'Next step'。
③ 选择时间字段(如 timestamp),点击'Create index pattern'。
① 点击左侧'Discover',选择创建的索引模式,即可看到所有微服务的日志。 ② 常用检索功能:
service、level),筛选特定服务(如 service:order-service)或特定日志级别(如 level:ERROR)的日志。③ 日志聚合分析:
service 字段分组,统计各服务的 ERROR 日志数量,生成日志错误分布图表。假设用户反馈'下单失败',通过 Kibana 排查步骤:
service:order-service 且 level:ERROR 的日志,查看错误堆栈。{"timestamp":"2024-05-20 14:30:00.123","level":"ERROR","thread":"http-nio-8082-exec-3","logger":"com.example.order.service.OrderService","message":"创建订单失败:库存不足","service":"order-service","traceId":"xxx","exception":"java.lang.RuntimeException: 库存不足..."}。traceId 检索该请求的所有日志(包括订单服务、商品服务的日志),定位到商品服务返回'库存不足'的响应。① 从 SkyWalking 官网 下载 SkyWalking 8.16.0(选择'Binary Distribution')。
② 解压后修改 config/application.yml(默认使用 H2 内存数据库,开发环境无需修改):
storage:
selector: ${SW_STORAGE:h2}# 存储类型(h2/elasticsearch/mysql 等)
h2:
driver: org.h2.jdbcx.JdbcDataSource
url: jdbc:h2:mem:skywalking-oap-db;DB_CLOSE_DELAY=-1
user: sa
metadataQueryMaxSize: 5000
③ 启动 SkyWalking Server:
bin/startup.bat。bin/startup.sh。
④ 访问 http://localhost:8080,进入 SkyWalking UI(默认用户名/密码:admin/admin)。SkyWalking Agent 采用无侵入式采集,通过 Java Agent 技术在微服务启动时挂载,无需修改代码。
① 解压 SkyWalking 安装包中的 agent 目录(如 apache-skywalking-apm-bin/agent),复制到微服务项目目录下(或任意目录)。
② 修改 Agent 配置文件 agent/config/agent.config:
# 应用名称(与微服务名称一致)
agent.service_name=${SW_AGENT_NAME:user-service}
# SkyWalking Server 地址
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:127.0.0.1:11800}
# 日志级别
logging.level=INFO
通过 JVM 参数 -javaagent 挂载 Agent,以 IDEA 为例:
① 打开微服务的启动配置(Edit Configurations)。
② 在'VM options'中添加:
-javaagent:D:\projects\agent\skywalking-agent.jar -DSW_AGENT_NAME=user-service -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800
D:\projects\agent\skywalking-agent.jar 为 Agent 的绝对路径。SW_AGENT_NAME 为微服务名称(需与其他服务区分)。
③ 依次启动 user-service、order-service、product-service(每个服务需单独配置 Agent,修改 SW_AGENT_NAME)。访问 http://localhost:8082/order/1(order-service 调用 user-service 和 product-service),触发分布式调用。
① 进入 SkyWalking UI,点击左侧'Trace'→'Trace List',可看到所有 Trace 记录。 ② 点击某个 Trace 的'Trace ID',进入链路详情页面,可查看:
点击左侧'Topology'→'Global',可查看微服务之间的依赖关系图,直观展示服务调用链路(如 order-service 依赖 user-service 和 product-service,product-service 无下游依赖)。
假设用户反馈'下单接口响应缓慢',通过 SkyWalking 排查步骤:
service:order-service 且 duration>1000ms 的 Trace(响应时间超过 1 秒)。/product/stock/deduct 接口耗时过长。SkyWalking 还支持将业务指标与链路关联,例如在链路中添加业务标签(如订单 ID、用户 ID),便于定位特定业务的链路问题:
import org.apache.skywalking.apm.toolkit.trace.TraceContext;
import org.apache.skywalking.apm.toolkit.trace.Tag;
import org.apache.skywalking.apm.toolkit.trace.Tags;
@RestController
public class OrderController {
@GetMapping("/order/{userId}")
@Tags({@Tag(key = "userId", value = "${userId}"), @Tag(key = "productId", value = "1")})
public Order createOrder(@PathVariable Long userId) {
// 订单创建逻辑(略)
// 获取当前 TraceID,添加到日志(已通过 Logback 配置自动实现)
String traceId = TraceContext.traceId();
System.out.println("TraceID: " + traceId);
return order;
}
}
重启微服务后,再次触发调用,在 SkyWalking UI 的 Trace 详情中可看到自定义标签(userId、productId),便于筛选特定用户或商品的链路。
一个完善的告警体系需覆盖'指标告警、日志告警、链路告警',确保问题早发现、早处理。
| 告警类型 | 告警指标 | 阈值建议 | 告警级别 |
|---|---|---|---|
| 系统指标 | CPU 使用率 | 持续 5 分钟>80% | 警告 |
| 系统指标 | 内存使用率 | 持续 5 分钟>85% | 警告 |
| 系统指标 | 磁盘使用率 | 持续 10 分钟>90% | 严重 |
| 应用指标 | HTTP 错误率(5xx) | 持续 2 分钟>5% | 严重 |
| 应用指标 | 平均响应时间 | 持续 2 分钟>1 秒 | 警告 |
| 应用指标 | 服务不可用(健康检查失败) | 持续 1 分钟 | 严重 |
| 链路指标 | 链路错误率 | 持续 2 分钟>5% | 严重 |
| 链路指标 | 链路平均耗时 | 持续 2 分钟>2 秒 | 警告 |
| 日志指标 | ERROR 日志数 | 持续 1 分钟>10 条 | 警告 |
| 告警级别 | 通知渠道 | 说明 |
|---|---|---|
| 警告 | 钉钉群、企业微信群 | 批量通知,便于团队知晓 |
| 严重 | 短信、电话、邮件 + 钉钉群 | 紧急通知,确保负责人及时处理 |
微服务故障排查需结合监控、日志、链路三大支柱,遵循'先定位范围,再细化排查'的原则,流程如下:
现象:order-service 的下单接口响应时间超过 2 秒,SkyWalking 显示 product-service 的 /product/stock/deduct 接口耗时 1.8 秒。
排查:
deductStock 方法中执行的 SQL 语句耗时过长:SELECT * FROM product WHERE id=? FOR UPDATE(无索引)。ALTER TABLE product ADD PRIMARY KEY (id)。SELECT id, stock FROM product WHERE id=? FOR UPDATE。
效果:接口响应时间降至 200ms,性能提升 90%。现象:促销活动期间,user-service 的 QPS 突增到 5000,导致服务崩溃,依赖 user-service 的 order-service 和 product-service 也随之不可用。 排查:
现象:order-service 调用 product-service 时频繁超时,导致大量重试,进而引发线程池耗尽。 排查:
feign:
client:
config:
default:
connect-timeout: 3000# 连接超时 3 秒
read-timeout: 5000# 读取超时 5 秒
retry:
enabled: true
max-attempts: 1# 重试 1 次(默认 3 次)
✅ 本章详细讲解了微服务可观测性体系的三大支柱(监控、日志、链路追踪),通过 Prometheus + Grafana 实现指标监控与可视化,ELK/EFK 实现日志集中管理与分析,SkyWalking 实现分布式链路追踪,最终结合实战案例讲解了告警配置、故障排查与性能优化。
通过本章学习,读者应掌握:
微服务运维的核心是'可观测性',只有让系统的运行状态'可见、可测、可追溯',才能保障系统稳定运行。下一章将讲解微服务的容器化与云原生部署(Docker + Kubernetes),帮助读者构建完整的微服务部署体系。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online