Skip to content

Repository files navigation

OpenTelemetry Java Basics

This is a basic client/server for playing with OpenTelemetry in Java and learning all of the basic API calls. The code is very simple and heavily commented; it makes for a good source if you are looking for a place to copypasta OpenTelemetry patterns from.

Handy links:

Setup

Define your Lightstep Access Token prior to running the app. You can find your access token under "settings" in the Lightstep UI.

export LS_ACCESS_TOKEN=<YOUR ACCESS TOKEN GOES HERE>

Build:

make

Run the server and wait for it to be ready:

make run-server

Run the client to perform a few requests:

make run-client

Auto-instrumentation: Java Spring example

The code in this repo shows how to decorate a simple Servlet with OpenTelemetry calls to teach you how to manually instrument your code. But if you are using a supported framework like spring, you get a lot of auto-instrumentation out of the box.

Let's take (Pet Clinic)[https://github.com/spring-projects/spring-petclinic], an example Spring app, and add OpenTelemetry to it.

First, set up Petclinic:

git clone https://github.com/spring-projects/spring-petclinic.git
cd spring-petclinic
./mvnw package

Then, fetch the Lightstep Launcher for Java. The Launcher is a distro of the OpenTelemetry Java Agent that is pre-configured to talk to Lightstep:

curl -L -O https://github.com/lightstep/otel-launcher-java/releases/download/0.14.0/lightstep-opentelemetry-javaagent-0.14.0.jar

Use env vars to add your Lightstep access token and to correctly name your service.

export LS_ACCESS_TOKEN=<YOUR ACCESS TOKEN GOES HERE>export LS_SERVICE_NAME=petclinic

With that, you're ready to start petclinic locally, with the Launcher attached as a Java agent.

