Skip to content
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

Trace analytics update #7362

Merged
merged 70 commits into from
Jun 20, 2024
Merged
Show file tree
Hide file tree
Changes from 20 commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
93516cf
update the integration page to reflect the integration catalog and ad…
YANG-DB Jun 6, 2024
2615a67
update the integration documentation
YANG-DB Jun 7, 2024
49c42c0
Update schema section
Swiddis Jun 10, 2024
f311e7d
Merge pull request #1 from Swiddis/schema-rewrite
YANG-DB Jun 10, 2024
cfcec50
Merge pull request #2 from opensearch-project/main
YANG-DB Jun 10, 2024
1cfd6ff
Merge branch 'main' into integration-catalog-update
YANG-DB Jun 11, 2024
272d5ee
Merge branch 'main' into integration-catalog-update
YANG-DB Jun 11, 2024
c78a878
update the metrics analytics documentation
YANG-DB Jun 11, 2024
569da98
Merge remote-tracking branch 'origin/integration-catalog-update' into…
YANG-DB Jun 11, 2024
c08bc63
update the trace analytics documentation
YANG-DB Jun 11, 2024
588620d
Update _observing-your-data/trace/ta-dashboards.md
vagimeli Jun 11, 2024
7ff2e0f
Update _observing-your-data/trace/ta-dashboards.md
vagimeli Jun 11, 2024
e7f32c9
Update _observing-your-data/trace/ta-dashboards.md
vagimeli Jun 11, 2024
10f5bc5
Update _observing-your-data/trace/ta-dashboards.md
vagimeli Jun 11, 2024
4c87982
Update _observing-your-data/trace/ta-dashboards.md
vagimeli Jun 11, 2024
aab2347
Update _observing-your-data/trace/ta-dashboards.md
vagimeli Jun 11, 2024
25e7bc1
Update _observing-your-data/trace/ta-dashboards.md
vagimeli Jun 11, 2024
1e0e1c7
Update _observing-your-data/trace/ta-dashboards.md
vagimeli Jun 11, 2024
b2960ed
Update _observing-your-data/trace/ta-dashboards.md
vagimeli Jun 11, 2024
72d0d9e
Update _observing-your-data/trace/ta-dashboards.md
vagimeli Jun 11, 2024
b00b006
Update ta-dashboards.md
vagimeli Jun 11, 2024
393e2e1
Merge branch 'main' into trace-analytics-update
vagimeli Jun 11, 2024
1521795
Update _observing-your-data/trace/ta-dashboards.md
vagimeli Jun 11, 2024
0e59e6d
Update _observing-your-data/trace/ta-dashboards.md
vagimeli Jun 11, 2024
1f4b111
Merge branch 'opensearch-project:main' into trace-analytics-update
YANG-DB Jun 12, 2024
2de6d49
update service correlation index naming convention
YANG-DB Jun 12, 2024
a392b63
Update ta-dashboards.md
vagimeli Jun 13, 2024
9ee3d81
Update ta-dashboards.md
vagimeli Jun 13, 2024
70e321f
Update ta-dashboards.md
vagimeli Jun 13, 2024
95a01cf
Update ta-dashboards.md
vagimeli Jun 13, 2024
6d3f9a4
Merge branch 'main' into trace-analytics-update
vagimeli Jun 13, 2024
01aaf20
Update ta-dashboards.md
vagimeli Jun 18, 2024
af81b46
Update ta-dashboards.md
vagimeli Jun 19, 2024
a0e0764
Update ta-dashboards.md
vagimeli Jun 19, 2024
0832eb1
Update _observing-your-data/trace/ta-dashboards.md
vagimeli Jun 19, 2024
1a4ed0a
Update _observing-your-data/trace/ta-dashboards.md
vagimeli Jun 19, 2024
c0fed9f
Update _observing-your-data/trace/ta-dashboards.md
YANG-DB Jun 19, 2024
22a6bf1
Update _observing-your-data/trace/ta-dashboards.md
YANG-DB Jun 19, 2024
59cb066
Update _observing-your-data/trace/ta-dashboards.md
YANG-DB Jun 19, 2024
4556fa3
Update _observing-your-data/trace/ta-dashboards.md
YANG-DB Jun 19, 2024
66e88ec
Update _observing-your-data/trace/ta-dashboards.md
YANG-DB Jun 19, 2024
97244d1
Update _observing-your-data/trace/ta-dashboards.md
YANG-DB Jun 19, 2024
6f9cd44
Update _observing-your-data/trace/ta-dashboards.md
YANG-DB Jun 19, 2024
8d72dbf
Update _observing-your-data/trace/ta-dashboards.md
YANG-DB Jun 19, 2024
ea35cc0
Update _observing-your-data/trace/ta-dashboards.md
YANG-DB Jun 19, 2024
41e87e3
Update _observing-your-data/trace/ta-dashboards.md
YANG-DB Jun 19, 2024
7233f31
Update _observing-your-data/trace/ta-dashboards.md
YANG-DB Jun 19, 2024
fb5903a
Update _observing-your-data/trace/ta-dashboards.md
YANG-DB Jun 19, 2024
08c4b4a
Update _observing-your-data/trace/ta-dashboards.md
YANG-DB Jun 19, 2024
214a707
Update _observing-your-data/trace/ta-dashboards.md
YANG-DB Jun 19, 2024
622d796
Update _observing-your-data/trace/ta-dashboards.md
YANG-DB Jun 19, 2024
dfa57f0
Update _observing-your-data/trace/ta-dashboards.md
YANG-DB Jun 19, 2024
83ef1f3
Update _observing-your-data/trace/ta-dashboards.md
YANG-DB Jun 19, 2024
edc0f18
Update _observing-your-data/trace/ta-dashboards.md
YANG-DB Jun 19, 2024
31888a1
Update _observing-your-data/trace/ta-dashboards.md
YANG-DB Jun 19, 2024
41b1a78
Update _observing-your-data/trace/ta-dashboards.md
YANG-DB Jun 19, 2024
9bbd084
Update _observing-your-data/trace/ta-dashboards.md
YANG-DB Jun 19, 2024
a51d01b
Update _observing-your-data/trace/ta-dashboards.md
vagimeli Jun 19, 2024
9f3beb2
Update _observing-your-data/trace/ta-dashboards.md
vagimeli Jun 19, 2024
1cc94d6
Update _observing-your-data/trace/ta-dashboards.md
vagimeli Jun 19, 2024
11b9c58
Update _observing-your-data/trace/ta-dashboards.md
vagimeli Jun 19, 2024
b7b12f0
Update _observing-your-data/trace/ta-dashboards.md
vagimeli Jun 19, 2024
3c0ddab
Update _observing-your-data/trace/ta-dashboards.md
vagimeli Jun 19, 2024
9e59974
Update _observing-your-data/trace/ta-dashboards.md
vagimeli Jun 19, 2024
59e9e7e
Update _observing-your-data/trace/ta-dashboards.md
vagimeli Jun 19, 2024
22fd303
Update _observing-your-data/trace/ta-dashboards.md
vagimeli Jun 19, 2024
5509571
Update _observing-your-data/trace/ta-dashboards.md
vagimeli Jun 19, 2024
0018777
Merge branch 'main' into trace-analytics-update
vagimeli Jun 19, 2024
6cc7072
Merge branch 'main' into trace-analytics-update
vagimeli Jun 20, 2024
e5e42bc
Merge branch 'main' into trace-analytics-update
vagimeli Jun 20, 2024
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
100 changes: 95 additions & 5 deletions _observing-your-data/trace/ta-dashboards.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,106 @@

