Skip to content

Commit 5c2e707

Browse files
authored
[Azure Monitor OpenTelemetry] Add OTLP Exporters (Azure#26460)
Packages updated by this PR: @azure/monitor-opentelemetry Add support for OTLP HTTP exporters
1 parent 71f6bef commit 5c2e707

File tree

19 files changed

+560
-123
lines changed

19 files changed

+560
-123
lines changed

.vscode/cspell.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
"Idrg",
7878
"IDRG",
7979
"IMDS",
80+
"OTLP",
8081
"Kubernetes",
8182
"kusto",
8283
"lcov",

common/config/rush/pnpm-lock.yaml

Lines changed: 241 additions & 62 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

sdk/monitor/monitor-opentelemetry-exporter/package.json

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -108,13 +108,13 @@
108108
"@azure/core-auth": "^1.3.0",
109109
"@azure/core-rest-pipeline": "^1.1.0",
110110
"@opentelemetry/api": "^1.4.1",
111-
"@opentelemetry/api-logs": "^0.40.0",
112-
"@opentelemetry/core": "^1.14.0",
113-
"@opentelemetry/resources": "^1.14.0",
114-
"@opentelemetry/sdk-metrics": "^1.14.0",
115-
"@opentelemetry/sdk-trace-base": "^1.14.0",
116-
"@opentelemetry/semantic-conventions": "^1.14.0",
117-
"@opentelemetry/sdk-logs": "^0.40.0",
111+
"@opentelemetry/api-logs": "^0.41.0",
112+
"@opentelemetry/core": "^1.15.0",
113+
"@opentelemetry/resources": "^1.15.0",
114+
"@opentelemetry/sdk-metrics": "^1.15.0",
115+
"@opentelemetry/sdk-trace-base": "^1.15.0",
116+
"@opentelemetry/semantic-conventions": "^1.15.0",
117+
"@opentelemetry/sdk-logs": "^0.41.0",
118118
"tslib": "^2.2.0"
119119
},
120120
"sideEffects": false,

sdk/monitor/monitor-opentelemetry/package.json

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -90,21 +90,25 @@
9090
"@azure/monitor-opentelemetry-exporter": "1.0.0-beta.14",
9191
"@azure/opentelemetry-instrumentation-azure-sdk": "^1.0.0-beta.3",
9292
"@opentelemetry/api": "^1.4.1",
93-
"@opentelemetry/api-logs": "^0.40.0",
94-
"@opentelemetry/core": "^1.14.0",
95-
"@opentelemetry/instrumentation": "^0.40.0",
96-
"@opentelemetry/instrumentation-http": "^0.40.0",
97-
"@opentelemetry/instrumentation-mongodb": "^0.34.3",
93+
"@opentelemetry/api-logs": "^0.41.0",
94+
"@opentelemetry/core": "^1.15.0",
95+
"@opentelemetry/exporter-logs-otlp-http": "^0.41.0",
96+
"@opentelemetry/exporter-metrics-otlp-http": "^0.41.0",
97+
"@opentelemetry/exporter-trace-otlp-http": "^0.41.0",
98+
"@opentelemetry/instrumentation": "^0.41.0",
99+
"@opentelemetry/instrumentation-http": "^0.41.0",
100+
"@opentelemetry/instrumentation-mongodb": "^0.35.0",
98101
"@opentelemetry/instrumentation-mysql": "^0.33.3",
99102
"@opentelemetry/instrumentation-pg": "^0.35.3",
100103
"@opentelemetry/instrumentation-redis": "^0.34.7",
101104
"@opentelemetry/instrumentation-redis-4": "^0.34.6",
102-
"@opentelemetry/resources": "^1.14.0",
103-
"@opentelemetry/sdk-logs": "^0.40.0",
104-
"@opentelemetry/sdk-metrics": "^1.14.0",
105-
"@opentelemetry/sdk-trace-base": "^1.14.0",
106-
"@opentelemetry/sdk-trace-node": "^1.14.0",
107-
"@opentelemetry/semantic-conventions": "^1.14.0",
105+
"@opentelemetry/otlp-exporter-base": "^0.41.0",
106+
"@opentelemetry/resources": "^1.15.0",
107+
"@opentelemetry/sdk-logs": "^0.41.0",
108+
"@opentelemetry/sdk-metrics": "^1.15.0",
109+
"@opentelemetry/sdk-trace-base": "^1.15.0",
110+
"@opentelemetry/sdk-trace-node": "^1.15.0",
111+
"@opentelemetry/semantic-conventions": "^1.15.0",
108112
"tslib": "^2.2.0"
109113
},
110114
"sideEffects": false,

