-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Monitor-OpenTelemetry-Exporter] Add Performance Tests for the Export…
…er (#27100) ### Packages impacted by this PR @azure/monitor-opentelemetry-exporter ### Describe the problem that is addressed by this PR Created perf tests for creating and exporting spans, metrics and logs. ### Checklists - [x] Added impacted package name to the issue description - [ ] Does this PR needs any fixes in the SDK Generator?** _(If so, create an Issue in the [Autorest/typescript](https://github.com/Azure/autorest.typescript) repository and link it here)_ - [ ] Added a changelog (if necessary)
- Loading branch information
1 parent
1bee622
commit 5a60584
Showing
12 changed files
with
2,195 additions
and
2,007 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
### Guide | ||
|
||
1. Build the monitor-opentelemetry perf tests package `rush build -t perf-monitor-opentelemetry`. | ||
2. Copy the `sample.env` file and name it as `.env`. | ||
3. Create an Application Insights resource and populate the `.env` file with connectionString. | ||
4. Run the tests as follows: | ||
|
||
- Exporting Spans | ||
- `npm run perf-test:node -- SpanExportTest --warmup 1 --iterations 1 --parallel 2 --duration 15` | ||
- Exporting Metrics | ||
- `npm run perf-test:node -- MetricExportTest --warmup 1 --iterations 1 --parallel 2 --duration 15` | ||
- Exporting Logs | ||
- `npm run perf-test:node -- LogExportTest --warmup 1 --iterations 1 --parallel 2 --duration 15` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
{ | ||
"name": "@azure-tests/perf-monitor-opentelemetry", | ||
"sdk-type": "perf-test", | ||
"version": "1.0.0", | ||
"description": "", | ||
"main": "", | ||
"keywords": [], | ||
"author": "", | ||
"license": "ISC", | ||
"dependencies": { | ||
"@azure/test-utils-perf": "^1.0.0", | ||
"dotenv": "^16.0.0", | ||
"uuid": "^8.3.0", | ||
"@opentelemetry/api": "^1.5.0", | ||
"@azure/monitor-opentelemetry": "^1.0.0-beta.4", | ||
"@opentelemetry/api-logs": "^0.43.0", | ||
"@opentelemetry/sdk-logs": "^0.43.0" | ||
}, | ||
"devDependencies": { | ||
"@types/uuid": "^8.0.0", | ||
"@types/node": "^14.0.0", | ||
"eslint": "^8.0.0", | ||
"prettier": "^2.5.1", | ||
"rimraf": "^3.0.0", | ||
"tslib": "^2.2.0", | ||
"ts-node": "^10.0.0", | ||
"typescript": "~5.0.0" | ||
}, | ||
"private": true, | ||
"scripts": { | ||
"perf-test:node": "npm run build && node dist-esm/index.spec.js", | ||
"audit": "node ../../../common/scripts/rush-audit.js && rimraf node_modules package-lock.json && npm i --package-lock-only 2>&1 && npm audit", | ||
"build": "npm run clean && tsc -p .", | ||
"build:samples": "echo skipped", | ||
"build:test": "echo skipped", | ||
"check-format": "prettier --list-different --config ../../../../.prettierrc.json --ignore-path ../../../../.prettierignore \"test/**/*.ts\" \"*.{js,json}\"", | ||
"clean": "rimraf dist dist-* types *.tgz *.log", | ||
"format": "prettier --write --config ../../../../.prettierrc.json --ignore-path ../../../../.prettierignore \"test/**/*.ts\" \"*.{js,json}\"", | ||
"integration-test:browser": "echo skipped", | ||
"integration-test:node": "echo skipped", | ||
"integration-test": "echo skipped", | ||
"lint:fix": "eslint --no-eslintrc -c ../../../.eslintrc.internal.json package.json test --ext .ts --fix --fix-type [problem,suggestion]", | ||
"lint": "eslint --no-eslintrc -c ../../../.eslintrc.internal.json package.json test --ext .ts", | ||
"pack": "npm pack 2>&1", | ||
"unit-test:browser": "echo skipped", | ||
"unit-test:node": "echo skipped", | ||
"unit-test": "echo skipped", | ||
"test:browser": "echo skipped", | ||
"test:node": "echo skipped", | ||
"test": "echo skipped" | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
APPLICATIONINSIGHTS_CONNECTION_STRING=<your connection string> |
10 changes: 10 additions & 0 deletions
10
sdk/monitor/perf-tests/monitor-opentelemetry/test/index.spec.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
// Copyright (c) Microsoft Corporation. | ||
// Licensed under the MIT License. | ||
|
||
import { createPerfProgram } from "@azure/test-utils-perf"; | ||
import { SpanExportTest } from "./spanExport.spec"; | ||
import { LogExportTest } from "./logExport.spec"; | ||
import { MetricExportTest } from "./metricExport.spec"; | ||
|
||
const perfProgram = createPerfProgram(SpanExportTest, LogExportTest, MetricExportTest); | ||
perfProgram.run(); |
30 changes: 30 additions & 0 deletions
30
sdk/monitor/perf-tests/monitor-opentelemetry/test/logExport.spec.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
// Copyright (c) Microsoft Corporation. | ||
// Licensed under the MIT License. | ||
|
||
import { PerfOptionDictionary } from "@azure/test-utils-perf"; | ||
import { MonitorOpenTelemetryTest } from "./monitorOpenTelemetry.spec"; | ||
import { logs, SeverityNumber } from "@opentelemetry/api-logs"; | ||
|
||
type MonitorOpenTelemetryTestOptions = Record<string, unknown>; | ||
|
||
export class LogExportTest extends MonitorOpenTelemetryTest<MonitorOpenTelemetryTestOptions> { | ||
public options: PerfOptionDictionary<MonitorOpenTelemetryTestOptions> = {}; | ||
constructor() { | ||
super(); | ||
} | ||
|
||
async run(): Promise<void> { | ||
try { | ||
const logger = logs.getLogger("test-logger"); | ||
logger.emit({ | ||
severityText: "INFO", | ||
severityNumber: SeverityNumber.INFO, | ||
body: "test message", | ||
attributes: { key: "value" }, | ||
}); | ||
} catch (error) { | ||
console.error("Error running logs perf test:", error); | ||
process.exit(1); | ||
} | ||
} | ||
} |
21 changes: 21 additions & 0 deletions
21
sdk/monitor/perf-tests/monitor-opentelemetry/test/metricExport.spec.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
// Copyright (c) Microsoft Corporation. | ||
// Licensed under the MIT License. | ||
|
||
import { PerfOptionDictionary } from "@azure/test-utils-perf"; | ||
import { MonitorOpenTelemetryTest } from "./monitorOpenTelemetry.spec"; | ||
import { metrics } from "@opentelemetry/api"; | ||
|
||
type MonitorOpenTelemetryTestOptions = Record<string, unknown>; | ||
|
||
export class MetricExportTest extends MonitorOpenTelemetryTest<MonitorOpenTelemetryTestOptions> { | ||
public options: PerfOptionDictionary<MonitorOpenTelemetryTestOptions> = {}; | ||
constructor() { | ||
super(); | ||
} | ||
|
||
async run(): Promise<void> { | ||
const meter = metrics.getMeter("testMeter"); | ||
const customCounter = meter.createCounter("TestCounter"); | ||
customCounter.add(1); | ||
} | ||
} |
21 changes: 21 additions & 0 deletions
21
sdk/monitor/perf-tests/monitor-opentelemetry/test/monitorOpenTelemetry.spec.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
// Copyright (c) Microsoft Corporation. | ||
// Licensed under the MIT license. | ||
|
||
import { PerfTest } from "@azure/test-utils-perf"; | ||
import { useAzureMonitor, AzureMonitorOpenTelemetryOptions } from "@azure/monitor-opentelemetry"; | ||
|
||
import * as dotenv from "dotenv"; | ||
dotenv.config(); | ||
|
||
export abstract class MonitorOpenTelemetryTest<TOptions> extends PerfTest<TOptions> { | ||
constructor() { | ||
super(); | ||
const options: AzureMonitorOpenTelemetryOptions = { | ||
azureMonitorExporterOptions: { | ||
connectionString: | ||
process.env["APPLICATIONINSIGHTS_CONNECTION_STRING"] || "<your connection string>", | ||
}, | ||
}; | ||
useAzureMonitor(options); | ||
} | ||
} |
40 changes: 40 additions & 0 deletions
40
sdk/monitor/perf-tests/monitor-opentelemetry/test/spanExport.spec.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
// Copyright (c) Microsoft Corporation. | ||
// Licensed under the MIT License. | ||
|
||
import { PerfOptionDictionary } from "@azure/test-utils-perf"; | ||
import { MonitorOpenTelemetryTest } from "./monitorOpenTelemetry.spec"; | ||
import { trace, Span, Tracer, context } from "@opentelemetry/api"; | ||
|
||
type MonitorOpenTelemetryTestOptions = Record<string, unknown>; | ||
|
||
export class SpanExportTest extends MonitorOpenTelemetryTest<MonitorOpenTelemetryTestOptions> { | ||
public options: PerfOptionDictionary<MonitorOpenTelemetryTestOptions> = {}; | ||
constructor() { | ||
super(); | ||
} | ||
|
||
async run(): Promise<void> { | ||
async function main() { | ||
const tracer = trace.getTracer("testTracer"); | ||
const parentSpan = tracer.startSpan("main"); | ||
doWork(parentSpan, tracer); | ||
parentSpan.end(); | ||
} | ||
|
||
function doWork(parent: Span, tracer: Tracer) { | ||
const ctx = trace.setSpan(context.active(), parent); | ||
const span = tracer.startSpan("doWork", undefined, ctx); | ||
for (let i = 0; i <= 1; i += 1) { | ||
continue; | ||
} | ||
span.setAttribute("key", "value"); | ||
span.addEvent("invoking doWork"); | ||
span.end(); | ||
} | ||
|
||
main().catch((error) => { | ||
console.error("Error running perf test:", error.message); | ||
process.exit(1); | ||
}); | ||
} | ||
} |
12 changes: 12 additions & 0 deletions
12
sdk/monitor/perf-tests/monitor-opentelemetry/tsconfig.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
{ | ||
"extends": "../../../../tsconfig.package", | ||
"compilerOptions": { | ||
"module": "commonjs", | ||
"outDir": "./dist-esm", | ||
"declarationDir": "./types", | ||
"paths": { | ||
"@azure/monitor-opentelemetry-exporter": ["./src/index"] | ||
} | ||
}, | ||
"include": ["src/**/*.ts", "test/**/*.ts", "samples-dev/**/*.ts"] | ||
} |