You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Node.js/TypeScript中配置带自签名证书的OTLPMetricExporter

问题解答

1. OTLP gRPC Metric Exporter 是否支持跳过TLS验证?

是的支持,但绝对不推荐在生产环境使用。你使用的是基于gRPC的指标导出器,它底层依赖@grpc/grpc-js库,可以通过专属配置项禁用证书验证。

2. 跳过TLS验证的配置方案

修改导出器初始化代码,通过grpcOptions传入gRPC专属配置,直接使用不安全凭证:

import { MeterProvider } from "@opentelemetry/sdk-metrics";
import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-grpc";
import * as grpc from "@grpc/grpc-js";
import { PeriodicExportingMetricReader } from "@opentelemetry/sdk-metrics";

const exporter = new OTLPMetricExporter({
  url: "https://otel-collector.mycompany.local:4317",
  grpcOptions: {
    // 禁用TLS证书验证
    credentials: grpc.credentials.createInsecure(),
    // 针对自签名证书常见的域名匹配问题,覆盖目标名称
    "grpc.ssl_target_name_override": "otel-collector.mycompany.local",
    "grpc.default_authority": "otel-collector.mycompany.local"
  }
});

const meterProvider = new MeterProvider({
  exporters: [exporter],
});

// 注意:你之前的代码存在错误,不能直接将exporter传入addMetricReader
// 必须使用PeriodicExportingMetricReader这类标准读取器
meterProvider.addMetricReader(new PeriodicExportingMetricReader({
  exporter: exporter,
  exportIntervalMillis: 60000, // 配置1分钟导出一次指标
}));

3. 生产环境推荐的安全配置

跳过验证会引入中间人攻击风险,正确做法是将自签名CA证书纳入信任体系:

方法一:在代码中指定自定义CA证书

将自签名CA证书保存为ca.crt,然后配置gRPC使用该证书验证:

import { readFileSync } from "fs";
import { MeterProvider } from "@opentelemetry/sdk-metrics";
import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-grpc";
import * as grpc from "@grpc/grpc-js";
import { PeriodicExportingMetricReader } from "@opentelemetry/sdk-metrics";

// 读取本地CA证书文件
const caCert = readFileSync("./ca.crt");
// 创建基于自定义CA的安全凭证
const credentials = grpc.credentials.createSsl(caCert);

const exporter = new OTLPMetricExporter({
  url: "https://otel-collector.mycompany.local:4317",
  grpcOptions: {
    credentials: credentials,
    // 如果证书CN与请求域名一致,可省略该配置
    "grpc.ssl_target_name_override": "otel-collector.mycompany.local"
  }
});

const meterProvider = new MeterProvider({
  exporters: [exporter],
});

meterProvider.addMetricReader(new PeriodicExportingMetricReader({
  exporter: exporter,
  exportIntervalMillis: 60000,
}));

方法二:通过环境变量全局信任CA证书

启动服务时指定自签名证书路径,Node.js会自动将其加入信任列表,无需修改代码:

NODE_EXTRA_CA_CERTS=./ca.crt node your-app.js

关于UNABLE_TO_VERIFY_LEAF_SIGNATURE错误的说明

这个错误是因为gRPC请求不遵循NODE_TLS_REJECT_UNAUTHORIZED环境变量(gRPC有独立的TLS配置逻辑),且自签名证书的信任链不完整。使用上述gRPC专属凭证配置即可解决该问题。

内容的提问来源于stack exchange,提问作者Amit Yaari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 10:43:10