import * as opentelemetry from '@opentelemetry/sdk-node';
import { PrometheusExporter } from '@opentelemetry/exporter-prometheus';
import type { AnyServiceLocals, DelayLoadServiceStartOptions, RequestLocals, ServiceLocals } from '../types.js';
import type { ConfigurationSchema } from '../config/schema.js';
/**
 * OpenTelemetry is not friendly to the idea of stopping
 * and starting itself, it seems. So we can only keep a global
 * instance of the infrastructure no matter how many times
 * you start/stop your service (this is mostly only relevant for testing).
 * In addition, since we have to load it right away before configuration
 * is available, we can't use configuration to decide anything.
 */
export declare function startGlobalTelemetry(serviceName: string, customizer?: ((options: Partial<opentelemetry.NodeSDKConfiguration>) => Partial<opentelemetry.NodeSDKConfiguration>) | undefined): Promise<void>;
export declare function getNodeTelemetrySdk(): opentelemetry.NodeSDK | undefined;
export declare function getGlobalPrometheusExporter(): PrometheusExporter | undefined;
export declare function shutdownGlobalTelemetry(): Promise<void>;
export declare function startWithTelemetry<SLocals extends AnyServiceLocals = ServiceLocals<ConfigurationSchema>, RLocals extends RequestLocals = RequestLocals>(options: DelayLoadServiceStartOptions): Promise<{
    app: import("../types.js").ServiceExpress<SLocals>;
    codepath: "build" | "src" | "dist" | undefined;
    server: import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse> | import("https").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>;
}>;
export { setTelemetryHooks } from './instrumentations.js';