# Trace Analytics OpenSearch Dashboards plugin
vagimeli marked this conversation as resolved.
Show resolved Hide resolved

The Trace Analytics plugin for OpenSearch Dashboards provides at-a-glance visibility into your application performance, along with the ability to drill down on individual traces. For installation instructions, see [Standalone OpenSearch Dashboards plugin install]({{site.url}}{{site.baseurl}}/install-and-configure/install-dashboards/plugins/).
The Trace Analytics plugin offers at-a-glance visibility into application performance based on OpenTelemetry protocol data.
Introduced 2.15
YANG-DB marked this conversation as resolved.
Show resolved Hide resolved
{: .label .label-purple }

The **Dashboard** view groups traces together by HTTP method and path so that you can see the average latency, error rate, and trends associated with a particular operation. For a more focused view, try filtering by trace group name.
OpenSearch Observability Trace Analytics offers an improved user experience (UX) with OpenTelemetry (OTel) protocol analytics, providing comprehensive distributed systems insights. The improved UX enables you to correlate signals, aiding in identifying relationships and root causes of issues.
[OTel](https://opentelemetry.io/), an open-source observability framework, offers standardized instrumentation for collecting telemetry data from cloud-native software.
## Trace analytics capabilities

![Dashboard view]({{site.url}}{{site.baseurl}}/images/ta-dashboard.png)
This improved trace-analytics experience enables you to analyze and visualize services, traces, and rate, error and duration (RED) metrics.

- [Services](https://opentelemetry.io/docs/specs/semconv/resource/#service) represent the different components of a distributed application. They are a significant logical term used to measure and monitor the application's building blocks to validate the system's health.
- [Traces](https://opentelemetry.io/docs/concepts/signals/traces/) provide end-to-end visibility into requests' journeys across services, offering insights into latency and performance issues.
- [RED metrics](https://opentelemetry.io/docs/specs/otel/metrics/api/) RED metrics monitor service health and performance by focusing on requests per second (rate), failed requests (errors), and request processing time (duration).



The Trace Analytics shows multiple service-visualizations (table and map) - which allow a logical analysis of the service's behavior and correctness.

The following visualizations represent various ways that will assist the user to quickly identify anomalies and errors

1) In the **Services table** each column shows one of the RED indicators (Requests, Errors, Duration ) in addition to the connected up/down stream services and other actions
![Services Table]({{site.url}}{{site.baseurl}}/images/trace-analytics/services-table.png)

1.2) The Service table allows filtering the shown services using a general purpose filter selection which supports any field to use as a filter or a filter composition.
![Services Filter selection]({{site.url}}{{site.baseurl}}/images/trace-analytics/services-filter-selection.png)

1.3) The Service throughput tooltip shows a service's throughput in a glans to allow quick and simple analysis of the amount of incoming requests during the past 24 hours
YANG-DB marked this conversation as resolved.
Show resolved Hide resolved
![Services throughput tooltip ]({{site.url}}{{site.baseurl}}/images/trace-analytics/service-throughput-tooltip.png)

1.4) The Service correlation dialog shows an overview of the selected service (including the above 24 hours throughput trend) and allows the user to deep dive into the correlated logs or traces which are using the `servicName` field as a correlation dimension.
![Services service-correlation dialog ]({{site.url}}{{site.baseurl}}/images/trace-analytics/single-service-correlation-dialog.png)

