IP Library Granted Patent US 12,498,943
Granted Patent B2
US 12,498,943 · App. 17/954,103 · Granted Dec 16, 2025

Advanced agent instrumentation for opentelemetry implementations

Inventor: Walter Theodore Hulick, Jr. (Pearland, TX)
Assignee: Carbon Technology Holdings, LLC
G06F9/44521G06F9/541
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 12,498,943
App. No.
17/954,103
Granted
Dec 16, 2025
Kind
B2
Abstract

In one embodiment, a method herein comprises: intercepting runtime calls from a telemetry invocation for method entry to discover loaders; determining whether an implementation tenant is already allocated for a particular discovered loader; allocating, in response to no implementation tenant being already allocated for the particular discovered loader, a particular implementation tenant from a plurality of available implementation tenants, wherein a corresponding loader for the particular implementation tenant is set to delegate from the particular discovered loader; and calling, in response to the particular implementation tenant being allocated or being already allocated for the particular discovered loader, a method entry for the particular implementation tenant to perform an associated interception operation while using direct telemetry class and/or method calls.

Claims (51)

1 . A method, comprising:

intercepting, by a process comprising a proxy tenant handler, runtime calls from a telemetry invocation for method entry to discover loaders;

determining, by the process, whether an implementation tenant is already allocated for a particular discovered loader;

allocating, by the process and in response to no implementation tenant being already allocated for the particular discovered loader, a particular implementation tenant from a plurality of available implementation tenants, wherein a corresponding loader for the particular implementation tenant is set to delegate from the particular discovered loader to a proxy class loader; and

calling, by the process in response to the particular implementation tenant being allocated for the particular discovered loader, a method entry for the particular implementation tenant to perform an associated interception operation while using direct telemetry class and/or method calls.

2 . The method as in claim 1 , further comprising:

creating the plurality of available implementation tenants during a proxy initialization for the telemetry invocation.

3 . The method as in claim 2 , wherein creating the plurality of available implementation tenants comprises:

loading specific handler bytes that will make direct telemetry calls from a jar file into a javassist class;

renaming the javassist class to match a specific implementation tenant; and

associating the specific handler bytes with the specific implementation tenant.

4 . The method as in claim 1 , wherein allocating the particular implementation tenant comprises:

determining, for the particular implementation tenant, an associated tenant class loader and associated handler bytes; and

calling, for the associated tenant class loader, a method defineClass with the associated handler bytes.

5 . The method as in claim 1 , wherein the telemetry invocation is an invocation according to a standardized application performance monitoring solution.

6 . The method as in claim 1 , wherein the associated interception operation comprises instrumenting telemetry calls.

7 . The method as in claim 1 , wherein determining whether the implementation tenant is already allocated for the particular discovered loader comprises:

checking an implementation map that maps discovered loaders to implementation tenants.

8 . The method as in claim 1 , wherein allocating the particular implementation tenant comprises:

updating an implementation map that maps loaders to implementation tenants with a loader key pointing to the particular implementation tenant.

9 . The method as in claim 1 , wherein allocating the particular implementation tenant comprises:

verifying a class loaded in a class loader of the particular implementation tenant.

10 . The method as in claim 1 , wherein the plurality of available implementation tenants have no instrumentation.

11 . The method as in claim 1 , further comprising:

loading multiple tenants by creating corresponding tenant folders and setting a corresponding configuration to have no instrumentation.

12 . The method as in claim 1 , wherein the telemetry invocation is one of either an application programming interface or a software developer kit.

13 . The method as in claim 1 , wherein using direct telemetry class and/or method calls comprises:

loading telemetry classes and any classes loaded by the telemetry classes.

14 . A tangible, non-transitory, computer-readable medium having computer-executable instructions stored thereon that, when executed by a processor on a computer, cause the computer to perform a method comprising:

intercepting, by a proxy tenant handler, runtime calls from a telemetry invocation for method entry to discover loaders;

determining whether an implementation tenant is already allocated for a particular discovered loader;

allocating, in response to no implementation tenant being already allocated for the particular discovered loader, a particular implementation tenant from a plurality of available implementation tenants, wherein a corresponding loader for the particular implementation tenant is set to delegate from the particular discovered loader to a proxy class loader; and

calling, in response to the particular implementation tenant being allocated for the particular discovered loader, a method entry for the particular implementation tenant to perform an associated interception operation while using direct telemetry class and/or method calls.

15 . The tangible, non-transitory, computer-readable medium as in claim 14 , wherein the method further comprises:

creating the plurality of available implementation tenants during a proxy initialization for the telemetry invocation.

16 . The tangible, non-transitory, computer-readable medium as in claim 15 , wherein creating the plurality of available implementation tenants comprises:

loading specific handler bytes that will make direct telemetry calls from a jar file into a javassist class;

renaming the javassist class to match a specific implementation tenant; and

associating the specific handler bytes with the specific implementation tenant.

17 . The tangible, non-transitory, computer-readable medium as in claim 14 , wherein allocating the particular implementation tenant comprises:

determining, for the particular implementation tenant, an associated tenant class loader and associated handler bytes; and

calling, for the associated tenant class loader, a method defineClass with the associated handler bytes.

18 . The tangible, non-transitory, computer-readable medium as in claim 14 , wherein the telemetry invocation is an invocation according to a standardized application performance monitoring solution.

