DSN 配置与查看
DSN(Data Source Name)是连接 Uptrace 平台的凭证字符串,包含了认证和连接所需的所有信息。本文将详细介绍如何查看、配置和使用内部 Uptrace 平台的 DSN。
什么是 DSN?

DSN 是一个包含连接信息的字符串,类似于数据库连接串。它包含:
- 协议类型: http 或 https
- 认证信息: 项目 Token
- 服务地址: Uptrace 平台的 endpoint
- 项目标识: 项目 ID
- 可选参数: 如 gRPC 端口等
DSN 格式
http://<token>@<endpoint>/<project_id>?grpc=<port>
内部平台示例:
http://abc123def456@uptrace-grpc.yodao.cn/1234?grpc=4317
如何查看 DSN
方法 1: 从平台控制台查看(推荐)
登录平台
- 访问 https://uptrace.inner.youdao.com/
- 使用企业账号登录
选择项目
- 在项目列表中选择要查看的项目
- 点击项目名称进入项目详情页
进入项目设置
- 点击右上角的"设置"图标
- 或点击左侧导航栏的"设置"菜单
查看连接详情
- 在设置页面中找到"连接详情"或"Connection Details"部分
- 点击"显示 DSN"或"Reveal DSN"按钮
- 复制显示的 DSN 字符串
注意:DSN 包含敏感信息,请妥善保管,不要泄露。
方法 2: 联系项目管理员
如果您无法访问项目设置页面,可以:
- 联系项目管理员获取 DSN
- 通过工单系统申请项目访问权限
- 联系 APM 平台管理员
DSN 格式说明
内部平台 DSN 格式
内部 Uptrace 平台的 DSN 格式如下:
http://<token>@uptrace-grpc.yodao.cn/<project_id>?grpc=4317
DSN 组成部分
1. 协议(Protocol)
http://
2. Token(令牌)
abc123def456
用于认证的密钥,由平台自动生成。Token 是项目级别的,每个项目有唯一的 Token。
安全提示:
- Token 具有写入权限,请妥善保管
- 不要将 Token 提交到版本控制系统
- 定期检查 Token 的使用情况
3. Endpoint(服务地址)
uptrace-grpc.yodao.cn
内部 Uptrace 平台的服务地址:
- HTTP 端点:
uptrace-grpc.yodao.cn - gRPC 端点:
uptrace-grpc.yodao.cn:4317
4. Project ID(项目 ID)
1234
项目的唯一标识符,用于区分不同的项目。
5. 可选参数
gRPC 端口:
?grpc=4317
指定 gRPC 协议的端口,用于 OTLP over gRPC 传输。
完整示例
http://abc123def456@uptrace-grpc.yodao.cn/1234?grpc=4317
这个 DSN 表示:
- Token 为
abc123def456 - HTTP 端点为
uptrace-grpc.yodao.cn - gRPC 端点为
uptrace-grpc.yodao.cn:4317 - 项目 ID 为
1234
DSN 配置示例
使用环境变量(推荐)
最安全和灵活的方式是使用环境变量:
# 设置 DSNexport OTEL_EXPORTER_OTLP_ENDPOINT=uptrace-grpc.yodao.cn:4317export OTEL_EXPORTER_OTLP_PROTOCOL=grpcexport OTEL_EXPORTER_OTLP_HEADERS=uptrace-dsn=http://abc123def456@uptrace-grpc.yodao.cn/1234?grpc=4317# 或者使用 HTTP 端点export OTEL_EXPORTER_OTLP_ENDPOINT=http://uptrace-grpc.yodao.cnexport OTEL_EXPORTER_OTLP_PROTOCOL=http/protobufexport OTEL_EXPORTER_OTLP_HEADERS=uptrace-dsn=http://abc123def456@uptrace-grpc.yodao.cn/1234?grpc=4317
使用 gRPC 端点(推荐)
注意:非内网服务接入时,只能使用grpc端点
gRPC 端点性能更好,推荐用于生产环境:
# gRPC 配置export OTEL_EXPORTER_OTLP_ENDPOINT=uptrace-grpc.yodao.cn:4317export OTEL_EXPORTER_OTLP_PROTOCOL=grpcexport OTEL_EXPORTER_OTLP_HEADERS=uptrace-dsn=http://abc123def456@uptrace-grpc.yodao.cn/1234?grpc=4317export OTEL_EXPORTER_OTLP_COMPRESSION=gzip
使用 HTTP 端点
如果 gRPC 端口被防火墙限制,可以使用 HTTP 端点:
# HTTP 配置export OTEL_EXPORTER_OTLP_ENDPOINT=http://uptrace-grpc.yodao.cnexport OTEL_EXPORTER_OTLP_PROTOCOL=http/protobufexport OTEL_EXPORTER_OTLP_HEADERS=uptrace-dsn=http://abc123def456@uptrace-grpc.yodao.cn/1234?grpc=4317
不同语言的配置
Go
package mainimport ("os""github.com/uptrace/uptrace-go/uptrace")func main() {// 从环境变量读取 DSNdsn := os.Getenv("UPTRACE_DSN")uptrace.ConfigureOpentelemetry(uptrace.WithDSN(dsn),uptrace.WithServiceName("my-service"),)// 或使用标准 OTLP 配置os.Setenv("OTEL_EXPORTER_OTLP_ENDPOINT", "uptrace-grpc.yodao.cn:4317")os.Setenv("OTEL_EXPORTER_OTLP_PROTOCOL", "grpc")os.Setenv("OTEL_EXPORTER_OTLP_HEADERS", "uptrace-dsn=http://abc123def456@uptrace-grpc.yodao.cn/1234?grpc=4317")}
Python
import os# 使用环境变量os.environ["OTEL_EXPORTER_OTLP_ENDPOINT"] = "uptrace-grpc.yodao.cn:4317"os.environ["OTEL_EXPORTER_OTLP_PROTOCOL"] = "grpc"os.environ["OTEL_EXPORTER_OTLP_HEADERS"] = "uptrace-dsn=http://abc123def456@uptrace-grpc.yodao.cn/1234?grpc=4317"os.environ["OTEL_SERVICE_NAME"] = "my-service"
Java
# 启动时设置环境变量export OTEL_EXPORTER_OTLP_ENDPOINT=uptrace-grpc.yodao.cn:4317export OTEL_EXPORTER_OTLP_PROTOCOL=grpcexport OTEL_EXPORTER_OTLP_HEADERS=uptrace-dsn=http://abc123def456@uptrace-grpc.yodao.cn/1234?grpc=4317# 启动应用java -javaagent:opentelemetry-javaagent.jar -jar my-app.jar
JavaScript/Node.js
// 使用环境变量process.env.OTEL_EXPORTER_OTLP_ENDPOINT = 'uptrace-grpc.yodao.cn:4317';process.env.OTEL_EXPORTER_OTLP_PROTOCOL = 'grpc';process.env.OTEL_EXPORTER_OTLP_HEADERS = 'uptrace-dsn=http://abc123def456@uptrace-grpc.yodao.cn/1234?grpc=4317';
.NET
// 使用环境变量Environment.SetEnvironmentVariable("OTEL_EXPORTER_OTLP_ENDPOINT", "uptrace-grpc.yodao.cn:4317");Environment.SetEnvironmentVariable("OTEL_EXPORTER_OTLP_PROTOCOL", "grpc");Environment.SetEnvironmentVariable("OTEL_EXPORTER_OTLP_HEADERS", "uptrace-dsn=http://abc123def456@uptrace-grpc.yodao.cn/1234?grpc=4317");
环境特定配置
开发环境
# .env.developmentOTEL_EXPORTER_OTLP_ENDPOINT=uptrace-grpc.yodao.cn:4317OTEL_EXPORTER_OTLP_PROTOCOL=grpcOTEL_EXPORTER_OTLP_HEADERS=uptrace-dsn=http://dev-token@uptrace-grpc.yodao.cn/OTEL_SERVICE_NAME=my-service-devOTEL_TRACES_SAMPLER_ARG=1.0 # 100% 采样用于开发
测试环境
# .env.testOTEL_EXPORTER_OTLP_ENDPOINT=http://uptrace-grpc.yodao.cn:4317OTEL_EXPORTER_OTLP_PROTOCOL=grpcOTEL_EXPORTER_OTLP_HEADERS=uptrace-dsn=http://test-token@uptrace-grpc.yodao.cn/test-project?grpc=4317OTEL_SERVICE_NAME=my-service-testOTEL_TRACES_SAMPLER_ARG=0.5 # 50% 采样
生产环境
# .env.productionOTEL_EXPORTER_OTLP_ENDPOINT=uptrace-grpc.yodao.cn:4317OTEL_EXPORTER_OTLP_PROTOCOL=grpcOTEL_EXPORTER_OTLP_HEADERS=uptrace-dsn=http://prod-token@uptrace-grpc.yodao.cn/prod-project?grpc=4317OTEL_SERVICE_NAME=my-serviceOTEL_TRACES_SAMPLER_ARG=0.1 # 10% 采样OTEL_EXPORTER_OTLP_COMPRESSION=gzip
DSN 验证
验证 DSN 格式
可以使用以下方法验证 DSN 格式是否正确:
#!/bin/bashDSN="$1"# 检查 DSN 格式if [[ $DSN =~ ^https://[^@]+@[^/]+/[^?]+ ]]; thenecho "✓ DSN 格式正确"# 提取组件TOKEN=$(echo "$DSN" | grep -oP '://\K[^@]+')ENDPOINT=$(echo "$DSN" | grep -oP '@\K[^/]+')PROJECT=$(echo "$DSN" | grep -oP '/\K[^?]+')echo "Token: ${TOKEN:0:8}..."echo "Endpoint: $ENDPOINT"echo "Project: $PROJECT"elseecho "✗ DSN 格式错误"exit 1fi
测试连接
发送测试数据验证 DSN 是否有效:
# 使用 curl 测试 HTTP 端点curl -X POST https://uptrace-grpc.yodao.cn/v1/traces \-H "Content-Type: application/x-protobuf" \-H "uptrace-dsn: https://abc123def456@uptrace-grpc.yodao.cn/1234?grpc=4317" \--data-binary @test-trace.pb
常见问题
1. DSN 无效或认证失败
错误信息:
authentication failed: invalid DSN
解决方案:
- 检查 DSN 格式是否正确
- 确认 Token 是否有效
- 检查项目 ID 是否正确
- 联系项目管理员重新生成 DSN
2. 网络连接问题
错误信息:
failed to connect to endpoint: connection refused
解决方案:
- 检查 endpoint 地址是否正确:
uptrace-grpc.yodao.cn - 确认端口是否正确(gRPC: 4317, HTTP: 80)
- 检查网络连接和防火墙规则
- 尝试使用 HTTP 端点(端口 80)
3. 权限不足
错误信息:
permission denied: insufficient privileges
解决方案:
- 确认 DSN 对应的项目权限
- 检查是否有写入权限
- 联系项目管理员分配权限
4. 项目不存在
错误信息:
project not found
解决方案:
- 确认 Project ID 是否正确
- 检查项目是否已被删除
- 联系管理员确认项目状态
安全最佳实践
1. 不要硬编码 DSN
❌ 错误做法:
dsn := "http://abc123@uptrace-grpc.yodao.cn/1234"
✅ 正确做法:
dsn := os.Getenv("UPTRACE_DSN")if dsn == "" {log.Fatal("UPTRACE_DSN environment variable is required")}
2. 不要提交 DSN 到版本控制
在 .gitignore 中添加:
.env.env.**.localsecrets/
3. 使用不同的 DSN for 不同环境
- 开发环境使用开发项目的 DSN
- 测试环境使用测试项目的 DSN
- 生产环境使用生产项目的 DSN
4. 定期检查 DSN 使用情况
- 定期审查 DSN 的使用日志
- 监控异常的访问模式
- 发现泄露及时重置 DSN
下一步
参考资源
- 项目创建与管理 - 了解如何创建项目
- Uptrace 平台概览 - 平台介绍
- DSN 配置说明 - 通用 DSN 配置说明