1.5) The Service RED metrics dialog shows an overview of the selected service's RED metrics indicators including the 24 hours error, duration and throughput rate for that selected service
![Service RED metrics]({{site.url}}{{site.baseurl}}/images/trace-analytics/single-service-RED-metrics.png)

1.6) The Service's span dialog allows to dive even further and analyze a specific trace down to its composing elements including the attributes and associated logs.
![Service's Spans dialog]({{site.url}}{{site.baseurl}}/images/trace-analytics/span-details-fly-out.png)

2) In the **Services Map** each node represents the service and has a color schema that indicates the severity of the associated RED indicator (shown above as 3 selection buttons). The selected service can be opened in a detailed dialog.

Check warning on line 51 in _observing-your-data/trace/ta-dashboards.md

View workflow job for this annotation

GitHub Actions / style-job

[vale] reported by reviewdog 🐶 [OpenSearch.DirectionAboveBelow] Use 'previous, preceding, or earlier' instead of 'above' for versions or orientation within a document. Use 'above' and 'below' only for physical space or screen descriptions. Raw Output: {"message": "[OpenSearch.DirectionAboveBelow] Use 'previous, preceding, or earlier' instead of 'above' for versions or orientation within a document. Use 'above' and 'below' only for physical space or screen descriptions.", "location": {"path": "_observing-your-data/trace/ta-dashboards.md", "range": {"start": {"line": 51, "column": 151}}}, "severity": "WARNING"}
This interactive map shows how the various services connect to each other, In contrast to the dashboard, which helps identify problems by operation, the service map helps identify problems by service. Try sorting by error rate or latency to get a sense of potential problem areas of your application.