19 . An apparatus, comprising:

one or more network interfaces to communicate with a network;

a processor coupled to the one or more network interfaces and configured to execute one or more processes; and

a memory storing a process that is executable by the processor, the process, when executed, configured to:

intercept, by a proxy tenant handler, runtime calls from a telemetry invocation for method entry to discover loaders;

determine whether an implementation tenant is already allocated for a particular discovered loader;

allocate, in response to no implementation tenant being already allocated for the particular discovered loader, a particular implementation tenant from a plurality of available implementation tenants, wherein a corresponding loader for the particular implementation tenant is set to delegate from the particular discovered loader to a proxy class loader; and

call, in response to the particular implementation tenant being allocated for the particular discovered loader, a method entry for the particular implementation tenant to perform an associated interception operation while using direct telemetry class and/or method calls.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Sep 27, 2022
From: HULICK, WALTER THEODORE, JR.
To: CISCO TECHNOLOGY, INC.
Reel/Frame 061230/0425 →
Continuity (2)
Provisional Application 63248862 · Sep 27, 2021
Related Publication 20230118838A1 · Apr 20, 2023
References Cited (27)
US 8276125B2 · Fan et al. · 2012 [cited by applicant]
US 8332835B2 · Atsatt · 2012 [cited by applicant]
US 8739147B2 · Lebert · 2014 [cited by applicant]
US 9015659B2 · Raundahl Gregersen et al. · 2015 [cited by applicant]
US 9411616B2 · Gagliardi · 2016 [cited by applicant]
US 11665241B1 · Wade · 2023 [cited by examiner]
US 20090177761A1 · Meyer · 2009 [cited by examiner]
US 20130152064A1 · Gagliardi · 2013 [cited by examiner]
US 20180081740A1 · Syed · 2018 [cited by examiner]
US 20180137296A1 · Cahana · 2018 [cited by examiner]
US 20210247966A1 · Hulick, Jr. · 2021 [cited by applicant]
US 20220350725A1 · Lydick · 2022 [cited by examiner]
CN 111309402 · 2020 [cited by applicant]
International Search Report and Written Opinion for International Application No. PCT/US2022/044919, mailed Jan. 2, 2023, 13 Pages. [cited by applicant]
Belyaev, Andrey, “Think Twice Before Using Reflection”, online: https://dzone.com/articles/think-twice-before-using-reflection, first online Apr. 9, 2019, accessed Jan. 21, 2022, 4 pages, DZone.com. [cited by applicant]
“Do Not Use Reflection ⋅ Java for small teams”, online: https://ncrcoe.gitbooks.io/java-for-small-teams/content/specifics/1000_do_not_use_reflection.html, accessed Jan. 21, 2022, 2 pages, ncrcoe.gitbooks.io. [cited by applicant]
“Reflection API: Reflection. The Dark Side of Java”, online: https://codegym.cc/groups/posts/45-reflection-api-reflection-the-dark-side-of-java, first online Sep. 12, 2018, accessed Jan. 21, 2022, 12 pages, codegym.cc. [cited by applicant]
“Manual Instrumentation”, online: https://opentelemetry.io/docs/instrumentation/java/manual_instrumentation/, accessed Jan. 21, 2022, 10 pages, opentelemetry.io. [cited by applicant]
“Interface Span”, online: https://javadoc.io/doc/io.opentelemetry/opentelemetry-api/latest/io/opentelemetry/api/trace/Span.html, version 1.10.1, accessed Jan. 21, 2022, 12 pages, javadoc.io. [cited by applicant]
“OpenTelemetry Instrumentation for Java”, online: https://github.com/open-telemetry/opentelemetry-java-instrumentation#readme, accessed Jan. 25, 2022, 6 pages, Github.com. [cited by applicant]
“Interface SpanBuilder”, online: https://javadoc.io/doc/io.opentelemetry/opentelemetry-api/latest/io/opentelemetry/api/trace/SpanBuilder.html, version 1.101, accessed Jan. 25, 2022, 7 pages, javadoc.io. [cited by applicant]
“Group io.opentelemetry”, online: https://javadoc.io/doc/io.opentelemetry, accessed Sep. 27, 2022, 3 pages. [cited by applicant]
“Open Telemetry API”, online: https://javadoc.io/doc/io.opentelemetry/opentelemetry-api/latest/index.html, accessed Sep. 27, 2022, 1 page. [cited by applicant]
“Package io.opentelemetry.sdk”, online: https://javadoc.io/doc/io.opentelemetry/opentelemetry-sdk/latest/io/opentelemetry/sdk/package-summary.html, accessed Sep. 27, 2022, 1 page. [cited by applicant]
“Open-telemetry / opentelemetry-java-instrumentation”, online: https://github.com/open-telemetry/opentelemetry-java-instrumentation, accessed Sep. 27, 2022, 6 pages. [cited by applicant]
“Opentelemetry-sdk-tracing 0.11.0 API”, online: https://javadoc.io/doc/io.opentelemetry/opentelemetry-sdk-tracing/latest/index.html, accessed Sep. 27, 2022, 1 page. [cited by applicant]
“Interface Span”, online: https://javadoc.io/static/io.opentelemetry/opentelemetry-api-trace/0.13.1/io/opentelemetry/api/trace/Span.html, accessed Sep. 27, 2022, 11 pages. [cited by applicant]