字数 415,阅读大约需 3 分钟
在后端服务里使用uptrace对服务进行trace追踪
Uptrace 在可观测性(observability)领域中是一个开源的应用性能监控(APM)和可观测性平台。以下是关于 Uptrace 的关键信息:
核心定位
Uptrace 是一个开源的 APM 平台,专门为现代分布式系统而设计 GitHubUptrace。它提供统一的可观测性解决方案,帮助团队监控和故障排除分布式应用程序。
主要特点
三支柱数据支持:
Uptrace 为追踪(traces)、指标(metrics)和日志(logs)提供单一用户界面 GitHubUptrace,这正是可观测性的三大支柱。
技术架构:
Uptrace 使用 OpenTelemetry 框架收集数据,使用 ClickHouse 数据库存储数据,同时需要 PostgreSQL 数据库来存储元数据 GitHub - uptrace/uptrace: Open source APM: OpenTelemetry traces, metrics, and logs。
部署
当前开发环境使用的是uptrace提供的线上开发环境,可直接调用uptrace的线上进行trace上报和通过dashboard追踪
业务插桩
以Python为例,在Uptrace提供dev环境的免费额度,可存储一定量trace信息
Trace参数
将参数写入到settings配置里或者环境变量,均可
# TraceId
OTEL_EXPORTER_OTLP_ENDPOINT: Optional[str] = "{}"
OTEL_EXPORTER_OTLP_HEADERS: Optional[str] = "uptrace-dsn={}"
OTEL_EXPORTER_OTLP_COMPRESSION: Optional[str] = "gzip"
OTEL_EXPORTER_OTLP_METRICS_DEFAULT_HISTOGRAM_AGGREGATION: Optional[str] = "BASE2_EXPONENTIAL_BUCKET_HISTOGRAM"
OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE: Optional[str] = "DELTA"
Trace插桩
if settings.OTEL_EXPORTER_OTLP_ENDPOINT:
tracer_provider = trace.get_tracer_provider()
headers = {}
if settings.OTEL_EXPORTER_OTLP_HEADERS:
for header_pair in settings.OTEL_EXPORTER_OTLP_HEADERS.split(","):
key, value = header_pair.split("=", 1) # 只拆分第一个等号
headers[key.strip()] = value.strip()
span_exporter = OTLPSpanExporter(
endpoint=settings.OTEL_EXPORTER_OTLP_ENDPOINT,
headers=headers,
timeout=int(os.getenv("OTEL_EXPORTER_OTLP_TIMEOUT", 10000)),
compression=(
Compression.Gzip
if settings.OTEL_EXPORTER_OTLP_COMPRESSION == "gzip"
else Compression.NoCompression
),
)
span_processor = BatchSpanProcessor(span_exporter)
tracer_provider.add_span_processor(span_processor)
FastAPIInstrumentor.instrument_app(app, trace.get_tracer_provider())
验证
发起请求,在https://app.uptrace.dev/traces/对应的项目里查看相关trace;
评论区