Skip to content
2 changes: 1 addition & 1 deletion sdk/monitor/monitor-opentelemetry/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@
"@opentelemetry/sdk-trace-node": "^1.21.0",
"@opentelemetry/semantic-conventions": "^1.21.0",
"tslib": "^2.2.0",
"@microsoft/applicationinsights-web-snippet": "^1.0.1",
"@microsoft/applicationinsights-web-snippet": "~1.0.1",
"@opentelemetry/resource-detector-azure": "^0.2.4"
},
"sideEffects": false,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import {
isSyntheticLoad,
isTraceTelemetry,
} from "./utils";
import { StandardMetricIds } from "./types";

/**
* Azure Monitor Standard Metrics
Expand All @@ -45,35 +46,35 @@ export class StandardMetrics {
*/
constructor(config: InternalConfig, options?: { collectionInterval: number }) {
this._config = config;
const meterProviderConfig: MeterProviderOptions = {
resource: this._config.resource,
};
this._meterProvider = new MeterProvider(meterProviderConfig);
this._azureExporter = new AzureMonitorMetricExporter(this._config.azureMonitorExporterOptions);
const metricReaderOptions: PeriodicExportingMetricReaderOptions = {
exporter: this._azureExporter as any,
exportIntervalMillis: options?.collectionInterval || this._collectionInterval,
};
this._metricReader = new PeriodicExportingMetricReader(metricReaderOptions);
this._meterProvider.addMetricReader(this._metricReader);
const meterProviderConfig: MeterProviderOptions = {
resource: this._config.resource,
readers: [this._metricReader],
};
this._meterProvider = new MeterProvider(meterProviderConfig);
this._meter = this._meterProvider.getMeter("AzureMonitorStandardMetricsMeter");
this._incomingRequestDurationHistogram = this._meter.createHistogram(
"azureMonitor.http.requestDuration",
StandardMetricIds.REQUEST_DURATION,
{
valueType: ValueType.DOUBLE,
},
);
this._outgoingRequestDurationHistogram = this._meter.createHistogram(
"azureMonitor.http.dependencyDuration",
StandardMetricIds.DEPENDENCIES_DURATION,
{
valueType: ValueType.DOUBLE,
},
);

this._exceptionsCounter = this._meter.createCounter("azureMonitor.exceptionCount", {
this._exceptionsCounter = this._meter.createCounter(StandardMetricIds.EXCEPTIONS_COUNT, {
valueType: ValueType.INT,
});
this._tracesCounter = this._meter.createCounter("azureMonitor.traceCount", {
this._tracesCounter = this._meter.createCounter(StandardMetricIds.TRACES_COUNT, {
valueType: ValueType.INT,
});
}
Expand Down
14 changes: 7 additions & 7 deletions sdk/monitor/monitor-opentelemetry/src/metrics/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,6 @@ export interface MetricDependencyDimensions extends StandardMetricBaseDimensions
operationSynthetic?: string;
}

export enum StandardMetricNames {
HTTP_REQUEST_DURATION = "azureMonitor.http.requestDuration",
HTTP_DEPENDENCY_DURATION = "azureMonitor.http.dependencyDuration",
EXCEPTION_COUNT = "azureMonitor.exceptionCount",
TRACE_COUNT = "azureMonitor.traceCount",
}

export enum PerformanceCounterMetricNames {
PRIVATE_BYTES = "\\Process(??APP_WIN32_PROC??)\\Private Bytes",
AVAILABLE_BYTES = "\\Memory\\Available Bytes",
Expand Down Expand Up @@ -71,3 +64,10 @@ export const StandardMetricPropertyNames: { [key in MetricDimensionTypeKeys]: st
metricId: "_MS.MetricId",
IsAutocollected: "_MS.IsAutocollected",
};

export enum StandardMetricIds {
REQUEST_DURATION = "requests/duration",
DEPENDENCIES_DURATION = "dependencies/duration",
EXCEPTIONS_COUNT = "exceptions/count",
TRACES_COUNT = "traces/count",
}
9 changes: 5 additions & 4 deletions sdk/monitor/monitor-opentelemetry/src/metrics/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,15 @@ import {
MetricDimensionTypeKeys,
MetricRequestDimensions,
StandardMetricBaseDimensions,
StandardMetricIds,
StandardMetricPropertyNames,
} from "./types";
import { LogRecord } from "@opentelemetry/sdk-logs";
import { Resource } from "@opentelemetry/resources";

export function getRequestDimensions(span: ReadableSpan): Attributes {
const dimensions: MetricRequestDimensions = getBaseDimensions(span.resource);
dimensions.metricId = "requests/duration";
dimensions.metricId = StandardMetricIds.REQUEST_DURATION;
const statusCode = String(span.attributes["http.status_code"]);
dimensions.requestResultCode = statusCode;
dimensions.requestSuccess = statusCode === "200" ? "True" : "False";
Expand All @@ -31,7 +32,7 @@ export function getRequestDimensions(span: ReadableSpan): Attributes {

export function getDependencyDimensions(span: ReadableSpan): Attributes {
const dimensions: MetricDependencyDimensions = getBaseDimensions(span.resource);
dimensions.metricId = "dependencies/duration";
dimensions.metricId = StandardMetricIds.DEPENDENCIES_DURATION;
const statusCode = String(span.attributes["http.status_code"]);
dimensions.dependencyTarget = getDependencyTarget(span.attributes);
dimensions.dependencyResultCode = statusCode;
Expand All @@ -45,13 +46,13 @@ export function getDependencyDimensions(span: ReadableSpan): Attributes {

export function getExceptionDimensions(resource: Resource): Attributes {
const dimensions: StandardMetricBaseDimensions = getBaseDimensions(resource);
dimensions.metricId = "exceptions/count";
dimensions.metricId = StandardMetricIds.EXCEPTIONS_COUNT;
return dimensions as Attributes;
}

export function getTraceDimensions(resource: Resource): Attributes {
const dimensions: StandardMetricBaseDimensions = getBaseDimensions(resource);
dimensions.metricId = "traces/count";
dimensions.metricId = StandardMetricIds.TRACES_COUNT;
return dimensions as Attributes;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,10 +104,10 @@ describe("#StandardMetricsHandler", () => {
assert.strictEqual(scopeMetrics.length, 1, "scopeMetrics count");
const metrics = scopeMetrics[0].metrics;
assert.strictEqual(metrics.length, 4, "metrics count");
assert.strictEqual(metrics[0].descriptor.name, "azureMonitor.http.requestDuration");
assert.strictEqual(metrics[1].descriptor.name, "azureMonitor.http.dependencyDuration");
assert.strictEqual(metrics[2].descriptor.name, "azureMonitor.exceptionCount");
assert.strictEqual(metrics[3].descriptor.name, "azureMonitor.traceCount");
assert.strictEqual(metrics[0].descriptor.name, "requests/duration");
assert.strictEqual(metrics[1].descriptor.name, "dependencies/duration");
assert.strictEqual(metrics[2].descriptor.name, "exceptions/count");
assert.strictEqual(metrics[3].descriptor.name, "traces/count");

// Requests
assert.strictEqual(metrics[0].dataPoints.length, 2, "dataPoints count");
Expand Down Expand Up @@ -211,7 +211,7 @@ describe("#StandardMetricsHandler", () => {
assert.strictEqual(scopeMetrics.length, 1, "scopeMetrics count");
const metrics = scopeMetrics[0].metrics;
assert.strictEqual(metrics.length, 1, "metrics count");
assert.strictEqual(metrics[0].descriptor.name, "azureMonitor.http.requestDuration");
assert.strictEqual(metrics[0].descriptor.name, "requests/duration");
assert.equal(metrics[0].dataPoints[0].attributes["operation/synthetic"], "True");
});

Expand Down