sdk/monitor/monitor-opentelemetry/review/monitor-opentelemetry.api.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { Logger } from '@opentelemetry/sdk-logs';
1010
import { LoggerProvider } from '@opentelemetry/sdk-logs';
1111
import { Meter } from '@opentelemetry/api';
1212
import { MeterProvider } from '@opentelemetry/sdk-metrics';
13+
import { OTLPExporterNodeConfigBase } from '@opentelemetry/otlp-exporter-base';
1314
import { Resource } from '@opentelemetry/resources';
1415
import { Tracer } from '@opentelemetry/sdk-trace-base';
1516
import { TracerProvider } from '@opentelemetry/api';
@@ -33,6 +34,9 @@ export interface AzureMonitorOpenTelemetryOptions {
3334
enableAutoCollectPerformance?: boolean;
3435
enableAutoCollectStandardMetrics?: boolean;
3536
instrumentationOptions?: InstrumentationOptions;
37+
otlpLogExporterConfig?: OTLPExporterConfig;
38+
otlpMetricExporterConfig?: OTLPExporterConfig;
39+
otlpTraceExporterConfig?: OTLPExporterConfig;
3640
resource?: Resource;
3741
samplingRatio?: number;
3842
}
@@ -48,6 +52,11 @@ export interface InstrumentationOptions {
4852
redis4?: InstrumentationConfig;
4953
}
5054

55+
// @public
56+
export interface OTLPExporterConfig extends OTLPExporterNodeConfigBase {
57+
enabled?: boolean;
58+
}
59+
5160
// (No @packageDocumentation comment for this package)
5261

