Objective 

To demonstrate how to enable telemetry delivery to Azure Application Insights with a containerized Java application. This document demonstrates the creation of an assembly file to instruct Maven to build a zip file with the necessary project file, modify the pom.xml file with the required publish settings and create the Dockerfile essential to the creation of the container image. Finally, to tie everything together, I included an explanation of how to run and test the process locally.   

To get this example to work, you will need the following: 

IntelliJ from JetBrains  

Docker for Desktop  

Source Code 

Assembly File 

The Assembly Plugin for Maven enables developers to combine project output into a single distributable archive. For example, assume that a Maven project defines a single JAR artifact that contains both a console application and a Swing application. Such a project could define two “assemblies” that bundle the application with a different set of supporting scripts and dependency sets. One assembly would be the assembly for the console application, and the other could be a Swing application bundled with a slightly different set of dependencies. This assembly aims to package the project-generated JAR file and the AppInsights JAR file into a single Zip file. 

Pom file Additions 

Two plug-ins need to be added to the POM file. The first one will copy the applicationinsights-agent-X.X.X.jar into the resource directory, the second is to create the zip file based on the zip-assembly file. 

Docker File 

Adding Four goals to the Docker file base on the openjdk:17-alpine image: 

  1. Install the zip package into the container 
  2. Copy the AppInsightsAgentAssembly.zip into the container 
  3. Unzip the file  
  4. Add a command line argument to refer to the jar file on startup 

Bringing it all together 

Create an instance of Application Insights in Azure and retrieve the connection string

Retrieve the code from here:
[GitHub URL]

Open the code in your favorite editor and run the Maven Package action. The zip file should now be in your target folder.  

Create a file named .env and add the Application Insights connection string as an environment variable.
Environment File:

Create the container image:  docker build . -t myimage:latest

Start the container and reference the environment file in the docker run command
docker run -it -p 8080:8080 –env-file=.env myimage:latest

Call the API with the following URL:
http://localhost:8080/api/hello

Telemetry should be available in your instance of Application Insights: 

Final Thoughts 

Detailed information on the Java In-Process Agent from Microsoft is found on their website, and to download the source code, visit the 3Cloud Solutions GitHub site.