Skip to content
Merged
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions _posts/blog/2022-06-22-2.1.0-metrics-and-tracing.md
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,8 @@ general.opentelemetry.enabled=true
general.opentelemetry.enabled=true
```

**Note:** These instructions are for configuring OpenTelemetry and Jaeger with Accumulo 2.1.0. As of Accumulo 2.1.4, the version of OpenTelemetry has been updated and the instructions have changed. See the [Note for Recent Accumulo Versions](#note-for-recent-accumulo-versions-april-2025) section at the end of this post for current configuration information.

5. Configure the OpenTelemetry JavaAgent in accumulo-env.sh by uncommenting the following and updating the path to the java agent jar:
```
## Optionally setup OpenTelemetry SDK AutoConfigure
Expand Down Expand Up @@ -149,3 +151,27 @@ docker run -d --rm --name jaeger \
8. View traces in Jaeger UI at http://localhost:16686. You can select the service name on the left panel and click `Find Traces` to view the trace information. If everything is working correctly, then you should see something like the image below.

![Jaeger Screenshot](/images/blog/202206_metrics_and_tracing/Jaeger_Screenshot.png)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The blog post was for the 2.1.0 release. It looks like the addition here updates / replaces items 5 and 6 above. I'm thinking that we should put a note in items 5 and 6 that says something like:

This contains instructions for configuring OpenTelemetry and Jaeger with Accumulo 2.1.0. As of Accumulo 2.1.4 the version of OpenTelemetry has been updated and the instructions have changed. See below for more information.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good idea. Added in 4b88f58.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Screenshot from 2025-04-08 14-52-32
Screenshot from 2025-04-08 14-52-18

## Note for Recent Accumulo Versions (April 2025)

**Note:** This section replaces steps 5 and 6 in the [Tracing Example](#tracing-example) above. Follow steps 1-4 from the original instructions, then use the updated configuration below instead of steps 5-6, and continue with steps 7-8 to view traces in Jaeger.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This all seems fine, but is this really a note for recent Accumulo versions, or is it a note for newer OpenTelemetry versions? Somebody could use the newer OpenTelemetry libraries with the older Accumulo releases, in which case, these instructions would apply, right? Likewise, somebody could use a newer version of Accumulo but with an older version of OpenTelemetry, in which case the older instructions would apply?

I think the instructions are clear, but it is not clear to me that the conditions under which you use them are correctly or clearly being communicated. I think the version of Open Telemetry is much more important than the version of Accumulo for this. And, I think it's wrong to assume that the versions in Accumulo's POMs are the authoritative source for what the user is (or should be) running.

Users are responsible for their own CLASSPATH, including updating them, even for older versions of Accumulo, in response to CVEs, bug fixes, dependency convergence, integration issues, etc. That is a downstream responsibility. So, we should be careful to word things without making assumptions that the dependencies we reference in our POM are what users are, or should be, using.

It might be more correct and clear to say something like: "Accumulo X was released compiled and tested with OpenTelemetry Y, which uses the Z property to configure...", rather than say "For Accumulo X, you need to set Z property ...."; the latter might be true, but only for very specific assumptions.


We've found that the original Jaeger exporter configuration no longer works well with newer versions of OpenTelemetry and Jaeger. Instead, use the OTLP exporter which has become the standard protocol for trace data:

1. Update your configuration to use OTLP instead of Jaeger:
```bash
JAVA_OPTS=('-Dotel.traces.exporter=otlp' '-Dotel.exporter.otlp.endpoint=http://localhost:4317' '-Dotel.metrics.exporter=none' '-Dotel.logs.exporter=none' "${JAVA_OPTS[@]}")
```
2. Run Jaeger with OTLP support:
```bash
docker run --rm --name jaeger \
-p 16686:16686 \
-p 4317:4317 \
-p 4318:4318 \
-p 5778:5778 \
-p 9411:9411 \
jaegertracing/jaeger:2.3.0
```

This reflects how the OpenTelemetry ecosystem has converged on OTLP as the standard protocol for transmitting trace data.
These updated instructions have been tested against Accumulo 2.1.4 and 4.0 versions.