java -javaagent:lightstep-opentelemetry-javaagent-0.14.0.jar -jar target/*.jar

After petclinic starts, go to http://localhost:8080/ and interact with it a bit.

After you've messed around a bit, have a look at the data by clicking on the Explorer in Lightstep. You'll see a number of spans; click on any of them to see a trace.

Notice how much information is automatically available:

Trace of the Petclinic application

Exercise

All of this out of the box information is great, but you can decorate it further by using the OpenTelemetry API. Using the example code in this repo as a guide, try to do the following:

  • Add the first and last name of the owner to the OwnerController.showOwner span as attributes. Notice that you can now search by these attributes in Lightstep.
  • When the new owner form is not filled out correctly, set the status of the OwnerController.processCreationForm span to ERROR. Notice that errors now appear in Lightstep when you submit a new owner form without filling in all the fields.
  • Add the owner name to other operations that deal with owners. Write a helper method on the Owner model that adds this information to the current span, so that you can adjust what owner attributes are added in a centralized place. Use the helper method in your controllers.
  • How can might you use Spring features, such as interceptors, to help manage OpenTelemetry? For example, how would you add more span attributes to your controllers without having to put them directly in your application code?

Thanks for checking out this tutorial! Any questions, please start a discussion. Bugs or other problems? Please file an issue. Hope it was helpful. :)

About

No description, website, or topics provided.

Resources

Stars

15 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - tedsuo/otel-java-basics · GitHub
Skip to content

Repository files navigation

OpenTelemetry Java Basics

This is a basic client/server for playing with OpenTelemetry in Java and learning all of the basic API calls. The code is very simple and heavily commented; it makes for a good source if you are looking for a place to copypasta OpenTelemetry patterns from.

Handy links:

Setup

Define your Lightstep Access Token prior to running the app. You can find your access token under "settings" in the Lightstep UI.

export LS_ACCESS_TOKEN=<YOUR ACCESS TOKEN GOES HERE>

Build:

make

Run the server and wait for it to be ready:

make run-server

Run the client to perform a few requests:

make run-client

Auto-instrumentation: Java Spring example

The code in this repo shows how to decorate a simple Servlet with OpenTelemetry calls to teach you how to manually instrument your code. But if you are using a supported framework like spring, you get a lot of auto-instrumentation out of the box.

Let's take (Pet Clinic)[https://github.com/spring-projects/spring-petclinic], an example Spring app, and add OpenTelemetry to it.

First, set up Petclinic:

git clone https://github.com/spring-projects/spring-petclinic.git
cd spring-petclinic
./mvnw package

Then, fetch the Lightstep Launcher for Java. The Launcher is a distro of the OpenTelemetry Java Agent that is pre-configured to talk to Lightstep:

curl -L -O https://github.com/lightstep/otel-launcher-java/releases/download/0.14.0/lightstep-opentelemetry-javaagent-0.14.0.jar

Use env vars to add your Lightstep access token and to correctly name your service.

export LS_ACCESS_TOKEN=<YOUR ACCESS TOKEN GOES HERE>export LS_SERVICE_NAME=petclinic

With that, you're ready to start petclinic locally, with the Launcher attached as a Java agent.

java -javaagent:lightstep-opentelemetry-javaagent-0.14.0.jar -jar target/*.jar

After petclinic starts, go to http://localhost:8080/ and interact with it a bit.

After you've messed around a bit, have a look at the data by clicking on the Explorer in Lightstep. You'll see a number of spans; click on any of them to see a trace.

Notice how much information is automatically available:

Trace of the Petclinic application

Exercise

All of this out of the box information is great, but you can decorate it further by using the OpenTelemetry API. Using the example code in this repo as a guide, try to do the following:

  • Add the first and last name of the owner to the OwnerController.showOwner span as attributes. Notice that you can now search by these attributes in Lightstep.
  • When the new owner form is not filled out correctly, set the status of the OwnerController.processCreationForm span to ERROR. Notice that errors now appear in Lightstep when you submit a new owner form without filling in all the fields.
  • Add the owner name to other operations that deal with owners. Write a helper method on the Owner model that adds this information to the current span, so that you can adjust what owner attributes are added in a centralized place. Use the helper method in your controllers.
  • How can might you use Spring features, such as interceptors, to help manage OpenTelemetry? For example, how would you add more span attributes to your controllers without having to put them directly in your application code?

Thanks for checking out this tutorial! Any questions, please start a discussion. Bugs or other problems? Please file an issue. Hope it was helpful. :)

About

No description, website, or topics provided.

Resources

Stars

15 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - tedsuo/otel-java-basics · GitHub
Skip to content

Repository files navigation

OpenTelemetry Java Basics

This is a basic client/server for playing with OpenTelemetry in Java and learning all of the basic API calls. The code is very simple and heavily commented; it makes for a good source if you are looking for a place to copypasta OpenTelemetry patterns from.

Handy links:

Setup

Define your Lightstep Access Token prior to running the app. You can find your access token under "settings" in the Lightstep UI.

export LS_ACCESS_TOKEN=<YOUR ACCESS TOKEN GOES HERE>

Build:

make

Run the server and wait for it to be ready:

make run-server

Run the client to perform a few requests:

make run-client

Auto-instrumentation: Java Spring example

The code in this repo shows how to decorate a simple Servlet with OpenTelemetry calls to teach you how to manually instrument your code. But if you are using a supported framework like spring, you get a lot of auto-instrumentation out of the box.

Let's take (Pet Clinic)[https://github.com/spring-projects/spring-petclinic], an example Spring app, and add OpenTelemetry to it.

First, set up Petclinic:

git clone https://github.com/spring-projects/spring-petclinic.git
cd spring-petclinic
./mvnw package

Then, fetch the Lightstep Launcher for Java. The Launcher is a distro of the OpenTelemetry Java Agent that is pre-configured to talk to Lightstep:

curl -L -O https://github.com/lightstep/otel-launcher-java/releases/download/0.14.0/lightstep-opentelemetry-javaagent-0.14.0.jar

Use env vars to add your Lightstep access token and to correctly name your service.

export LS_ACCESS_TOKEN=<YOUR ACCESS TOKEN GOES HERE>export LS_SERVICE_NAME=petclinic

With that, you're ready to start petclinic locally, with the Launcher attached as a Java agent.

java -javaagent:lightstep-opentelemetry-javaagent-0.14.0.jar -jar target/*.jar

After petclinic starts, go to http://localhost:8080/ and interact with it a bit.

After you've messed around a bit, have a look at the data by clicking on the Explorer in Lightstep. You'll see a number of spans; click on any of them to see a trace.

Notice how much information is automatically available:

Trace of the Petclinic application

Exercise

All of this out of the box information is great, but you can decorate it further by using the OpenTelemetry API. Using the example code in this repo as a guide, try to do the following:

  • Add the first and last name of the owner to the OwnerController.showOwner span as attributes. Notice that you can now search by these attributes in Lightstep.
  • When the new owner form is not filled out correctly, set the status of the OwnerController.processCreationForm span to ERROR. Notice that errors now appear in Lightstep when you submit a new owner form without filling in all the fields.
  • Add the owner name to other operations that deal with owners. Write a helper method on the Owner model that adds this information to the current span, so that you can adjust what owner attributes are added in a centralized place. Use the helper method in your controllers.
  • How can might you use Spring features, such as interceptors, to help manage OpenTelemetry? For example, how would you add more span attributes to your controllers without having to put them directly in your application code?

Thanks for checking out this tutorial! Any questions, please start a discussion. Bugs or other problems? Please file an issue. Hope it was helpful. :)

About

No description, website, or topics provided.

Resources

Stars

15 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - tedsuo/otel-java-basics · GitHub
Skip to content

Repository files navigation

OpenTelemetry Java Basics

This is a basic client/server for playing with OpenTelemetry in Java and learning all of the basic API calls. The code is very simple and heavily commented; it makes for a good source if you are looking for a place to copypasta OpenTelemetry patterns from.

Handy links:

Setup

Define your Lightstep Access Token prior to running the app. You can find your access token under "settings" in the Lightstep UI.

export LS_ACCESS_TOKEN=<YOUR ACCESS TOKEN GOES HERE>

Build:

make

Run the server and wait for it to be ready:

make run-server

Run the client to perform a few requests:

make run-client

Auto-instrumentation: Java Spring example

The code in this repo shows how to decorate a simple Servlet with OpenTelemetry calls to teach you how to manually instrument your code. But if you are using a supported framework like spring, you get a lot of auto-instrumentation out of the box.

Let's take (Pet Clinic)[https://github.com/spring-projects/spring-petclinic], an example Spring app, and add OpenTelemetry to it.

First, set up Petclinic:

git clone https://github.com/spring-projects/spring-petclinic.git
cd spring-petclinic
./mvnw package

Then, fetch the Lightstep Launcher for Java. The Launcher is a distro of the OpenTelemetry Java Agent that is pre-configured to talk to Lightstep:

curl -L -O https://github.com/lightstep/otel-launcher-java/releases/download/0.14.0/lightstep-opentelemetry-javaagent-0.14.0.jar

Use env vars to add your Lightstep access token and to correctly name your service.

export LS_ACCESS_TOKEN=<YOUR ACCESS TOKEN GOES HERE>export LS_SERVICE_NAME=petclinic

With that, you're ready to start petclinic locally, with the Launcher attached as a Java agent.

java -javaagent:lightstep-opentelemetry-javaagent-0.14.0.jar -jar target/*.jar

After petclinic starts, go to http://localhost:8080/ and interact with it a bit.

After you've messed around a bit, have a look at the data by clicking on the Explorer in Lightstep. You'll see a number of spans; click on any of them to see a trace.

Notice how much information is automatically available:

Trace of the Petclinic application

Exercise

All of this out of the box information is great, but you can decorate it further by using the OpenTelemetry API. Using the example code in this repo as a guide, try to do the following:

  • Add the first and last name of the owner to the OwnerController.showOwner span as attributes. Notice that you can now search by these attributes in Lightstep.
  • When the new owner form is not filled out correctly, set the status of the OwnerController.processCreationForm span to ERROR. Notice that errors now appear in Lightstep when you submit a new owner form without filling in all the fields.
  • Add the owner name to other operations that deal with owners. Write a helper method on the Owner model that adds this information to the current span, so that you can adjust what owner attributes are added in a centralized place. Use the helper method in your controllers.
  • How can might you use Spring features, such as interceptors, to help manage OpenTelemetry? For example, how would you add more span attributes to your controllers without having to put them directly in your application code?

Thanks for checking out this tutorial! Any questions, please start a discussion. Bugs or other problems? Please file an issue. Hope it was helpful. :)

About

No description, website, or topics provided.

Resources

Stars

15 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - tedsuo/otel-java-basics · GitHub
Skip to content

Repository files navigation

OpenTelemetry Java Basics

This is a basic client/server for playing with OpenTelemetry in Java and learning all of the basic API calls. The code is very simple and heavily commented; it makes for a good source if you are looking for a place to copypasta OpenTelemetry patterns from.

Handy links:

Setup

Define your Lightstep Access Token prior to running the app. You can find your access token under "settings" in the Lightstep UI.

export LS_ACCESS_TOKEN=<YOUR ACCESS TOKEN GOES HERE>

Build:

make

Run the server and wait for it to be ready:

make run-server

Run the client to perform a few requests:

make run-client

Auto-instrumentation: Java Spring example

The code in this repo shows how to decorate a simple Servlet with OpenTelemetry calls to teach you how to manually instrument your code. But if you are using a supported framework like spring, you get a lot of auto-instrumentation out of the box.

Let's take (Pet Clinic)[https://github.com/spring-projects/spring-petclinic], an example Spring app, and add OpenTelemetry to it.

First, set up Petclinic:

git clone https://github.com/spring-projects/spring-petclinic.git
cd spring-petclinic
./mvnw package

Then, fetch the Lightstep Launcher for Java. The Launcher is a distro of the OpenTelemetry Java Agent that is pre-configured to talk to Lightstep:

curl -L -O https://github.com/lightstep/otel-launcher-java/releases/download/0.14.0/lightstep-opentelemetry-javaagent-0.14.0.jar

Use env vars to add your Lightstep access token and to correctly name your service.

export LS_ACCESS_TOKEN=<YOUR ACCESS TOKEN GOES HERE>export LS_SERVICE_NAME=petclinic

With that, you're ready to start petclinic locally, with the Launcher attached as a Java agent.

java -javaagent:lightstep-opentelemetry-javaagent-0.14.0.jar -jar target/*.jar

After petclinic starts, go to http://localhost:8080/ and interact with it a bit.

After you've messed around a bit, have a look at the data by clicking on the Explorer in Lightstep. You'll see a number of spans; click on any of them to see a trace.

Notice how much information is automatically available:

Trace of the Petclinic application

Exercise

All of this out of the box information is great, but you can decorate it further by using the OpenTelemetry API. Using the example code in this repo as a guide, try to do the following:

  • Add the first and last name of the owner to the OwnerController.showOwner span as attributes. Notice that you can now search by these attributes in Lightstep.
  • When the new owner form is not filled out correctly, set the status of the OwnerController.processCreationForm span to ERROR. Notice that errors now appear in Lightstep when you submit a new owner form without filling in all the fields.
  • Add the owner name to other operations that deal with owners. Write a helper method on the Owner model that adds this information to the current span, so that you can adjust what owner attributes are added in a centralized place. Use the helper method in your controllers.
  • How can might you use Spring features, such as interceptors, to help manage OpenTelemetry? For example, how would you add more span attributes to your controllers without having to put them directly in your application code?

Thanks for checking out this tutorial! Any questions, please start a discussion. Bugs or other problems? Please file an issue. Hope it was helpful. :)

About

No description, website, or topics provided.

Resources

Stars

15 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - tedsuo/otel-java-basics · GitHub
Skip to content

Repository files navigation

OpenTelemetry Java Basics

This is a basic client/server for playing with OpenTelemetry in Java and learning all of the basic API calls. The code is very simple and heavily commented; it makes for a good source if you are looking for a place to copypasta OpenTelemetry patterns from.

Handy links:

Setup

Define your Lightstep Access Token prior to running the app. You can find your access token under "settings" in the Lightstep UI.

export LS_ACCESS_TOKEN=<YOUR ACCESS TOKEN GOES HERE>

Build:

make

Run the server and wait for it to be ready:

make run-server

Run the client to perform a few requests:

make run-client

Auto-instrumentation: Java Spring example

The code in this repo shows how to decorate a simple Servlet with OpenTelemetry calls to teach you how to manually instrument your code. But if you are using a supported framework like spring, you get a lot of auto-instrumentation out of the box.

Let's take (Pet Clinic)[https://github.com/spring-projects/spring-petclinic], an example Spring app, and add OpenTelemetry to it.

First, set up Petclinic:

git clone https://github.com/spring-projects/spring-petclinic.git
cd spring-petclinic
./mvnw package

Then, fetch the Lightstep Launcher for Java. The Launcher is a distro of the OpenTelemetry Java Agent that is pre-configured to talk to Lightstep:

curl -L -O https://github.com/lightstep/otel-launcher-java/releases/download/0.14.0/lightstep-opentelemetry-javaagent-0.14.0.jar

Use env vars to add your Lightstep access token and to correctly name your service.

export LS_ACCESS_TOKEN=<YOUR ACCESS TOKEN GOES HERE>export LS_SERVICE_NAME=petclinic

With that, you're ready to start petclinic locally, with the Launcher attached as a Java agent.

java -javaagent:lightstep-opentelemetry-javaagent-0.14.0.jar -jar target/*.jar

After petclinic starts, go to http://localhost:8080/ and interact with it a bit.

After you've messed around a bit, have a look at the data by clicking on the Explorer in Lightstep. You'll see a number of spans; click on any of them to see a trace.

Notice how much information is automatically available:

Trace of the Petclinic application

Exercise

All of this out of the box information is great, but you can decorate it further by using the OpenTelemetry API. Using the example code in this repo as a guide, try to do the following:

  • Add the first and last name of the owner to the OwnerController.showOwner span as attributes. Notice that you can now search by these attributes in Lightstep.
  • When the new owner form is not filled out correctly, set the status of the OwnerController.processCreationForm span to ERROR. Notice that errors now appear in Lightstep when you submit a new owner form without filling in all the fields.
  • Add the owner name to other operations that deal with owners. Write a helper method on the Owner model that adds this information to the current span, so that you can adjust what owner attributes are added in a centralized place. Use the helper method in your controllers.
  • How can might you use Spring features, such as interceptors, to help manage OpenTelemetry? For example, how would you add more span attributes to your controllers without having to put them directly in your application code?

Thanks for checking out this tutorial! Any questions, please start a discussion. Bugs or other problems? Please file an issue. Hope it was helpful. :)

About

No description, website, or topics provided.

Resources

Stars

15 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); GitHub - tedsuo/otel-java-basics · GitHub
Skip to content

Repository files navigation

OpenTelemetry Java Basics

This is a basic client/server for playing with OpenTelemetry in Java and learning all of the basic API calls. The code is very simple and heavily commented; it makes for a good source if you are looking for a place to copypasta OpenTelemetry patterns from.

Handy links:

Setup

Define your Lightstep Access Token prior to running the app. You can find your access token under "settings" in the Lightstep UI.

export LS_ACCESS_TOKEN=<YOUR ACCESS TOKEN GOES HERE>

Build:

make

Run the server and wait for it to be ready:

make run-server

Run the client to perform a few requests:

make run-client

Auto-instrumentation: Java Spring example

The code in this repo shows how to decorate a simple Servlet with OpenTelemetry calls to teach you how to manually instrument your code. But if you are using a supported framework like spring, you get a lot of auto-instrumentation out of the box.

Let's take (Pet Clinic)[https://github.com/spring-projects/spring-petclinic], an example Spring app, and add OpenTelemetry to it.

First, set up Petclinic:

git clone https://github.com/spring-projects/spring-petclinic.git
cd spring-petclinic
./mvnw package

Then, fetch the Lightstep Launcher for Java. The Launcher is a distro of the OpenTelemetry Java Agent that is pre-configured to talk to Lightstep:

curl -L -O https://github.com/lightstep/otel-launcher-java/releases/download/0.14.0/lightstep-opentelemetry-javaagent-0.14.0.jar

Use env vars to add your Lightstep access token and to correctly name your service.

export LS_ACCESS_TOKEN=<YOUR ACCESS TOKEN GOES HERE>export LS_SERVICE_NAME=petclinic

With that, you're ready to start petclinic locally, with the Launcher attached as a Java agent.

java -javaagent:lightstep-opentelemetry-javaagent-0.14.0.jar -jar target/*.jar

After petclinic starts, go to http://localhost:8080/ and interact with it a bit.

After you've messed around a bit, have a look at the data by clicking on the Explorer in Lightstep. You'll see a number of spans; click on any of them to see a trace.

Notice how much information is automatically available:

Trace of the Petclinic application

Exercise

All of this out of the box information is great, but you can decorate it further by using the OpenTelemetry API. Using the example code in this repo as a guide, try to do the following:

  • Add the first and last name of the owner to the OwnerController.showOwner span as attributes. Notice that you can now search by these attributes in Lightstep.
  • When the new owner form is not filled out correctly, set the status of the OwnerController.processCreationForm span to ERROR. Notice that errors now appear in Lightstep when you submit a new owner form without filling in all the fields.
  • Add the owner name to other operations that deal with owners. Write a helper method on the Owner model that adds this information to the current span, so that you can adjust what owner attributes are added in a centralized place. Use the helper method in your controllers.
  • How can might you use Spring features, such as interceptors, to help manage OpenTelemetry? For example, how would you add more span attributes to your controllers without having to put them directly in your application code?

Thanks for checking out this tutorial! Any questions, please start a discussion. Bugs or other problems? Please file an issue. Hope it was helpful. :)

About

No description, website, or topics provided.

Resources

Stars

15 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages