如今,许多企业正在采用“混合”策略,将重要数据保留在内部数据中心(本地),并在云端开发新服务。🏢☁️
这是兼顾稳定性和灵活性两全其美的好方法!然而,它给开发人员和运维人员带来了难以言喻的困扰。那就是“当故障发生时,无法查明原因”。
单独查看本地服务器日志,单独查看云仪表板… 😵 这就像同时观看两个不同的电视频道,试图理解整个故事。您一定因为无法一目了然地看到整个系统如何运行而感到沮丧。
今天,我们将探讨解决这个问题并实现“可观测性(Observability)”的策略,以便透明地审视我们的系统。

🤔 我们常犯的陷阱
为了解决问题,我们审查了各种工具,但错误的选择反而会使情况恶化。让我们先看看三个典型的陷阱。
1️⃣ 陷阱:“只要收集好日志就行了,对吧?” (单一用途的日志服务)
这是最基本的方法。将系统生成的所有日志(Log)收集到一个地方。📜
当然,日志很重要。它们记录了特定事件,例如“发生了什么错误”。但仅凭这些是不够的。
- 局限性:日志无法直接显示系统的
健康状况(Health)
或性能。例如,您无法得知“CPU使用率接近90%”(指标)或“一个用户请求在数据库中延迟了5秒”(追踪)等信息。
⚽️ 比喻:这就像在足球比赛中只知道最终比分(日志)。您无法知道是谁进的球、控球率如何(指标),或者进球前有哪些传球(追踪)。
2️⃣ 陷阱:“因为它是最新技术!” (云原生专用平台)
Kubernetes、Serverless等云原生环境的优秀监控工具确实很多。🚀 但是,我们仍然拥有重要的“本地”环境。
- 局限性:这些工具在收集云环境数据方面表现出色,但通常根本不支持内部数据中心中的传统服务器。最终,本地环境仍然是一个无法查明原因的“黑匣子”。⬛
🏡 比喻:这就像安装了最新的智能家居安全系统,却只在新扩建的副楼安装了摄像头,而将重要的主楼置之不理。这是半吊子的安全措施。
3️⃣ 陷阱:“我们自己来构建!” (需要手动扩展的开源方案)
“如果我们用开源自己构建,既能省钱又能按我们的喜好定制!” 🔧 这听起来很有吸引力,但其中隐藏着看不见的成本。
- 局限性:要稳定运行开源工具,需要专门的人员。随着服务的增长,需要手动扩展,并且安全补丁、版本管理、故障响应等运维负担呈指数级增长。特别是对于安全和合规性至关重要的系统,很难保证自建系统的稳定性。
🏭 比喻:这就像为了满足家庭用电需求而自己建造一个小型发电站。虽然可行,但从稳定性、维护和成本的角度来看,使用专业电力公司(SaaS)的服务要高效得多。
✨ 答案:合而为一!集成SaaS可观测性平台
那么,答案是什么呢?那就是使用一个基于SaaS的可观测性平台,它能够普遍地从本地和云环境收集遥测数据。
这听起来有点复杂,对吧?我们将其分解为三个关键词。
- SaaS (Software as a Service) ✅
- 我们无需担心平台的安装、扩展和维护。专业公司会处理所有这些。我们只需传输系统数据并专注于分析。运维资源将显著减少。
- 可观测性(Observability)平台 ✅
- 它不仅仅是单独显示日志、指标和追踪。它将这三种数据有机地连接起来。例如,它能让您一次性了解“在CPU使用率飙升(指标)时发生了什么错误(日志),以及这个错误是由哪个用户请求(追踪)引起的”。
- 通用数据采集 ✅
- 这是核心。通过平台提供的代理(Agent)或标准协议(例如OpenTelemetry),可以在任何地方收集数据。无论是老旧的物理服务器、虚拟机(VM)、容器还是无服务器函数,所有数据都可以不分环境地汇集到一处。
这如何实现? (简单示例)
通常,这些平台通过安装轻量级代理来收集数据。例如,我们来看看最近已成为标准的OpenTelemetry Collector的配置文件。
仅凭这一个配置文件,您就可以收集本地服务器的日志文件和云应用程序的数据,并将所有这些数据发送到一个SaaS平台。
代码示例: otel-collector-config.yaml
# OpenTelemetry Collector 配置示例
receivers:
# 接收来自云原生应用程序的数据 (标准协议)
otlp:
protocols:
grpc:
http:
# 读取本地服务器的日志文件
filelog:
include: [ /var/log/my_onprem_app.log ]
start_at: beginning
processors:
batch:
exporters:
# 将所有收集到的数据发送到“MySaaSPlatform”
otlphttp:
endpoint: "https://api.my-saas-platform.com/v1/metrics"
headers:
"api-key": "YOUR_API_KEY" # SaaS平台认证密钥
service:
pipelines:
# 指标/追踪管道
traces:
receivers: [otlp]
processors: [batch]
exporters: [otlphttp]
# 日志管道
logs:
receivers: [filelog]
processors: [batch]
exporters: [otlphttp]
收集到的原始数据示例
这样收集到的数据将各自拥有其上下文。
// 示例 1: 从本地服务器收集的日志
{
"timestamp": "2025-11-06T08:29:00Z",
"level": "ERROR",
"message": "Legacy DB connection timeout",
"attributes": {
"service.name": "auth-service-onprem",
"host.name": "idc-server-01"
}
}
// 示例 2: 从云容器收集的指标 (Prometheus格式)
http_requests_total{service="payment-service-cloud", pod_name="payment-xyz-123", code="503"} 5
// 示例 3: 跨越云端和本地的追踪数据 (Span)
{
"traceId": "a1b2c3d4",
"spanId": "span-002",
"parentSpanId": "span-001",
"name": "SELECT user FROM legacy_db",
"service": "auth-service-onprem",
"duration_ms": 2500
}
这样收集到的数据将在SaaS平台的仪表板上合并显示。开发人员不再需要在多个系统之间徘徊,而可以在一个地方掌握整个系统的流程和状态。🚀
结论
混合环境的复杂性未来将进一步增加。在这种环境中,为了维护系统的稳定性和业务的连续性,获得“一目了然地查看整个系统的能力”,即集成可观测性,是必不可少的。
仅凭零散的工具或仅依赖于特定环境的解决方案,很难找到复杂问题的根本原因。现在,您的系统有多透明呢?🤔
发表回复