forked from Azure/azure-sdk-for-java
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Perf tests for Azure Monitor Query (Azure#23280)
* Perf tests for Azure Monitor Query * fix docs * add module to version_client.txt * Update sdk/monitor/azure-monitor-query-perf/pom.xml Co-authored-by: Alan Zimmer <48699787+alzimmermsft@users.noreply.github.com> * Update sdk/monitor/azure-monitor-query-perf/pom.xml Co-authored-by: Alan Zimmer <48699787+alzimmermsft@users.noreply.github.com> Co-authored-by: Alan Zimmer <48699787+alzimmermsft@users.noreply.github.com>
- Loading branch information
1 parent
566badb
commit ffba1ab
Showing
12 changed files
with
478 additions
and
0 deletions.
There are no files selected for viewing
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,5 @@ | ||
# Release History | ||
|
||
## 1.0.0-beta.1 (Unreleased) | ||
|
||
|
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,67 @@ | ||
# Azure Monitor Query Performance test client library for Java | ||
|
||
Represents Performance tests for Azure Monitor Query SDK for Java. | ||
|
||
## Getting started | ||
|
||
### Prerequisites | ||
|
||
- A [Java Development Kit (JDK)][jdk_link], version 8 or later. | ||
- [Azure Subscription][azure_subscription] | ||
|
||
#### Setup for test resources | ||
|
||
You will need the following environment variables for running the tests to access the live resources: | ||
|
||
``` | ||
AZURE_TENANT_ID=<Tenant ID of Azure subscription> | ||
AZURE_CLIENT_ID=<Client ID of Azure AAD application> | ||
AZURE_CLIENT_SECRET=<Client secret of Azure AAD application> | ||
AZURE_MONITOR_LOGS_WORKSPACE_ID=<Workspace ID of Log Analytics workspace> | ||
AZURE_MONITOR_METRICS_RESOURCE_ID=<Resource ID of an Azure Resource> | ||
``` | ||
|
||
## Key concepts | ||
|
||
## Examples | ||
#### Executing the performance test | ||
1. Compile the performance project into a standalone jar using the command from the root of the perf project folder | ||
``` | ||
mvn clean package -f sdk/monitor/azure-monitor-query-perf/pom.xml | ||
``` | ||
|
||
2. Execute the corresponding perf test in the project using the command. | ||
``` | ||
java -jar <path-to-packaged-jar-with-dependencies-from-step-1> <options-for-the-test> | ||
java -jar sdk/monitor/azure-monitor-query-perf/target/azure-monitor-query-perf-1.0.0-beta.1-jar-with-dependencies.jar logsquery --warmup 1 --iterations 1 --parallel 50 --duration 15 --count 1000 | ||
java -jar sdk/monitor/azure-monitor-query-perf/target/azure-monitor-query-perf-1.0.0-beta.1-jar-with-dependencies.jar logsbatchquery --warmup 1 --iterations 1 --parallel 50 --duration 15 --count 1000 | ||
java -jar sdk/monitor/azure-monitor-query-perf/target/azure-monitor-query-perf-1.0.0-beta.1-jar-with-dependencies.jar logsqueryasmodel --warmup 1 --iterations 1 --parallel 50 --duration 15 --count 1000 | ||
java -jar sdk/monitor/azure-monitor-query-perf/target/azure-monitor-query-perf-1.0.0-beta.1-jar-with-dependencies.jar metricsquery --warmup 1 --iterations 1 --parallel 50 --duration 15 --count 1000 | ||
``` | ||
|
||
#### Common perf test command line options for Azure Monitor Query | ||
- `--duration` - Number of seconds to run the main test for. Default is 10. | ||
- `--iterations` - Number of iterations of main test loop. | ||
- `--parallel` - Number of operations to execute in parallel, | ||
- `--warmup` - Duration of test warmup time in seconds before the test attributes are calculated. | ||
|
||
Use [PerfStressOptions](https://github.com/Azure/azure-sdk-for-java/blob/main/common/perf-test-core/src/main/java/com/azure/perf/test/core/PerfStressOptions.java) | ||
for the other command line options that could be used. | ||
|
||
## Troubleshooting | ||
|
||
## Next steps | ||
|
||
## Contributing | ||
|
||
For details on contributing to this repository, see the [contributing guide](https://github.com/Azure/azure-sdk-for-java/blob/main/CONTRIBUTING.md). | ||
|
||
1. Fork it | ||
1. Create your feature branch (`git checkout -b my-new-feature`) | ||
1. Commit your changes (`git commit -am 'Add some feature'`) | ||
1. Push to the branch (`git push origin my-new-feature`) | ||
1. Create new Pull Request | ||
|
||
<!-- LINKS --> | ||
[azure_subscription]: https://azure.microsoft.com/free | ||
[jdk_link]: https://docs.microsoft.com/java/azure/jdk/?view=azure-java-stable |
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,68 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<project xmlns="http://maven.apache.org/POM/4.0.0" | ||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||
<modelVersion>4.0.0</modelVersion> | ||
|
||
<parent> | ||
<groupId>com.azure</groupId> | ||
<artifactId>azure-client-sdk-parent</artifactId> | ||
<version>1.7.0</version> <!-- {x-version-update;com.azure:azure-client-sdk-parent;current} --> | ||
<relativePath>../../parents/azure-client-sdk-parent</relativePath> | ||
</parent> | ||
|
||
<groupId>com.azure</groupId> | ||
<artifactId>azure-monitor-query-perf</artifactId> | ||
<version>1.0.0-beta.1</version> <!-- {x-version-update;com.azure:azure-monitor-query-perf;current} --> | ||
<packaging>jar</packaging> | ||
|
||
<name>Microsoft Azure client library for Logs and Metrics query performance tests</name> | ||
|
||
<dependencies> | ||
<dependency> | ||
<groupId>com.azure</groupId> | ||
<artifactId>perf-test-core</artifactId> | ||
<version>1.0.0-beta.1</version> <!-- {x-version-update;com.azure:perf-test-core;current} --> | ||
</dependency> | ||
<dependency> | ||
<groupId>com.azure</groupId> | ||
<artifactId>azure-monitor-query</artifactId> | ||
<version>1.0.0-beta.3</version> <!-- {x-version-update;com.azure:azure-monitor-query;current} --> | ||
</dependency> | ||
<dependency> | ||
<groupId>com.azure</groupId> | ||
<artifactId>azure-identity</artifactId> | ||
<version>1.3.4</version> <!-- {x-version-update;com.azure:azure-identity;dependency} --> | ||
</dependency> | ||
</dependencies> | ||
|
||
<build> | ||
<plugins> | ||
<plugin> | ||
<groupId>org.apache.maven.plugins</groupId> | ||
<artifactId>maven-assembly-plugin</artifactId> | ||
<version>3.2.0</version> <!-- {x-version-update;org.apache.maven.plugins:maven-assembly-plugin;external_dependency} --> | ||
<executions> | ||
<execution> | ||
<phase>package</phase> | ||
<goals> | ||
<goal>single</goal> | ||
</goals> | ||
<configuration> | ||
<archive> | ||
<manifest> | ||
<mainClass> | ||
com.azure.monitor.query.perf.App | ||
</mainClass> | ||
</manifest> | ||
</archive> | ||
<descriptorRefs> | ||
<descriptorRef>jar-with-dependencies</descriptorRef> | ||
</descriptorRefs> | ||
</configuration> | ||
</execution> | ||
</executions> | ||
</plugin> | ||
</plugins> | ||
</build> | ||
</project> |
34 changes: 34 additions & 0 deletions
34
sdk/monitor/azure-monitor-query-perf/src/main/java/com/azure/monitor/query/perf/App.java
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,34 @@ | ||
// Copyright (c) Microsoft Corporation. All rights reserved. | ||
// Licensed under the MIT License. | ||
|
||
package com.azure.monitor.query.perf; | ||
|
||
import com.azure.perf.test.core.PerfStressProgram; | ||
|
||
/** | ||
* Runs Azure Monitor Query performance tests. | ||
* <p> | ||
* Test scenarios: | ||
* <ul> | ||
* <li>Query logs from Azure Monitor Log Analytics workspace</li> | ||
* <li>Query metrics from Azure Monitor for an Azure resource</li> | ||
* </ul> | ||
* To run performance tests from the command line, package the project into an uber jar using {@code mvn clean | ||
* package}. Then run the program using {@code java -jar compiled-jar-with-dependencies-path} | ||
* <p> | ||
* To run performance tests in IntelliJ, set all the required environment variables via {@code Run -> Edit | ||
* Configurations} section. Then run the App's main method. | ||
*/ | ||
public class App { | ||
/** | ||
* Main method to invoke performance tests | ||
* | ||
* @param args Arguments to the performance tests. | ||
*/ | ||
public static void main(String[] args) { | ||
PerfStressProgram.run(new Class<?>[]{LogsQueryTest.class, | ||
LogsBatchQueryTest.class, | ||
LogsQueryAsModelTest.class, | ||
MetricsQueryTest.class}, args); | ||
} | ||
} |
86 changes: 86 additions & 0 deletions
86
...itor/azure-monitor-query-perf/src/main/java/com/azure/monitor/query/perf/CustomModel.java
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,86 @@ | ||
// Copyright (c) Microsoft Corporation. All rights reserved. | ||
// Licensed under the MIT License. | ||
|
||
package com.azure.monitor.query.perf; | ||
|
||
import java.time.OffsetDateTime; | ||
|
||
/** | ||
* A custom model to read the logs query result. | ||
*/ | ||
public final class CustomModel { | ||
private OffsetDateTime timeGenerated; | ||
private String tenantId; | ||
private String id; | ||
private String source; | ||
private Boolean success; | ||
private Double durationMs; | ||
private Object properties; | ||
private String operationName; | ||
private String operationId; | ||
|
||
|
||
/** | ||
* Returns the time the log event was generated. | ||
* @return the time the log event was generated. | ||
*/ | ||
public OffsetDateTime getTimeGenerated() { | ||
return timeGenerated; | ||
} | ||
|
||
/** | ||
* Returns the tenant id of the resource for which this log was recorded. | ||
* @return the tenant id of the resource for which this log was recorded. | ||
*/ | ||
public String getTenantId() { | ||
return tenantId; | ||
} | ||
|
||
/** | ||
* Returns the unique identifier of this log. | ||
* @return the unique identifier of this log. | ||
*/ | ||
public String getId() { | ||
return id; | ||
} | ||
|
||
/** | ||
* Returns the source of this log. | ||
* @return the source of this log. | ||
*/ | ||
public String getSource() { | ||
return source; | ||
} | ||
|
||
/** | ||
* Returns {@code true} if the logged request returned a successful response. | ||
* @return {@code true} if the logged request returned a successful response. | ||
*/ | ||
public Boolean getSuccess() { | ||
return success; | ||
} | ||
|
||
/** | ||
* Returns the time duration the service took to process the request. | ||
* @return the time duration the service took to process the request. | ||
*/ | ||
public Double getDurationMs() { | ||
return durationMs; | ||
} | ||
|
||
/** | ||
* Returns additional properties of the request. | ||
* @return additional properties of the request. | ||
*/ | ||
public Object getProperties() { | ||
return properties; | ||
} | ||
|
||
/** | ||
* Returns the name of the operation. | ||
* @return the name of the operation. | ||
*/ | ||
public String getOperationName() { | ||
return operationName; | ||
} | ||
} |
42 changes: 42 additions & 0 deletions
42
...ure-monitor-query-perf/src/main/java/com/azure/monitor/query/perf/LogsBatchQueryTest.java
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,42 @@ | ||
package com.azure.monitor.query.perf; | ||
|
||
import com.azure.core.util.Configuration; | ||
import com.azure.monitor.query.LogsQueryClient; | ||
import com.azure.monitor.query.perf.core.ServiceTest; | ||
import com.azure.perf.test.core.PerfStressOptions; | ||
import reactor.core.publisher.Mono; | ||
|
||
import java.util.Arrays; | ||
import java.util.List; | ||
|
||
/** | ||
* This class tests the performance of a batch of logs queries using the {@link LogsQueryClient}. | ||
*/ | ||
public class LogsBatchQueryTest extends ServiceTest<PerfStressOptions> { | ||
|
||
private static final List<String> LOGS_BATCH_QUERIES = Arrays | ||
.asList("AppRequests | take 100", "AzureActivity | take 100", "AppPerformanceCounters | take 100"); | ||
private final String workspaceId; | ||
|
||
/** | ||
* Creates an instance of logs batch query perf test. | ||
* @param options the configurable options for perf testing this class | ||
*/ | ||
public LogsBatchQueryTest(PerfStressOptions options) { | ||
super(options); | ||
workspaceId = Configuration.getGlobalConfiguration().get("AZURE_MONITOR_LOGS_WORKSPACE_ID"); | ||
if (workspaceId == null) { | ||
throw new IllegalStateException(String.format(CONFIGURATION_ERROR, "AZURE_MONITOR_LOGS_WORKSPACE_ID")); | ||
} | ||
} | ||
|
||
@Override | ||
public void run() { | ||
logsQueryClient.queryLogsBatch(workspaceId, LOGS_BATCH_QUERIES, null); | ||
} | ||
|
||
@Override | ||
public Mono<Void> runAsync() { | ||
return logsQueryAsyncClient.queryLogsBatch(workspaceId, LOGS_BATCH_QUERIES, null).then(); | ||
} | ||
} |
41 changes: 41 additions & 0 deletions
41
...e-monitor-query-perf/src/main/java/com/azure/monitor/query/perf/LogsQueryAsModelTest.java
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,41 @@ | ||
package com.azure.monitor.query.perf; | ||
|
||
import com.azure.core.util.Configuration; | ||
import com.azure.monitor.query.LogsQueryClient; | ||
import com.azure.monitor.query.perf.core.ServiceTest; | ||
import com.azure.perf.test.core.PerfStressOptions; | ||
import reactor.core.publisher.Mono; | ||
|
||
/** | ||
* This class tests the performance of a single logs query that maps the response to a custom model type using the | ||
* {@link LogsQueryClient}. | ||
*/ | ||
public class LogsQueryAsModelTest extends ServiceTest<PerfStressOptions> { | ||
|
||
private static final String LOGS_QUERY = "AppRequests | take 100"; | ||
private final String workspaceId; | ||
|
||
/** | ||
* Creates an instance of logs query perf test. | ||
* @param options the configurable options for perf testing this class | ||
*/ | ||
public LogsQueryAsModelTest(PerfStressOptions options) { | ||
super(options); | ||
workspaceId = Configuration.getGlobalConfiguration().get("AZURE_MONITOR_LOGS_WORKSPACE_ID"); | ||
if (workspaceId == null) { | ||
throw new IllegalStateException(String.format(CONFIGURATION_ERROR, "AZURE_MONITOR_LOGS_WORKSPACE_ID")); | ||
} | ||
} | ||
|
||
@Override | ||
public void run() { | ||
logsQueryClient.queryLogs(workspaceId, LOGS_QUERY, null).getResultAsObject(CustomModel.class); | ||
} | ||
|
||
@Override | ||
public Mono<Void> runAsync() { | ||
return logsQueryAsyncClient.queryLogs(workspaceId, LOGS_QUERY, null) | ||
.map(response -> response.getResultAsObject(CustomModel.class)) | ||
.then(); | ||
} | ||
} |
40 changes: 40 additions & 0 deletions
40
...or/azure-monitor-query-perf/src/main/java/com/azure/monitor/query/perf/LogsQueryTest.java
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. All rights reserved. | ||
// Licensed under the MIT License. | ||
|
||
package com.azure.monitor.query.perf; | ||
|
||
import com.azure.core.util.Configuration; | ||
import com.azure.monitor.query.LogsQueryClient; | ||
import com.azure.monitor.query.perf.core.ServiceTest; | ||
import com.azure.perf.test.core.PerfStressOptions; | ||
import reactor.core.publisher.Mono; | ||
|
||
/** | ||
* This class tests the performance of a single logs query using the {@link LogsQueryClient}. | ||
*/ | ||
public class LogsQueryTest extends ServiceTest<PerfStressOptions> { | ||
private static final String LOGS_QUERY = "AppRequests | take 100"; | ||
private final String workspaceId; | ||
|
||
/** | ||
* Creates an instance of logs query perf test. | ||
* @param options the configurable options for perf testing this class | ||
*/ | ||
public LogsQueryTest(PerfStressOptions options) { | ||
super(options); | ||
workspaceId = Configuration.getGlobalConfiguration().get("AZURE_MONITOR_LOGS_WORKSPACE_ID"); | ||
if (workspaceId == null) { | ||
throw new IllegalStateException(String.format(CONFIGURATION_ERROR, "AZURE_MONITOR_LOGS_WORKSPACE_ID")); | ||
} | ||
} | ||
|
||
@Override | ||
public void run() { | ||
logsQueryClient.queryLogs(workspaceId, LOGS_QUERY, null); | ||
} | ||
|
||
@Override | ||
public Mono<Void> runAsync() { | ||
return logsQueryAsyncClient.queryLogs(workspaceId, LOGS_QUERY, null).then(); | ||
} | ||
} |
Oops, something went wrong.