3) ![Services map tooltip]({{site.url}}{{site.baseurl}}/images/trace-analytics/service-details-tooltip.png)

2.1) In the Single **Services Map** flyout each node represents the connected services downstream from the selected service and has a color schema that indicates the severity of the associated RED indicator including the connected downstream depended services
![Services Map single flyout]({{site.url}}{{site.baseurl}}/images/trace-analytics/single-service-fly-out.png)

3) In the **Trace Group Dialog** traces are grouped according to their http API name which allows the clustering of different traces with accordance to their business functional unit.

Check failure on line 59 in _observing-your-data/trace/ta-dashboards.md

View workflow job for this annotation

GitHub Actions / style-job

[vale] reported by reviewdog 🐶 [OpenSearch.Spelling] Error: http. If you are referencing a setting, variable, format, function, or repository, surround it with tic marks. Raw Output: {"message": "[OpenSearch.Spelling] Error: http. If you are referencing a setting, variable, format, function, or repository, surround it with tic marks.", "location": {"path": "_observing-your-data/trace/ta-dashboards.md", "range": {"start": {"line": 59, "column": 72}}}, "severity": "ERROR"}
The **Trace Group Dialog** view groups traces together by HTTP method and path so that you can see the average latency, error rate, and trends associated with a particular operation. For a more focused view, try filtering by trace group name.
![Services Map single flyout]({{site.url}}{{site.baseurl}}/images/trace-analytics/trace-group-RED-metrics.png)

3.1) The **Trace Group Dialog** allows filtering according to the group's name and additional filters as well, it also allows to dive into the traces table associated with that group.
To drill down on the traces that make up a trace group, choose the number of traces in the column on the right. Then choose an individual trace for a detailed summary.
![Trace Group view]({{site.url}}{{site.baseurl}}/images/ta-dashboard.png)

4) **Trace Details View** shows a single trace breakdown in terms of its composing spans and their associated serviceName, a water-fall chart of the spans time and duration interactions.

Check failure on line 67 in _observing-your-data/trace/ta-dashboards.md

View workflow job for this annotation

GitHub Actions / style-job

[vale] reported by reviewdog 🐶 [OpenSearch.Spelling] Error: serviceName. If you are referencing a setting, variable, format, function, or repository, surround it with tic marks. Raw Output: {"message": "[OpenSearch.Spelling] Error: serviceName. If you are referencing a setting, variable, format, function, or repository, surround it with tic marks.", "location": {"path": "_observing-your-data/trace/ta-dashboards.md", "range": {"start": {"line": 67, "column": 111}}}, "severity": "ERROR"}
![Detailed trace view]({{site.url}}{{site.baseurl}}/images/ta-trace.png)

The **Services** view lists all services in the application, plus an interactive map that shows how the various services connect to each other. In contrast to the dashboard, which helps identify problems by operation, the service map helps identify problems by service. Try sorting by error rate or latency to get a sense of potential problem areas of your application.
### Installing the OpenSearch Dashboards plugin
[Standalone OpenSearch Dashboards plugin install]({{site.url}}{{site.baseurl}}/install-and-configure/install-dashboards/plugins/).

### Schema dependencies and assumptions

The Trace Analytics plugin requires several schema dependencies and assumptions to effectively process and visualize OpenTelemetry (OTEL) data.

Check failure on line 75 in _observing-your-data/trace/ta-dashboards.md

View workflow job for this annotation

GitHub Actions / style-job

