下载工作台
PaaS 组件实战

可观测性进阶:Jaeger / Loki / 告警

试读上半部分 · 解锁后可读全文

第 10 章 · 可观测性进阶:链路追踪、日志管道与告警

本章在第 6 章 Prometheus / Grafana 基础上,补齐 日志聚合分布式链路追踪告警闭环,形成「指标 + 日志 + 链路」三板斧。

前置:Elasticsearch(第 5 章)、Prometheus + Grafana(第 6 章或集群插件)已部署。


10.1 可观测性架构

┌──────────────┐     metrics      ┌─────────────┐
│  业务 Pod     │ ───────────────► │ Prometheus  │──► Grafana 大屏
│  /metrics    │                  └─────────────┘
├──────────────┤     traces       ┌─────────────┐
│  OpenTelemetry│ ───────────────► │   Jaeger    │──► 16686 UI
├──────────────┤     logs         ┌─────────────┐
│  stdout/文件  │ ───────────────► │ Loki / ES   │──► Grafana Explore
└──────────────┘                  └─────────────┘
                                        │
                                  告警规则 ──► 邮件/Webhook/钉钉
维度组件(商店 id)解决什么问题
指标prometheus / 集群插件QPS、延迟、资源占用
日志loki + Grafana;或 elasticsearch排障、审计、全文检索
链路jaeger跨服务调用耗时、瓶颈定位
告警Prometheus rule_files + Grafana Alerting故障主动通知
商店 无独立 Kibana 目录项。日志可视化推荐 Grafana + LokiGrafana + Elasticsearch 数据源;复杂检索可用 ES Dev Tools(第 5 章)。

10.2 Jaeger 1.57(分布式链路追踪)

适用场景

选用说明
微服务调用链分析API → 订单 → 库存 → MQ 全链路耗时
慢请求定位哪个 Span 占用 2s
与指标互补Prometheus 看聚合,Jaeger 看单次请求

不选用:单体应用、无跨服务调用;仅需日志时用 Loki/ES。

商店部署参数

idjaeger
镜像jaegertracing/all-in-one:1.57
端口16686(UI);采集 4317(OTLP gRPC)、4318(OTLP HTTP)
PVC可选;All-in-One 演示可不挂卷
Namespacemonitor

环境变量(确认页 YAML)

env:
  - name: COLLECTOR_OTLP_ENABLED
    value: "true"

步骤 ③ 网络:除 16686 外,在 端口 弹窗补充 43174318(ClusterIP 即可,应用内网推送)。

连接语法

协议Endpoint(集群内)
OTLP gRPCjaeger.monitor.svc.cluster.local:4317
OTLP HTTPhttp://jaeger.monitor.svc.cluster.local:4318/v1/traces
UIhttp://<节点IP>:<NodePort> → 16686

应用埋点(OpenTelemetry)

Spring Boot 3(application.yml

management:
  tracing:
    sampling:
      probability: 1.0
  otlp:
    tracing:
      endpoint: http://jaeger.monitor.svc.cluster.local:4318/v1/traces

依赖:opentelemetry-spring-boot-starter + micrometer-tracing-bridge-otel

Python FastAPI

from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor

provider = TracerProvider()
provider.add_span_processor(
    BatchSpanProcessor(OTLPSpanExporter(endpoint="jaeger.monitor:4317", insecure=True))
)
trace.set_tracer_provider(provider)

验收

  1. 浏览器打开 Jaeger UI → Service 下拉出现 order-api
  2. 发起一次跨服务 HTTP 调用 → Find Traces 可见完整 Span 树
  3. 点击慢 Span 查看 Tags(http.urldb.statement

小紫运维

入口操作
应用部署 → 日志管理确认 COLLECTOR_OTLP_ENABLED=true
运维 → 工作负载 → YAML补端口 4317/4318
无 Trace检查应用 OTLP Endpoint、采样率、防火墙

10.3 Grafana Loki(日志聚合)

适用场景

选用说明
容器 stdout 日志集中查询`{namespace="app"}= "error"`
与 Grafana 一体指标与日志同一面板
成本低于 ES 全文索引按标签过滤为主

商店部署参数

idloki
镜像grafana/loki:2.9.x(以卡片为准)
端口3100
PVC20 Gi/loki
Namespacemonitor

核心配置(单节点演示)

确认页 YAML 可设:

args:
  - -config.file=/etc/loki/local-config.yaml

或通过工作负载挂载 loki-config.yaml

auth_enabled: false
server:
  http_listen_port: 3100
common:
  path_prefix: /loki
  storage:
    filesystem:
      chunks_directory: /loki/chunks
      rules_directory: /loki/rules
schema_config:
  configs:
    - from: 2024-01-01
      store: tsdb
      object_store: filesystem
      schema: v13
      index:
        prefix: index_
        period: 24h

以下内容需解锁后阅读

试读已结束。解锁本章 ¥5.00,或开通年度会员畅读全部教程。
年度会员 ¥199.00/年; 小紫 AI 工作台有效会员 ¥99.00/年

正文仅在服务端鉴权后下发,未付费无法获取下半部分内容。