OpenTelemetry 多环境配置
介绍
在实际项目中,我们通常需要在开发、测试和生产等不同环境中部署应用。OpenTelemetry的多环境配置能帮助我们:
- 在不同环境中启用不同级别的数据收集
- 避免生产环境泄露敏感数据
- 根据环境调整采样率和导出频率
- 使用不同的导出目标(如开发环境用控制台,生产 环境用Prometheus)
基础配置策略
1. 环境变量区分
最常用的方法是通过环境变量区分配置:
// 初始化OpenTelemetry时读取环境变量
const { NodeSDK } = require('@opentelemetry/sdk-node');
const { getEnv } = require('@opentelemetry/core');
const env = getEnv().OTEL_ENV || 'development';
const sdk = new NodeSDK({
resource: new Resource({
[SemanticResourceAttributes.SERVICE_NAME]: 'my-service',
'environment': env // 添加环境标签
}),
// 其他配置...
});
2. 条件化采样率
不同环境设置不同的采样率:
const { AlwaysOnSampler, ParentBasedSampler } = require('@opentelemetry/core');
function getSampler(env) {
switch(env) {
case 'production':
return new ParentBasedSampler({ root: new AlwaysOnSampler() });
case 'staging':
return new ParentBasedSampler({ root: new AlwaysOnSampler() });
default: // development
return new AlwaysOnSampler(); // 开发环境记录所有数据
}
}
进阶配置示例
多环境导出器配置
const { ConsoleSpanExporter, OTLPTraceExporter } = require('@opentelemetry/sdk-trace-base');
const { OTLPMetricExporter } = require('@opentelemetry/sdk-metrics');
function getExporters(env) {
const exporters = {
trace: null,
metric: null
};
switch(env) {
case 'production':
exporters.trace = new OTLPTraceExporter({ url: 'https://prod-collector:4317' });
exporters.metric = new OTLPMetricExporter({ url: 'https://prod-collector:4317' });
break;
case 'staging':
exporters.trace = new OTLPTraceExporter({ url: 'https://stage-collector:4317' });
exporters.metric = new OTLPMetricExporter({ url: 'https://stage-collector:4317' });
break;
default:
exporters.trace = new ConsoleSpanExporter();
exporters.metric = new ConsoleMetricExporter();
}
return exporters;
}