[vale] reported by reviewdog 🐶 [Vale.Terms] Use 'OTel' instead of 'OTEL'. Raw Output: {"message": "[Vale.Terms] Use 'OTel' instead of 'OTEL'.", "location": {"path": "_observing-your-data/trace/ta-dashboards.md", "range": {"start": {"line": 75, "column": 133}}}, "severity": "ERROR"}
In addition, the plugin requires [**Data-Prepper**](https://opensearch.org/docs/latest/data-prepper/) to be used in conjunction with this plugin to provide all the OTEL based correlations and service-map calculations using the next pipelines

Check failure on line 76 in _observing-your-data/trace/ta-dashboards.md

View workflow job for this annotation

GitHub Actions / style-job

[vale] reported by reviewdog 🐶 [Vale.Terms] Use 'OTel' instead of 'OTEL'. Raw Output: {"message": "[Vale.Terms] Use 'OTel' instead of 'OTEL'.", "location": {"path": "_observing-your-data/trace/ta-dashboards.md", "range": {"start": {"line": 76, "column": 165}}}, "severity": "ERROR"}
- [Trace Analytics Pipeline](https://opensearch.org/docs/latest/data-prepper/common-use-cases/trace-analytics/)
- [Service Map Pipeline](https://opensearch.org/docs/latest/data-prepper/pipelines/configuration/processors/service-map-stateful/)

**Standardized Telemetry Data:**
- The plugin requires telemetry data to adhere to the OpenTelemetry schema conventions. This includes the structure and naming of spans, traces, and metrics as defined by the OpenTelemetry specifications and implemented using the [simple schema for observability](https://opensearch.org/docs/latest/observing-your-data/ss4o/).

Check failure on line 81 in _observing-your-data/trace/ta-dashboards.md

View workflow job for this annotation

GitHub Actions / style-job

[vale] reported by reviewdog 🐶 [Vale.Terms] Use 'Simple Schema for Observability' instead of 'simple schema for observability'. Raw Output: {"message": "[Vale.Terms] Use 'Simple Schema for Observability' instead of 'simple schema for observability'.", "location": {"path": "_observing-your-data/trace/ta-dashboards.md", "range": {"start": {"line": 81, "column": 232}}}, "severity": "ERROR"}

**Service Names & Dependency Map:**

Check warning on line 83 in _observing-your-data/trace/ta-dashboards.md

View workflow job for this annotation

GitHub Actions / style-job

[vale] reported by reviewdog 🐶 [OpenSearch.Ampersand] Don't use an ampersand in place of 'and' in documentation. Raw Output: {"message": "[OpenSearch.Ampersand] Don't use an ampersand in place of 'and' in documentation.", "location": {"path": "_observing-your-data/trace/ta-dashboards.md", "range": {"start": {"line": 83, "column": 15}}}, "severity": "WARNING"}
- Service names should be unique and consistently used across different components of the application to ensure accurate service mapping and correlation analysis - serviceName are populated using data-prepper pipeline

Check failure on line 84 in _observing-your-data/trace/ta-dashboards.md

View workflow job for this annotation

GitHub Actions / style-job

[vale] reported by reviewdog 🐶 [OpenSearch.Spelling] Error: serviceName. If you are referencing a setting, variable, format, function, or repository, surround it with tic marks. Raw Output: {"message": "[OpenSearch.Spelling] Error: serviceName. If you are referencing a setting, variable, format, function, or repository, surround it with tic marks.", "location": {"path": "_observing-your-data/trace/ta-dashboards.md", "range": {"start": {"line": 84, "column": 165}}}, "severity": "ERROR"}
- Services must be ingested with per-defined upstream and downstream dependencies, which are necessary for constructing accurate service maps and understanding service relationships.

**Trace and Span IDs**:
- Unique identifiers for traces and spans must be consistently generated and maintained across distributed systems to enable end-to-end tracing and accurate performance insights.

**RED Metrics Adherence:**
- The plugin expects metrics data to include RED indicators (Rate, Error, Duration) for each service ( pre-aggregated using data-prepper's pipeline OR calculated on the fly based on the spans) allowing to compute and display key performance indicators effectively.

**Correlation Fields:**
- Certain fields, such as **serviceName**, are assumed to be present and used for correlation analysis. These fields enable the plugin to link related telemetry data and provide a holistic view of service interactions and dependencies.

Check failure on line 94 in _observing-your-data/trace/ta-dashboards.md

View workflow job for this annotation

GitHub Actions / style-job

[vale] reported by reviewdog 🐶 [OpenSearch.Spelling] Error: serviceName. If you are referencing a setting, variable, format, function, or repository, surround it with tic marks. Raw Output: {"message": "[OpenSearch.Spelling] Error: serviceName. If you are referencing a setting, variable, format, function, or repository, surround it with tic marks.", "location": {"path": "_observing-your-data/trace/ta-dashboards.md", "range": {"start": {"line": 94, "column": 29}}}, "severity": "ERROR"}

### Training using OpenTelemetry Demo

Check failure on line 96 in _observing-your-data/trace/ta-dashboards.md

View workflow job for this annotation

GitHub Actions / style-job

[vale] reported by reviewdog 🐶 [OpenSearch.HeadingCapitalization] 'Training using OpenTelemetry Demo' is a heading and should be in sentence case. Raw Output: {"message": "[OpenSearch.HeadingCapitalization] 'Training using OpenTelemetry Demo' is a heading and should be in sentence case.", "location": {"path": "_observing-your-data/trace/ta-dashboards.md", "range": {"start": {"line": 96, "column": 5}}}, "severity": "ERROR"}
To get started with the OpenSearch Dashboards Trace Analytics plugin, we recommend using the[ OpenSearch OpenTelemetry Demo](https://github.com/opensearch-project/opentelemetry-demo).
The OpenTelemetry Demo is a comprehensive, open-source example that simulates a distributed web astronomy shop application, generating real-time telemetry data. This demo provides an ideal environment to explore and understand the features of the Trace Analytics plugin.

1. **Setup OpenTelemetry Demo**:
- Clone the OpenTelemetry Demo repository from GitHub: [OpenSearch OpenTelemetry Demo](https://github.com/opensearch-project/opentelemetry-demo).
- Follow the [Getting Started](https://github.com/opensearch-project/opentelemetry-demo/blob/main/tutorial/GettingStarted.md) setup instructions provided in the repository to deploy the demo application. This typically involves using Docker to run multiple microservices that generate telemetry data.

2. **Ingest Telemetry Data**:
- Configure the OpenTelemetry collectors in the demo to send telemetry data to your OpenSearch cluster. This [pre-existing setup](https://github.com/opensearch-project/opentelemetry-demo/tree/main/src/otelcollector) ensures that the generated traces, metrics, and logs are ingested into OpenSearch for analysis.
- Ensure that [Data Prepper](https://github.com/opensearch-project/opentelemetry-demo/tree/main/src/dataprepper) is set up to process the incoming data. Data Prepper will handle the trace analytics and service map pipelines, submitting the data according to the required indices and performing the pre-aggregated calculations.

Check failure on line 106 in _observing-your-data/trace/ta-dashboards.md

View workflow job for this annotation

GitHub Actions / style-job

[vale] reported by reviewdog 🐶 [OpenSearch.SubstitutionsError] Use 'indexes' instead of 'indices'. Raw Output: {"message": "[OpenSearch.SubstitutionsError] Use 'indexes' instead of 'indices'.", "location": {"path": "_observing-your-data/trace/ta-dashboards.md", "range": {"start": {"line": 106, "column": 276}}}, "severity": "ERROR"}

3. **Explore Trace Analytics Features**:
- **Services Table**: Navigate to the Services table to see an overview of the services in your application. Use the filters to drill down into specific services and analyze their performance using RED metrics.
- **Services Map**: Examine the Services Map to understand the relationships between different services. This visual representation helps identify potential problem areas based on error rates and latency.
- **Trace Group Dialog**: Use the Trace Group Dialog to group traces by their HTTP method, allowing to analyze performance trends and error rates for specific operations.
- **Trace Details View**: Select an individual trace ( with high duration) to view its breakdown in the Trace Details View. This view provides a detailed analysis of each span, including their attributes and associated logs.

![Service view]({{site.url}}{{site.baseurl}}/images/ta-services.png)
4. **Perform Correlation Analysis**:
- Utilize the Service Correlation dialog to identify relationships between different telemetry signals. This feature helps in drilling down from the logical service layer down to the actual metrics and logs associated with that service.
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.
Binary file added images/trace-analytics/services-table.png
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