Skip to content

Commit

Permalink
Initial commit for monitor exporter client library (Azure#15429)
Browse files Browse the repository at this point in the history
* Initial commit for monitor exporter client library
  • Loading branch information
srnagar authored Oct 7, 2020
1 parent e039664 commit 1cbf6d6
Show file tree
Hide file tree
Showing 59 changed files with 5,597 additions and 8 deletions.
2 changes: 2 additions & 0 deletions eng/.docsettings.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ omitted_paths:
- profiles/*
- loganalytics/data-plane/samples/*
- sdk/*/azure-*/samples/*
- sdk/*/opentelemetry-exporter-azuremonitor/*/samples/*
- sdk/applicationinsights/microsoft-azure-applicationinsights-query/samples/*
- sdk/spring/azure-spring-boot-samples/*
- sdk/loganalytics/microsoft-azure-loganalytics/samples/*
Expand Down Expand Up @@ -142,6 +143,7 @@ known_content_issues:
- ['sdk/keyvault/README.md', '#3113']
- ['sdk/keyvault/azure-security-keyvault-administration/README.md', '#3113']
- ['sdk/loganalytics/microsoft-azure-loganalytics/README.md', '#3113']
- ['sdk/monitor/opentelemetry-exporter-azuremonitor/swagger/README.md', '#3113' ]
- ['sdk/parents/azure-client-sdk-parent/README.md', '#3113']
- ['sdk/search/azure-search-documents/swagger/README.md', '#3113']
- ['sdk/search/azure-search-documents/src/test/README.md', '#3113']
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -428,6 +428,7 @@
<suppress checks="LineLength" files="com.azure.ai.textanalytics.implementation.TextAnalyticsClientImplBuilder"/>
<suppress checks="LineLength" files="com.azure.ai.textanalytics.implementation.TextAnalyticsClientImpl"/>
<suppress checks="[a-zA-Z0-9]*" files="com.azure.data.schemaregistry.implementation.*"/>
<suppress checks="[a-zA-Z0-9]*" files="com.azure.opentelemetry.exporter.azuremonitor.implementation.*"/>

<!-- Suppress the check on code-gen classes -->
<suppress checks="LineLength" files="com.azure.ai.formrecognizer.implementation.FormRecognizerClientImplBuilder"/>
Expand Down Expand Up @@ -456,6 +457,7 @@
<!-- TODO: Fix with https://github.com/Azure/azure-sdk-for-java/issues#6716 Method name should follow a common vocabulary. -->
<suppress checks="com.azure.tools.checkstyle.checks.ServiceClientCheck" files=".*[/\\]textanalytics[/\\].*"/>
<suppress checks="com.azure.tools.checkstyle.checks.ServiceClientCheck" files=".*[/\\]schemaregistry[/\\].*"/>
<suppress checks="com.azure.tools.checkstyle.checks.ServiceClientCheck" files=".*[/\\]monitor[/\\].*"/>

<!-- Don't enforce non-static ClientLogger instances in azure-core-mgmt PollerFactory and PollingState types-->
<suppress checks="com\.azure\.tools\.checkstyle\.checks\.(ThrowFromClientLoggerCheck|GoodLoggingCheck)"
Expand Down
6 changes: 6 additions & 0 deletions eng/jacoco-test-coverage/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,12 @@
<artifactId>azure-sdk-template</artifactId>
<version>1.2.1-beta.3</version> <!-- {x-version-update;com.azure:azure-sdk-template;current} -->
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>opentelemetry-exporter-azuremonitor</artifactId>
<version>1.0.0-beta.1</version> <!-- {x-version-update;com.azure:opentelemetry-exporter-azuremonitor;current} -->
</dependency>

<dependency>
<groupId>com.azure.resourcemanager</groupId>
<artifactId>azure-resourcemanager</artifactId>
Expand Down
4 changes: 2 additions & 2 deletions eng/versioning/external_dependencies.txt
Original file line number Diff line number Diff line change
Expand Up @@ -155,8 +155,8 @@ com.microsoft.azure:azure-storage;8.0.0
com.microsoft.azure:msal4j;1.7.1
com.microsoft.azure:msal4j-persistence-extension;1.0.0
com.sun.activation:jakarta.activation;1.2.2
io.opentelemetry:opentelemetry-api;0.6.0
io.opentelemetry:opentelemetry-sdk;0.6.0
io.opentelemetry:opentelemetry-api;0.8.0
io.opentelemetry:opentelemetry-sdk;0.8.0
io.grpc:grpc-context;1.30.2
io.projectreactor:reactor-test;3.3.9.RELEASE
junit:junit;4.13
Expand Down
1 change: 1 addition & 0 deletions eng/versioning/version_client.txt
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ com.azure:azure-spring-boot-test-servicebus-jms;1.0.0;1.0.0
com.azure:azure-spring-cloud-test-eventhubs;1.0.0;1.0.0
com.azure:azure-spring-cloud-test-storage;1.0.0;1.0.0
com.azure:azure-spring-data-gremlin;2.3.1-beta.1;2.3.1-beta.1
com.azure:opentelemetry-exporter-azuremonitor;1.0.0-beta.1;1.0.0-beta.1
com.azure.resourcemanager:azure-resourcemanager;2.0.0-beta.4;2.0.0-beta.5
com.azure.resourcemanager:azure-resourcemanager-appplatform;2.0.0-beta.4;2.0.0-beta.5
com.azure.resourcemanager:azure-resourcemanager-appservice;2.0.0-beta.4;2.0.0
Expand Down
1 change: 1 addition & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
<module>sdk/keyvault</module>
<module>sdk/loganalytics</module>
<module>sdk/mediaservices</module>
<module>sdk/monitor</module>
<module>sdk/metricsadvisor</module>
<module>sdk/resourcemanager</module>
<module>sdk/schemaregistry</module>
Expand Down
6 changes: 3 additions & 3 deletions sdk/core/azure-core-tracing-opentelemetry/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-api</artifactId>
<version>0.6.0</version> <!-- {x-version-update;io.opentelemetry:opentelemetry-api;external_dependency} -->
<version>0.8.0</version> <!-- {x-version-update;io.opentelemetry:opentelemetry-api;external_dependency} -->
</dependency>
<dependency>
<groupId>com.azure</groupId>
Expand All @@ -52,7 +52,7 @@
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-sdk</artifactId>
<version>0.6.0</version> <!-- {x-version-update;io.opentelemetry:opentelemetry-sdk;external_dependency} -->
<version>0.8.0</version> <!-- {x-version-update;io.opentelemetry:opentelemetry-sdk;external_dependency} -->
<scope>test</scope>
</dependency>
<dependency>
Expand Down Expand Up @@ -85,7 +85,7 @@
<rules>
<bannedDependencies>
<includes>
<include>io.opentelemetry:opentelemetry-api:[0.6.0]</include> <!-- {x-include-update;io.opentelemetry:opentelemetry-api;external_dependency} -->
<include>io.opentelemetry:opentelemetry-api:[0.8.0]</include> <!-- {x-include-update;io.opentelemetry:opentelemetry-api;external_dependency} -->
<include>io.grpc:grpc-context:[1.30.2]</include> <!-- {x-include-update;io.grpc:grpc-context;external_dependency} -->
</includes>
</bannedDependencies>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
import com.azure.core.util.UrlBuilder;
import io.opentelemetry.OpenTelemetry;
import io.opentelemetry.common.AttributeValue;
import io.opentelemetry.context.propagation.HttpTextFormat;
import io.opentelemetry.context.propagation.TextMapPropagator;
import io.opentelemetry.trace.Span;
import io.opentelemetry.trace.SpanContext;
import io.opentelemetry.trace.Tracer;
Expand Down Expand Up @@ -53,7 +53,7 @@ public HttpPipelinePolicy create() {

// This helper class implements W3C distributed tracing protocol and injects SpanContext into the outgoing http
// request
private final HttpTextFormat traceContextFormat = OpenTelemetry.getPropagators().getHttpTextFormat();
private final TextMapPropagator traceContextFormat = OpenTelemetry.getPropagators().getTextMapPropagator();

@Override
public Mono<HttpResponse> process(HttpPipelineCallContext context, HttpPipelineNextPolicy next) {
Expand Down Expand Up @@ -166,6 +166,6 @@ private static void spanEnd(Span span, HttpResponse response, Throwable error) {
}

// lambda that actually injects arbitrary header into the request
private final HttpTextFormat.Setter<HttpRequest> contextSetter =
private final TextMapPropagator.Setter<HttpRequest> contextSetter =
(request, key, value) -> request.getHeaders().put(key, value);
}
32 changes: 32 additions & 0 deletions sdk/monitor/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# NOTE: Please refer to https://aka.ms/azsdk/engsys/ci-yaml before editing this file.

trigger:
branches:
include:
- master
- hotfix/*
- release/*
paths:
include:
- sdk/monitor/
- eng/common/

pr:
branches:
include:
- master
- feature/*
- hotfix/*
- release/*
paths:
include:
- sdk/monitor/

extends:
template: ../../eng/pipelines/templates/stages/archetype-sdk-client.yml
parameters:
ServiceDirectory: monitor
Artifacts:
- name: opentelemetry-exporter-azuremonitor
groupId: com.azure
safeName: opentelemetryexporterazuremonitor
4 changes: 4 additions & 0 deletions sdk/monitor/opentelemetry-exporter-azuremonitor/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Release History

## 1.0.0-beta.1 (2020-10-06)
- Initial release. Please see the README and wiki for information on the new design.
115 changes: 115 additions & 0 deletions sdk/monitor/opentelemetry-exporter-azuremonitor/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
# Azure Monitor OpenTelemetry Exporter client library for Java

This client library provides support for exporting OpenTelemetry data to Azure Monitor. This package assumes your
application is already instrumented with the [OpenTelemetry SDK][opentelemetry_sdk] following the [OpenTelemetry
Specification][opentelemetry_specification].

[Source code][source_code] | Package (Maven) | [API reference documentation][api_reference_doc] | [Product Documentation][product_documentation] | [Samples][sample_readme]

## Getting started

### Prerequisites

- [Java Development Kit (JDK) with version 8 or above][jdk]
- [Azure Subscription][azure_subscription]
- [Application Insights resource][application_insights_resource]

For more information, please read [introduction to Application Insights][application_insights_intro].

### Include the Package

[//]: # ({x-version-update-start;com.azure:opentelemetry-exporter-azuremonitor;current})
```xml
<dependency>
<groupId>com.azure</groupId>
<artifactId>opentelemetry-exporter-azuremonitor</artifactId>
<version>1.0.0-beta.1</version>
</dependency>
```
[//]: # ({x-version-update-end})

### Authentication

#### Get the instrumentation key from the portal

In order to export telemetry data to Azure Monitor, you will need the instrumentation key to your [Application
Insights resource][application_insights_resource]. To get your instrumentation key, go to [Azure Portal][azure_portal],
search for your resource. On the overview page of your resource, you will find the instrumentation key on the top
right corner.

### Creating exporter for Azure Monitor
<!-- embedme ./src/samples/java/com/azure/opentelemetry/exporter/azuremonitor/ReadmeSamples.java#L25-L27 -->
```java
AzureMonitorExporter azureMonitorExporter = new MonitorExporterClientBuilder()
.instrumentationKey("{instrumentation-key}")
.buildExporter();
```

#### Exporting span data

The following example shows how to export a collection of available SpanData to Azure Monitor thorugh the
`AzureMonitorExporter`

<!-- embedme ./src/samples/java/com/azure/opentelemetry/exporter/azuremonitor/ReadmeSamples.java#L34-L39 -->
```java
AzureMonitorExporter azureMonitorExporter = new MonitorExporterClientBuilder()
.instrumentationKey("{instrumentation-key}")
.buildExporter();

CompletableResultCode resultCode = azureMonitorExporter.export(getSpanDataCollection());
System.out.println(resultCode.isSuccess());
```

## Key concepts
For more information on the OpenTelemetry project, please review the [OpenTelemetry Specifications
][opentelemetry_specification].

## Examples

More examples can be found in [samples][samples_code].

## Troubleshooting

### Enabling Logging

Azure SDKs for Java offer a consistent logging story to help aid in troubleshooting application errors and expedite
their resolution. The logs produced will capture the flow of an application before reaching the terminal state to help
locate the root issue. View the [logging][logging] wiki for guidance about enabling logging.

## Next steps
Learn more about [Open Telemetry][opentelemetry_io]

## Contributing

This project welcomes contributions and suggestions. Most contributions require you to agree to a
[Contributor License Agreement (CLA)][cla] declaring that you have the right to, and actually do, grant us the rights
to use your contribution.

When you submit a pull request, a CLA-bot will automatically determine whether you need to provide a CLA and decorate
the PR appropriately (e.g., label, comment). Simply follow the instructions provided by the bot. You will only need to
do this once across all repos using our CLA.

This project has adopted the [Microsoft Open Source Code of Conduct][coc]. For more information see the
[Code of Conduct FAQ][coc_faq] or contact [[email protected]][coc_contact] with any additional questions or comments.

<!-- LINKS -->
[jdk]: https://docs.microsoft.com/java/azure/jdk/?view=azure-java-stable
[samples]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/monitor/opentelemetry-exporter-azuremonitor/src/samples/java/
[source_code]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/monitor/opentelemetry-exporter-azuremonitor/src
[azure_subscription]: https://azure.microsoft.com/free/
[api_reference_doc]: https://docs.microsoft.com/azure/azure-monitor/overview
[product_documentation]: https://docs.microsoft.com/azure/azure-monitor/overview
[azure_cli]: https://docs.microsoft.com/cli/azure
[azure_portal]: https://portal.azure.com
[azure_identity]: https://github.com/Azure/azure-sdk-for-java/tree/master/sdk/identity/azure-identity
[DefaultAzureCredential]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/identity/azure-identity/README.md#defaultazurecredential
[custom_subdomain]: https://docs.microsoft.com/azure/cognitive-services/authentication#create-a-resource-with-a-custom-subdomain
[logging]: https://github.com/Azure/azure-sdk-for-java/wiki/Logging-with-Azure-SDK
[opentelemetry_sdk]: https://github.com/open-telemetry/opentelemetry-java/blob/master/QUICKSTART.md
[opentelemetry_specification]: https://github.com/open-telemetry/opentelemetry-specification
[application_insights_resource]: https://docs.microsoft.com/azure/azure-monitor/app/create-new-resource
[application_insights_intro]: https://docs.microsoft.com/azure/azure-monitor/app/app-insights-overview
[azure_portal]: https://ms.portal.azure.com/#blade/HubsExtension/BrowseResource/resourceType/microsoft.insights%2Fcomponents
[opentelemetry_io]: https://opentelemetry.io/

![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-java%2Fsdk%monitor%2Fopentelemetry-exporter-azuremonitor%2FREADME.png)
115 changes: 115 additions & 0 deletions sdk/monitor/opentelemetry-exporter-azuremonitor/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
<!-- Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the MIT License. -->

<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/maven-v4_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>opentelemetry-exporter-azuremonitor</artifactId>
<version>1.0.0-beta.1</version> <!-- {x-version-update;com.azure:opentelemetry-exporter-azuremonitor;current} -->

<name>Microsoft Azure SDK for OpenTelemetry Azure Monitor Exporter</name>
<description>This package contains Microsoft Azure SDK for OpenTelemetry Azure Monitor Exporter.</description>

<distributionManagement>
<site>
<id>azure-java-build-docs</id>
<url>${site.url}/site/${project.artifactId}</url>
</site>
</distributionManagement>

<scm>
<url>https://github.com/Azure/azure-sdk-for-java</url>
</scm>

<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-core</artifactId>
<version>1.9.0</version> <!-- {x-version-update;com.azure:azure-core;dependency} -->
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-core-http-netty</artifactId>
<version>1.6.2</version> <!-- {x-version-update;com.azure:azure-core-http-netty;dependency} -->
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-api</artifactId>
<version>0.8.0</version> <!-- {x-version-update;io.opentelemetry:opentelemetry-api;external_dependency} -->
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-sdk</artifactId>
<version>0.8.0</version> <!-- {x-version-update;io.opentelemetry:opentelemetry-sdk;external_dependency} -->
</dependency>

<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
<version>3.0.2</version> <!-- {x-version-update;com.google.code.findbugs:jsr305;external_dependency} -->
<scope>provided</scope>
</dependency>
<!-- Test dependencies -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.6.2</version> <!-- {x-version-update;org.junit.jupiter:junit-jupiter-api;external_dependency} -->
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.6.2</version> <!-- {x-version-update;org.junit.jupiter:junit-jupiter-engine;external_dependency} -->
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.6.2</version> <!-- {x-version-update;org.junit.jupiter:junit-jupiter-params;external_dependency} -->
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-core-test</artifactId>
<version>1.5.0</version> <!-- {x-version-update;com.azure:azure-core-test;dependency} -->
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.5</version> <!-- {x-version-update;org.jacoco:jacoco-maven-plugin;external_dependency} -->
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.0.0-M3</version> <!-- {x-version-update;org.apache.maven.plugins:maven-enforcer-plugin;external_dependency} -->
<configuration>
<rules>
<bannedDependencies>
<includes>
<include>io.opentelemetry:opentelemetry-api:[0.8.0]</include> <!-- {x-include-update;io.opentelemetry:opentelemetry-api;external_dependency} -->
<include>io.opentelemetry:opentelemetry-sdk:[0.8.0]</include> <!-- {x-include-update;io.opentelemetry:opentelemetry-sdk;external_dependency} -->
</includes>
</bannedDependencies>
</rules>
</configuration>
</plugin>
</plugins>
</build>
</project>
Loading

0 comments on commit 1cbf6d6

Please sign in to comment.