我在 TypeScript 项目中使用 OpenTelemetry,特别是 @opentelemetry/exporter-prometheus 在 /metrics 上公开指标。我已将其与 @opentelemetry/sdk-metrics 中的 MeterProvider 配对:
import { PrometheusExporter } from '@opentelemetry/exporter-prometheus';
import { MeterProvider } from '@opentelemetry/sdk-metrics';
import { config } from '../config';
export const startPrometheusReceiver = () => {
const exporter = new PrometheusExporter({
port: config.port,
endpoint: '/metrics',
});
const meterProviderProm = new MeterProvider({
readers: [exporter], // The error is here under exporter.
interval: 1000,
});
return meterProviderProm;
};
但是,TypeScript 在 PrometheusExporter 和 MetricReader 之间引发兼容性错误。我收到的错误是:
Type 'PrometheusExporter' is not assignable to type 'MetricReader'.
Types have separate declarations of a private property '_shutdown'.
尽管出现此错误,代码仍成功运行,并且指标按预期公开在 /metrics 上。我怀疑这可能与 0.x 版本的 @opentelemetry/exporter-prometheus 和 1.x 版本的 @opentelemetry/sdk-metrics 之间的兼容性问题有关:
"@opentelemetry/exporter-prometheus": "^0.53.0",
"@opentelemetry/sdk-metrics": "^1.27.0"
我尝试直接将 PrometheusExporter 转换为 MetricReader(例如,将导出器转换为 MetricReader)以避免 TypeScript 错误,但这并没有解决根本问题。此外,我探索了使用PeriodicExportingMetricReader,但它似乎并没有解决兼容性问题。
我希望 PrometheusExporter 能够与 MeterProvider 一起使用,而不会出现任何 TypeScript 错误,因为 PrometheusExporter 应该扩展 MetricReader。我正在寻找解决此 TypeScript 错误的解决方法或确认这些 OpenTelemetry 包之间的兼容性问题。
“@opentelemetry/exporter-prometheus”:“^0.54.0”似乎解决了这个问题。