5362
```

sdk/monitor/monitor-opentelemetry/src/index.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,8 @@
22
// Licensed under the MIT license.
33

44
export { AzureMonitorOpenTelemetryClient } from "./client";
5-
export { AzureMonitorOpenTelemetryOptions, InstrumentationOptions } from "./shared/types";
5+
export {
6+
AzureMonitorOpenTelemetryOptions,
7+
InstrumentationOptions,
8+
OTLPExporterConfig,
9+
} from "./shared/types";

sdk/monitor/monitor-opentelemetry/src/logs/handler.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// Licensed under the MIT license.
33

44
import { AzureMonitorLogExporter } from "@azure/monitor-opentelemetry-exporter";
5+
import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-http";
56
import {
67
LoggerProvider,
78
BatchLogRecordProcessor,
@@ -19,6 +20,7 @@ export class LogHandler {
1920
private _loggerProvider: LoggerProvider;
2021
private _logger: OtelLogger;
2122
private _azureExporter: AzureMonitorLogExporter;
23+
private _otlpExporter?: OTLPLogExporter;
2224
private _logRecordProcessor: BatchLogRecordProcessor;
2325
private _config: AzureMonitorOpenTelemetryConfig;
2426
private _metricHandler?: MetricHandler;
@@ -43,6 +45,13 @@ export class LogHandler {
4345
this._loggerProvider.addLogRecordProcessor(this._logRecordProcessor);
4446
this._azureLogProccessor = new AzureLogRecordProcessor(this._metricHandler);
4547
this._loggerProvider.addLogRecordProcessor(this._azureLogProccessor);
48+
49+
if (config.otlpLogExporterConfig?.enabled) {
50+
this._otlpExporter = new OTLPLogExporter(config.otlpLogExporterConfig);
51+
const otlpLogProcessor = new BatchLogRecordProcessor(this._otlpExporter);
52+
this._loggerProvider.addLogRecordProcessor(otlpLogProcessor);
53+
}
54+
4655
this._logger = this._loggerProvider.getLogger("AzureMonitorLogger", undefined) as OtelLogger;
4756
}
4857

sdk/monitor/monitor-opentelemetry/src/metrics/handler.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import { AzureMonitorMetricExporter } from "@azure/monitor-opentelemetry-exporter";
55
import { Meter } from "@opentelemetry/api";
6+
import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-http";
67
import {
78
MeterProvider,
89
MeterProviderOptions,
@@ -22,6 +23,7 @@ export class MetricHandler {
2223
private _collectionInterval = 60000; // 60 seconds
2324
private _meterProvider: MeterProvider;
2425
private _azureExporter: AzureMonitorMetricExporter;
26+
private _otlpExporter?: OTLPMetricExporter;
2527
private _metricReader: PeriodicExportingMetricReader;
2628
private _meter: Meter;
2729
private _perfCounterMetrics?: PerformanceCounterMetrics;
@@ -46,12 +48,30 @@ export class MetricHandler {
4648
};
4749
this._meterProvider = new MeterProvider(meterProviderConfig);
4850
this._azureExporter = new AzureMonitorMetricExporter(this._config.azureMonitorExporterConfig);
49-
const metricReaderOptions: PeriodicExportingMetricReaderOptions = {
51+
let metricReaderOptions: PeriodicExportingMetricReaderOptions = {
5052
exporter: this._azureExporter as any,
5153
exportIntervalMillis: options?.collectionInterval || this._collectionInterval,
5254
};
5355
this._metricReader = new PeriodicExportingMetricReader(metricReaderOptions);
5456
this._meterProvider.addMetricReader(this._metricReader);
57+
58+
const metricExporter = new OTLPMetricExporter({});
59+
metricReaderOptions = {
60+
exporter: metricExporter,
61+
exportIntervalMillis: options?.collectionInterval || this._collectionInterval,
62+
};
63+
this._metricReader = new PeriodicExportingMetricReader(metricReaderOptions);
64+
this._meterProvider.addMetricReader(this._metricReader);
65+
66+
if (config.otlpMetricExporterConfig?.enabled) {
67+
this._otlpExporter = new OTLPMetricExporter(config.otlpMetricExporterConfig);
68+
const otlpMetricReader = new PeriodicExportingMetricReader({
69+
exporter: this._otlpExporter,
70+
exportIntervalMillis: options?.collectionInterval || this._collectionInterval,
71+
});
72+
this._meterProvider.addMetricReader(otlpMetricReader);
73+
}
74+
5575
this._meter = this._meterProvider.getMeter("AzureMonitorMeter");
5676
}
5777

sdk/monitor/monitor-opentelemetry/src/shared/config.ts

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@ import {
77
detectResourcesSync,
88
envDetectorSync,
99
} from "@opentelemetry/resources";
10-
import { AzureMonitorOpenTelemetryOptions, InstrumentationOptions } from "./types";
10+
import {
11+
AzureMonitorOpenTelemetryOptions,
12+
InstrumentationOptions,
13+
OTLPExporterConfig,
14+
} from "./types";
1115
import { AzureMonitorExporterOptions } from "@azure/monitor-opentelemetry-exporter";
1216
import { JsonConfig } from "./jsonConfig";
1317
import { Logger } from "./logging";
@@ -20,6 +24,12 @@ export class AzureMonitorOpenTelemetryConfig implements AzureMonitorOpenTelemetr
2024
public samplingRatio: number;
2125
/** Azure Monitor Exporter Configuration */
2226
public azureMonitorExporterConfig: AzureMonitorExporterOptions;
27+
/** OTLP Trace Exporter Configuration */
28+
public otlpTraceExporterConfig: OTLPExporterConfig;
29+
/** OTLP Metric Exporter Configuration */
30+
public otlpMetricExporterConfig: OTLPExporterConfig;
31+
/** OTLP Log Exporter Configuration */
32+
public otlpLogExporterConfig: OTLPExporterConfig;
2333
/**
2434
* Sets the state of performance tracking (enabled by default)
2535
* if true performance counters will be collected every second and sent to Azure Monitor
@@ -54,6 +64,9 @@ export class AzureMonitorOpenTelemetryConfig implements AzureMonitorOpenTelemetr
5464
constructor(options?: AzureMonitorOpenTelemetryOptions) {
5565
// Default values
5666
this.azureMonitorExporterConfig = {};
67+
this.otlpLogExporterConfig = {};
68+
this.otlpMetricExporterConfig = {};
69+
this.otlpTraceExporterConfig = {};
5770
this.enableAutoCollectPerformance = true;
5871
this.enableAutoCollectStandardMetrics = true;
5972
this.samplingRatio = 1;
@@ -77,6 +90,18 @@ export class AzureMonitorOpenTelemetryConfig implements AzureMonitorOpenTelemetr
7790
this.azureMonitorExporterConfig,
7891
options.azureMonitorExporterConfig
7992
);
93+
this.otlpTraceExporterConfig = Object.assign(
94+
this.otlpTraceExporterConfig,
95+
options.otlpTraceExporterConfig
96+
);
97+
this.otlpMetricExporterConfig = Object.assign(
98+
this.otlpMetricExporterConfig,
99+
options.otlpMetricExporterConfig
100+
);
101+
this.otlpLogExporterConfig = Object.assign(
102+
this.otlpLogExporterConfig,
103+
options.otlpLogExporterConfig
104+
);
80105
this.instrumentationOptions = Object.assign(
81106
this.instrumentationOptions,
82107
options.instrumentationOptions
@@ -109,6 +134,18 @@ export class AzureMonitorOpenTelemetryConfig implements AzureMonitorOpenTelemetr
109134
this.azureMonitorExporterConfig,
110135
jsonConfig.azureMonitorExporterConfig
111136
);
137+
this.otlpTraceExporterConfig = Object.assign(
138+
this.otlpTraceExporterConfig,
139+
jsonConfig.otlpTraceExporterConfig
140+
);
141+
this.otlpMetricExporterConfig = Object.assign(
142+
this.otlpMetricExporterConfig,
143+
jsonConfig.otlpMetricExporterConfig
144+
);
145+
this.otlpLogExporterConfig = Object.assign(
146+
this.otlpLogExporterConfig,
147+
jsonConfig.otlpLogExporterConfig
148+
);
112149
this.instrumentationOptions = Object.assign(
113150
this.instrumentationOptions,
114151
jsonConfig.instrumentationOptions

sdk/monitor/monitor-opentelemetry/src/shared/jsonConfig.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,11 @@
33

44
import * as fs from "fs";
55
import * as path from "path";
6-
import { AzureMonitorOpenTelemetryOptions, InstrumentationOptions } from "./types";
6+
import {
7+
AzureMonitorOpenTelemetryOptions,
8+
InstrumentationOptions,
9+
OTLPExporterConfig,
10+
} from "./types";
711
import { AzureMonitorExporterOptions } from "@azure/monitor-opentelemetry-exporter";
812
import { Logger } from "./logging";
913

@@ -19,6 +23,12 @@ export class JsonConfig implements AzureMonitorOpenTelemetryOptions {
1923
public samplingRatio?: number;
2024
/** Azure Monitor Exporter Configuration */
2125
public azureMonitorExporterConfig?: AzureMonitorExporterOptions;
26+
/** OTLP Trace Exporter Configuration */
27+
public otlpTraceExporterConfig?: OTLPExporterConfig;
28+
/** OTLP Metric Exporter Configuration */
29+
public otlpMetricExporterConfig?: OTLPExporterConfig;
30+
/** OTLP Log Exporter Configuration */
31+
public otlpLogExporterConfig?: OTLPExporterConfig;
2232
/**
2333
* Sets the state of performance tracking (enabled by default)
2434
* if true performance counters will be collected every second and sent to Azure Monitor
@@ -80,6 +90,9 @@ export class JsonConfig implements AzureMonitorOpenTelemetryOptions {
8090
try {
8191
const jsonConfig: AzureMonitorOpenTelemetryOptions = JSON.parse(jsonString);
8292
this.azureMonitorExporterConfig = jsonConfig.azureMonitorExporterConfig;
93+
this.otlpLogExporterConfig = jsonConfig.otlpLogExporterConfig;
94+
this.otlpMetricExporterConfig = jsonConfig.otlpMetricExporterConfig;
95+
this.otlpTraceExporterConfig = jsonConfig.otlpTraceExporterConfig;
8396
this.samplingRatio = jsonConfig.samplingRatio;
8497
this.enableAutoCollectPerformance = jsonConfig.enableAutoCollectPerformance;
8598
this.enableAutoCollectStandardMetrics = jsonConfig.enableAutoCollectStandardMetrics;

0 commit comments

Comments
 (0)