-
Notifications
You must be signed in to change notification settings - Fork 692
Adds Jaeger trace data for analytics documentation #2374
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 32 commits
Commits
Show all changes
35 commits
Select commit
Hold shift + click to select a range
d5c71a5
for new page how to analyze Jaeger trace data
9c5be21
remove old image
660c5e3
for new information and doc writer checklist
86cf05e
for new information and doc writer checklist
4bfa459
small rewrite
01e30ff
new clean images from Dashboards URL directly
cdd04d6
for additional information
c320d66
remove blank lines
b1c1551
for tech review feedback updates
87241b7
add requirements section
35f3784
for new procedure
3c4b4d7
for tech review feedback updates
1fd987b
continued updates
0bac730
for docker compose file instructions
d1b5c5a
for docker usage instruction
2af0f4e
for step 2 view dashboards
3cbbc61
for additional link provided in tech review
1d34e2d
for link to index page to introduce the feature
7ed601b
final checklist
ae75639
add warning not to use sample file in prod env
5220a61
updated docker file that is safe for prod env, remove warning note fo…
8042c96
for small update to parent page
0bd55fb
for tech review
f6a9757
typo fix for font
6fb5d02
for doc review #1 feedback updates
7e14e4d
for doc review feedback #2 updates
2b18d99
for a couple minor changes
fa8efe1
spell out dashboard URI directly to trace analytics for accessibility…
cfd0152
need to add additional step from eng to generate sample data
9bd9903
for additional step image of sample app
85cae77
rename step numbers
36e2b98
minor fix heading levels
360eba6
updates recommended by the editorial reviewer
7763331
clarify Spans window function
cc6f1fa
clarified individual trace details section
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,249 @@ | ||||||
| --- | ||||||
|
alicejw1 marked this conversation as resolved.
|
||||||
| layout: default | ||||||
| title: Analyze Jaeger trace data | ||||||
| parent: Trace analytics | ||||||
| nav_order: 55 | ||||||
| --- | ||||||
|
|
||||||
| # Analyze Jaeger trace data | ||||||
|
alicejw1 marked this conversation as resolved.
Outdated
|
||||||
|
|
||||||
| Introduced 2.5 | ||||||
| {: .label .label-purple } | ||||||
|
alicejw1 marked this conversation as resolved.
|
||||||
|
|
||||||
| The trace analytics functionality in the OpenSearch Observability plugin now supports Jaeger trace data. If you use OpenSearch as the backend for Jaeger trace data, you can use the trace analytics built-in analysis capabilities. This provides support for OpenTelemetry (OTEL) formatted trace data. | ||||||
|
alicejw1 marked this conversation as resolved.
Outdated
|
||||||
|
|
||||||
| When you perform trace analytics, you can select from two data sources: | ||||||
|
|
||||||
| - **Data Prepper** – Data ingested into OpenSearch through Data Prepper. | ||||||
|
alicejw1 marked this conversation as resolved.
Outdated
|
||||||
| - **Jaeger** – Trace data stored within OpenSearch as its backend. | ||||||
|
alicejw1 marked this conversation as resolved.
Outdated
|
||||||
|
|
||||||
| If you currently store your Jaeger trace data in OpenSearch, you can now use the capabilities built into trace analytics to analyze the error rates and latency. You can also filter the traces and look into the span details of a trace to pinpoint any service issues. | ||||||
|
alicejw1 marked this conversation as resolved.
Outdated
|
||||||
|
|
||||||
| When you ingest Jaeger data into OpenSearch, it gets stored in a different index than the OTEL-generated index that gets created when you run data through Data Prepper. Use the data source selector in Dashboards to indicate on which data source you want to perform trace analytics. | ||||||
|
alicejw1 marked this conversation as resolved.
Outdated
|
||||||
|
|
||||||
| Jaeger trace data that you can analyze includes span data, as well as service and operation endpoint data. <!-- Need more info for next release. add how to configure for span analysis. Jaeger span data analysis requires some configuration.--> | ||||||
|
alicejw1 marked this conversation as resolved.
Outdated
|
||||||
|
|
||||||
| By default, each time you ingest data for Jaeger, it creates a separate index for that day. | ||||||
|
|
||||||
| To learn more about Jaeger data tracing, see the [Jaeger](https://www.jaegertracing.io/) open source documentation. | ||||||
|
alicejw1 marked this conversation as resolved.
Outdated
|
||||||
|
|
||||||
| ## Data ingestion requirements | ||||||
|
|
||||||
| To use trace analytics with Jaeger data, you need to configure error capability. | ||||||
|
alicejw1 marked this conversation as resolved.
Outdated
|
||||||
|
|
||||||
| Jaeger data that is ingested for OpenSearch needs to have the environment variable `ES_TAGS_AS_FIELDS_ALL` set to `true` for errors. If data is not ingested in this format it will not work for errors and error data will not be available for traces in trace analytics with OpenSearch. | ||||||
|
alicejw1 marked this conversation as resolved.
Outdated
|
||||||
|
|
||||||
| ### About data ingestion with Jaeger indexes | ||||||
|
|
||||||
| Trace analytics for non-Jaeger data use OTEL indexes with the naming conventions `otel-v1-apm-span-*` or `otel-v1-apm-service-map*`. | ||||||
|
alicejw1 marked this conversation as resolved.
Outdated
|
||||||
|
|
||||||
| Jaeger indexes follow the naming conventions `jaeger-span-*` or `jaeger-service-*`. | ||||||
|
|
||||||
| ## How to set up OpenSearch to use Jaeger data | ||||||
|
alicejw1 marked this conversation as resolved.
Outdated
|
||||||
|
|
||||||
| The following section provides a sample Docker compose file that contains the required configuration to enable errors for trace analytics. | ||||||
|
alicejw1 marked this conversation as resolved.
Outdated
|
||||||
|
|
||||||
| ### Step 1: Run the Docker compose file | ||||||
|
alicejw1 marked this conversation as resolved.
Outdated
|
||||||
|
|
||||||
| Use the following Docker compose file to enable Jaeger data for trace analytics with the `ES_TAGS_AS_FIELDS_ALL` environment variable set to `true` to enable errors to be added to trace data. | ||||||
|
alicejw1 marked this conversation as resolved.
Outdated
|
||||||
|
|
||||||
| Copy the following Docker compose file contents and save it as `docker-compose.yml`. | ||||||
|
alicejw1 marked this conversation as resolved.
Outdated
|
||||||
|
|
||||||
| ``` | ||||||
| version: '3' | ||||||
| services: | ||||||
| opensearch-node1: # This is also the hostname of the container within the Docker network (i.e. https://opensearch-node1/) | ||||||
| image: opensearchproject/opensearch:latest # Specifying the latest available image - modify if you want a specific version | ||||||
| container_name: opensearch-node1 | ||||||
| environment: | ||||||
| - cluster.name=opensearch-cluster # Name the cluster | ||||||
| - node.name=opensearch-node1 # Name the node that will run in this container | ||||||
| - discovery.seed_hosts=opensearch-node1,opensearch-node2 # Nodes to look for when discovering the cluster | ||||||
| - cluster.initial_cluster_manager_nodes=opensearch-node1,opensearch-node2 # Nodes eligible to serve as cluster manager | ||||||
| - bootstrap.memory_lock=true # Disable JVM heap memory swapping | ||||||
| - "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" # Set min and max JVM heap sizes to at least 50% of system RAM | ||||||
| ulimits: | ||||||
| memlock: | ||||||
| soft: -1 # Set memlock to unlimited (no soft or hard limit) | ||||||
| hard: -1 | ||||||
| nofile: | ||||||
| soft: 65536 # Maximum number of open files for the opensearch user - set to at least 65536 | ||||||
| hard: 65536 | ||||||
| volumes: | ||||||
| - opensearch-data1:/usr/share/opensearch/data # Creates volume called opensearch-data1 and mounts it to the container | ||||||
| ports: | ||||||
| - "9200:9200" | ||||||
| - "9600:9600" | ||||||
| networks: | ||||||
| - opensearch-net # All of the containers will join the same Docker bridge network | ||||||
|
|
||||||
| opensearch-node2: | ||||||
| image: opensearchproject/opensearch:latest # This should be the same image used for opensearch-node1 to avoid issues | ||||||
| container_name: opensearch-node2 | ||||||
| environment: | ||||||
| - cluster.name=opensearch-cluster | ||||||
| - node.name=opensearch-node2 | ||||||
| - discovery.seed_hosts=opensearch-node1,opensearch-node2 | ||||||
| - cluster.initial_cluster_manager_nodes=opensearch-node1,opensearch-node2 | ||||||
| - bootstrap.memory_lock=true | ||||||
| - "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" | ||||||
| ulimits: | ||||||
| memlock: | ||||||
| soft: -1 | ||||||
| hard: -1 | ||||||
| nofile: | ||||||
| soft: 65536 | ||||||
| hard: 65536 | ||||||
| volumes: | ||||||
| - opensearch-data2:/usr/share/opensearch/data | ||||||
| networks: | ||||||
| - opensearch-net | ||||||
| opensearch-dashboards: | ||||||
| image: opensearchproject/opensearch-dashboards:latest # Make sure the version of opensearch-dashboards matches the version of opensearch installed on other nodes | ||||||
| container_name: opensearch-dashboards | ||||||
| ports: | ||||||
| - 5601:5601 # Map host port 5601 to container port 5601 | ||||||
| expose: | ||||||
| - "5601" # Expose port 5601 for web access to OpenSearch Dashboards | ||||||
| environment: | ||||||
| OPENSEARCH_HOSTS: '["https://opensearch-node1:9200","https://opensearch-node2:9200"]' # Define the OpenSearch nodes that OpenSearch Dashboards will query | ||||||
| networks: | ||||||
| - opensearch-net | ||||||
|
|
||||||
| jaeger-collector: | ||||||
| image: jaegertracing/jaeger-collector:latest | ||||||
| ports: | ||||||
| - "14269:14269" | ||||||
| - "14268:14268" | ||||||
| - "14267:14267" | ||||||
| - "14250:14250" | ||||||
| - "9411:9411" | ||||||
| networks: | ||||||
| - opensearch-net | ||||||
| restart: on-failure | ||||||
| environment: | ||||||
| - SPAN_STORAGE_TYPE=opensearch | ||||||
| - ES_TAGS_AS_FIELDS_ALL=true | ||||||
| - ES_USERNAME=admin | ||||||
| - ES_PASSWORD=admin | ||||||
| - ES_TLS_SKIP_HOST_VERIFY=true | ||||||
| command: [ | ||||||
| "--es.server-urls=https://opensearch-node1:9200", | ||||||
| "--es.tls.enabled=true", | ||||||
| ] | ||||||
| depends_on: | ||||||
| - opensearch-node1 | ||||||
|
|
||||||
| jaeger-agent: | ||||||
| image: jaegertracing/jaeger-agent:latest | ||||||
| hostname: jaeger-agent | ||||||
| command: ["--reporter.grpc.host-port=jaeger-collector:14250"] | ||||||
| ports: | ||||||
| - "5775:5775/udp" | ||||||
| - "6831:6831/udp" | ||||||
| - "6832:6832/udp" | ||||||
| - "5778:5778" | ||||||
| networks: | ||||||
| - opensearch-net | ||||||
| restart: on-failure | ||||||
| environment: | ||||||
| - SPAN_STORAGE_TYPE=opensearch | ||||||
| depends_on: | ||||||
| - jaeger-collector | ||||||
|
|
||||||
| hotrod: | ||||||
| image: jaegertracing/example-hotrod:latest | ||||||
| ports: | ||||||
| - "8080:8080" | ||||||
| command: ["all"] | ||||||
| environment: | ||||||
| - JAEGER_AGENT_HOST=jaeger-agent | ||||||
| - JAEGER_AGENT_PORT=6831 | ||||||
| networks: | ||||||
| - opensearch-net | ||||||
| depends_on: | ||||||
| - jaeger-agent | ||||||
|
|
||||||
| volumes: | ||||||
| opensearch-data1: | ||||||
| opensearch-data2: | ||||||
|
|
||||||
| networks: | ||||||
| opensearch-net: | ||||||
| ``` | ||||||
|
|
||||||
| ### Step 2: Start the cluster | ||||||
|
|
||||||
| Run the following command to deploy the Docker compose YAML file. | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
|
|
||||||
| ``` | ||||||
| docker compose up -d | ||||||
| ``` | ||||||
| To stop the cluster, run the following command: | ||||||
|
|
||||||
| ``` | ||||||
| docker compose down | ||||||
| ``` | ||||||
|
|
||||||
| ### Step 3: Generate sample data | ||||||
|
|
||||||
| Use the sample app provided with the Docker file to generate data. After you run the Docker compose file, it runs the sample app in your local host port 8080. To open the app, go to http://localhost:8080. | ||||||
|
alicejw1 marked this conversation as resolved.
Outdated
|
||||||
|
|
||||||
|  | ||||||
|
|
||||||
| In the sample app, Hot R.O.D., select any one of the buttons to generate data. Now you can view trace data in Dashboards. | ||||||
|
alicejw1 marked this conversation as resolved.
Outdated
|
||||||
|
|
||||||
| ### Step 4: View trace data in OpenSearch Dashboards | ||||||
|
|
||||||
| After you generate Jaeger trace data you can go to OpenSearch Dashboards to view your trace data. | ||||||
|
alicejw1 marked this conversation as resolved.
Outdated
|
||||||
|
|
||||||
| Go to Dashboards **Trace analytics** at [http://localhost:5601/app/observability-dashboards#/trace_analytics/home](http://localhost:5601/app/observability-dashboards#/trace_analytics/home). | ||||||
|
alicejw1 marked this conversation as resolved.
Outdated
|
||||||
|
|
||||||
| ## Use trace analytics in OpenSearch Dashboards | ||||||
|
alicejw1 marked this conversation as resolved.
Outdated
|
||||||
|
|
||||||
| To analyze the Jaeger trace data in Dashboards, first set up the trace analytics functionality. To get started, see [Get started with trace analytics]({{site.url}}{{site.baseurl}}/observability-plugin/trace/get-started/). | ||||||
|
|
||||||
| ### Data sources | ||||||
|
|
||||||
| You can specify either Data Prepper or Jaeger as the data source when you perform trace analytics. | ||||||
| From Dashboards, go to **Observability > Trace analytics** and select Jaeger. | ||||||
|
|
||||||
|  | ||||||
|
|
||||||
| ## Dashboard view | ||||||
|
|
||||||
| After you select Jaeger for the data source, you can view all of the indexed data in **Dashboard** view, including **Error rate** and **Throughput**. | ||||||
|
alicejw1 marked this conversation as resolved.
Outdated
|
||||||
|
|
||||||
| ### Error rate | ||||||
|
|
||||||
| You can view the trace error count over time in the **Dashboard** view and also see the top five combinations of services and operations that have a non-zero error rate. | ||||||
|
alicejw1 marked this conversation as resolved.
Outdated
|
||||||
|
|
||||||
|  | ||||||
|
|
||||||
| ### Throughput | ||||||
|
|
||||||
| With **Throughput** selected, you can see the throughput of traces on Jaeger indexes that are coming in over time. | ||||||
|
alicejw1 marked this conversation as resolved.
Outdated
|
||||||
|
|
||||||
| You can select an individual trace from **Top 5 Service and Operation Latency** list and view the detailed trace data. | ||||||
|
alicejw1 marked this conversation as resolved.
Outdated
|
||||||
|
|
||||||
|  | ||||||
|
|
||||||
| You can also see the combinations of services and operations that have the highest latency. | ||||||
|
|
||||||
| If you select one of the entries for Service and Operation Name and go to the **Traces** column to select a trace, it will automatically add the service and operation as filters. | ||||||
|
|
||||||
| ## Traces | ||||||
|
|
||||||
| In **Traces**, you can see the latency and errors for the filtered service and operation for each individual Trace ID in the list. | ||||||
|
alicejw1 marked this conversation as resolved.
Outdated
alicejw1 marked this conversation as resolved.
Outdated
|
||||||
|
|
||||||
|  | ||||||
|
|
||||||
| If you select an individual Trace ID, you can see more detailed information about the trace, such as time spent by the service and each span for the service and operation. You can also view the payload that you get from the index in JSON format. | ||||||
|
alicejw1 marked this conversation as resolved.
Outdated
|
||||||
|
|
||||||
|  | ||||||
|
|
||||||
| ## Services | ||||||
|
|
||||||
| You can also look at individual error rates and latency for each individual service. Go to **Observability > Trace analytics > Services**. In **Services**, you can see the average latency, error rate, throughput and trace for each service in the list. | ||||||
|
alicejw1 marked this conversation as resolved.
Outdated
|
||||||
|
|
||||||
|  | ||||||
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.