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

Add demo doc pages, drop tmp git submodule #2270

Merged
Merged
Show file tree
Hide file tree
Changes from all 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
3 changes: 0 additions & 3 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,3 @@
[submodule "content-modules/opentelemetry-specification"]
path = content-modules/opentelemetry-specification
url = https://github.com/open-telemetry/opentelemetry-specification.git
[submodule "content-modules/opentelemetry-demo"]
path = content-modules/opentelemetry-demo
url = https://github.com/open-telemetry/opentelemetry-demo
1 change: 0 additions & 1 deletion content-modules/opentelemetry-demo
Submodule opentelemetry-demo deleted from 4b8bb4
87 changes: 87 additions & 0 deletions content/en/docs/demo/_index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
---
title: OpenTelemetry Demo Documentation
linkTitle: Demo Documentation
---

Welcome to the OpenTelemetry Demo! This folder contains overall documentation
for the project, how to install and run it, and some scenarios you can use to
view OpenTelemetry in action.

## Table of Contents

- [Guided Scenarios](#scenarios)
- [Language Instrumentation Examples](#language-feature-reference)
- [Quick Start](#running-the-demo)
- [References](#reference)
- [Service Documentation](#service-documentation)

### Running the Demo

Want to deploy the demo and see it in action? Start here.

- [Docker]({{% relref "./docker_deployment.md" %}})
- [Kubernetes]({{% relref "./kubernetes_deployment.md" %}})

### Language Feature Reference

Want to understand how a particular language's instrumentation works? Start
here.

| Language | Auto Instrumentation | Manual Instrumentation |
|---------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------|
| .NET | [Cart Service]({{% relref "services/cartservice/" %}}) | [Cart Service]({{% relref "services/cartservice/" %}}) |
| C++ | | [Currency Service]({{% relref "services/currencyservice/" %}}) |
| Erlang/Elixir | [Feature Flag Service]({{% relref "services/featureflagservice/" %}}) | [Feature Flag Service]({{% relref "services/featureflagservice/" %}}) |
| Go | [Accounting Service]({{% relref "services/accountingservice/" %}}), [Checkout Service]({{% relref "services/checkoutservice/" %}}), [Product Catalog Service]( services/productcatalogservice/ ) | [Checkout Service]({{% relref "services/checkoutservice/" %}}), [Product Catalog Service]( services/productcatalogservice/ ) |
| Java | [Ad Service]({{% relref "services/adservice/" %}}) | [Ad Service]({{% relref "services/adservice/" %}}) |
| JavaScript | [Frontend]( services/frontend/ ) | [Frontend]({{% relref "services/frontend/" %}}), [Payment Service]({{% relref "services/paymentservice/" %}}) |
| Kotlin | [Fraud Detection Service]( services/frauddetectionservice/ ) | |
| PHP | [Quote Service]({{% relref "services/quoteservice/" %}}) | [Quote Service]({{% relref "services/quoteservice/" %}}) |
| Python | [Recommendation Service]({{% relref "services/recommendationservice/" %}}) | [Recommendation Service]({{% relref "services/recommendationservice/" %}}) |
| Ruby | [Email Service]({{% relref "services/emailservice/" %}}) | [Email Service]({{% relref "services/emailservice/" %}}) |
| Rust | [Shipping Service]({{% relref "services/shippingservice/" %}}) | [Shipping Service]({{% relref "services/shippingservice/" %}}) |

### Service Documentation

Specific information about how OpenTelemetry is deployed in each service can be
found here:

- [Ad Service]({{% relref "services/adservice/" %}})
- [Cart Service]({{% relref "services/cartservice/" %}})
- [Checkout Service]({{% relref "services/checkoutservice/" %}})
- [Email Service]({{% relref "services/emailservice/" %}})
- [Feature Flag Service]({{% relref "services/featureflagservice/" %}})
- [Frontend]({{% relref "services/frontend/" %}})
- [Load Generator]({{% relref "services/loadgenerator/" %}})
- [Payment Service]({{% relref "services/paymentservice/" %}})
- [Product Catalog Service]({{% relref "services/productcatalogservice/" %}})
- [Quote Service]({{% relref "services/quoteservice/" %}})
- [Recommendation Service]({{% relref "services/recommendationservice/" %}})
- [Shipping Service]({{% relref "services/shippingservice/" %}})

### Scenarios

How can you solve problems with OpenTelemetry? These scenarios walk you through
some pre-configured problems and show you how to interpret OpenTelemetry data to
solve them.

We'll be adding more scenarios over time.

- Generate a [Product Catalog error]({{% relref "feature_flags.md" %}}) for `GetProduct` requests
with product id: `OLJCESPC7Z` using the Feature Flag service
- Discover a memory leak and diagnose it using metrics and traces. [Read more]({{% relref "./scenarios/recommendation_cache.md" %}})

### Reference

Project reference documentation, like requirements and feature matrices.

- [Architecture]({{% relref "./current_architecture.md" %}})
- [Development]({{% relref "./development.md" %}})
- [Feature Flags Reference]({{% relref "./feature_flags.md" %}})
- [Metric Feature Matrix]({{% relref "./metric_service_features.md" %}})
- [Requirements](./requirements/)
- [Screenshots]({{% relref "./demo_screenshots.md" %}})
- [Service Roles Table]({{% relref "./service_table.md" %}})
- [Span Attributes Reference]({{% relref "./manual_span_attributes.md" %}})
- [Tests]({{% relref "./tests.md" %}})
- [Trace Feature Matrix]({{% relref "./trace_service_features.md" %}})
198 changes: 198 additions & 0 deletions content/en/docs/demo/current_architecture.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,198 @@
---
title: Demo Architecture
---

**OpenTelemetry Demo** is composed of microservices written in different programming
languages that talk to each other over gRPC and HTTP; and a load generator which
uses [Locust](https://locust.io/) to fake user traffic.

```mermaid
graph TD
subgraph Service Diagram
accountingservice(Accounting Service):::golang
adservice(Ad Service):::java
cache[(Cache<br/>&#40redis&#41)]
cartservice(Cart Service):::dotnet
checkoutservice(Checkout Service):::golang
currencyservice(Currency Service):::cpp
emailservice(Email Service):::ruby
frauddetectionservice(Fraud Detection Service):::kotlin
frontend(Frontend):::typescript
frontendproxy(Frontend Proxy <br/>&#40Envoy&#41):::cpp
loadgenerator([Load Generator]):::python
paymentservice(Payment Service):::javascript
productcatalogservice(Product Catalog Service):::golang
quoteservice(Quote Service):::php
recommendationservice(Recommendation Service):::python
shippingservice(Shipping Service):::rust
featureflagservice(Feature Flag Service):::erlang
featureflagstore[(Feature Flag Store<br/>&#40PostgreSQL DB&#41)]
queue[(queue<br/>&#40Kafka&#41)]

Internet -->|HTTP| frontendproxy
frontendproxy -->|HTTP| frontend
frontendproxy -->|HTTP| featureflagservice
loadgenerator -->|HTTP| frontend

accountingservice -->|TCP| queue

checkoutservice --->|gRPC| cartservice --> cache
checkoutservice --->|gRPC| productcatalogservice
checkoutservice --->|gRPC| currencyservice
checkoutservice --->|HTTP| emailservice
checkoutservice --->|gRPC| paymentservice
checkoutservice -->|gRPC| shippingservice
checkoutservice ---->|TCP| queue

frontend -->|gRPC| adservice
frontend -->|gRPC| cartservice
frontend -->|gRPC| productcatalogservice
frontend -->|gRPC| checkoutservice
frontend -->|gRPC| currencyservice
frontend -->|gRPC| recommendationservice -->|gRPC| productcatalogservice
frontend -->|gRPC| shippingservice -->|HTTP| quoteservice

frauddetectionservice -->|TCP| queue

adservice -->|gRPC| featureflagservice

productcatalogservice -->|gRPC| featureflagservice

recommendationservice -->|gRPC| featureflagservice

shippingservice -->|gRPC| featureflagservice

featureflagservice --> featureflagstore

end

classDef dotnet fill:#178600,color:white;
classDef cpp fill:#f34b7d,color:white;
classDef erlang fill:#b83998,color:white;
classDef golang fill:#00add8,color:black;
classDef java fill:#b07219,color:white;
classDef javascript fill:#f1e05a,color:black;
classDef kotlin fill:#560ba1,color:white;
classDef php fill:#4f5d95,color:white;
classDef python fill:#3572A5,color:white;
classDef ruby fill:#701516,color:white;
classDef rust fill:#dea584,color:black;
classDef typescript fill:#e98516,color:black;
```

```mermaid
graph TD
subgraph Service Legend
dotnetsvc(.NET):::dotnet
cppsvc(C++):::cpp
erlangsvc(Erlang/Elixir):::erlang
golangsvc(Go):::golang
javasvc(Java):::java
javascriptsvc(JavaScript):::javascript
kotlinsvc(Kotlin):::kotlin
phpsvc(PHP):::php
pythonsvc(Python):::python
rubysvc(Ruby):::ruby
rustsvc(Rust):::rust
typescriptsvc(TypeScript):::typescript
end

classDef dotnet fill:#178600,color:white;
classDef cpp fill:#f34b7d,color:white;
classDef erlang fill:#b83998,color:white;
classDef golang fill:#00add8,color:black;
classDef java fill:#b07219,color:white;
classDef javascript fill:#f1e05a,color:black;
classDef kotlin fill:#560ba1,color:white;
classDef php fill:#4f5d95,color:white;
classDef python fill:#3572A5,color:white;
classDef ruby fill:#701516,color:white;
classDef rust fill:#dea584,color:black;
classDef typescript fill:#e98516,color:black;
```

Follow these links for the current state of
[metric](https://github.com/open-telemetry/opentelemetry-demo/blob/main/docs/metric_service_features.md)
and
[trace](https://github.com/open-telemetry/opentelemetry-demo/blob/main/docs/trace_service_features.md)
instrumentation of the demo applications.

The collector is configured in
[otelcol-config.yml](https://github.com/open-telemetry/opentelemetry-demo/blob/main/src/otelcollector/otelcol-config.yml),
alternative exporters can be configured here.

```mermaid
graph TB
subgraph tdf[Telemetry Data Flow]
subgraph subgraph_padding [ ]
style subgraph_padding fill:none,stroke:none;
%% padding to stop the titles clashing
subgraph od[Open Telemetry Demo]
ms(Microservice)
end

ms -.->|"OTLP<br/>gRPC"| oc-grpc
ms -.->|"OTLP<br/>HTTP POST"| oc-http

subgraph oc[OTel Collector]
style oc fill:#97aef3,color:black;
oc-grpc[/"OTLP Receiver<br/>listening on<br/>grpc://localhost:4317/"/]
oc-http[/"OTLP Receiver<br/>listening on <br/>http://localhost:4318/<br/>https://localhost:4318/"/]
oc-proc(Processors)
oc-prom[/"Prometheus Exporter<br/>listening on<br/>http://localhost:9464/"/]
oc-jag[/"Jaeger Exporter"/]

oc-grpc --> oc-proc
oc-http --> oc-proc

oc-proc --> oc-prom
oc-proc --> oc-jag
end

oc-prom -->|"http://localhost:9464/metrics"| pr-sc
oc-jag -->|gRPC| ja-col

subgraph pr[Prometheus]
style pr fill:#e75128,color:black;
pr-sc[/"Prometheus Scraper<br/>polling every 5 seconds"/]
pr-tsdb[(Prometheus TSDB)]
pr-http[/"Prometheus HTTP<br/>listening on<br/>http://localhost:9090"/]

pr-sc --> pr-tsdb
pr-tsdb --> pr-http
end

pr-b{{"Browser<br/>Prometheus UI"}}
pr-http ---->|"http://localhost:9090/graph"| pr-b

subgraph ja[Jaeger]
style ja fill:#60d0e4,color:black;
ja-col[/"Jaeger Collector<br/>listening on<br/>grpc://jaeger:4317/"/]
ja-db[(Jaeger DB)]
ja-http[/"Jaeger HTTP<br/>listening on<br/>http://localhost:16686"/]

ja-col --> ja-db
ja-db --> ja-http
end

subgraph gr[Grafana]
style gr fill:#f8b91e,color:black;
gr-srv["Grafana Server"]
gr-http[/"Grafana HTTP<br/>listening on<br/>http://localhost:3000"/]

gr-srv --> gr-http
end

pr-http --> |"http://localhost:9090/api"| gr-srv
ja-http --> |"http://localhost:16686/api"| gr-srv

ja-b{{"Browser<br/>Jaeger UI"}}
ja-http ---->|"http://localhost:16686/search"| ja-b

gr-b{{"Browser<br/>Grafana UI"}}
gr-http -->|"http://localhost:3000/dashboard"| gr-b
end
end
```

Find the **Protocol Buffer Definitions** in the `/pb/` directory.
38 changes: 38 additions & 0 deletions content/en/docs/demo/demo_features.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
---
title: Features
---

- **[Kubernetes](https://kubernetes.io)**: the app is designed to run on
Kubernetes (both locally, as well as on the cloud) using a Helm chart.
- **[Docker](https://docs.docker.com)**: this forked sample can also be executed
only with Docker.
- **[gRPC](https://grpc.io)**: microservices use a high volume of gRPC calls to
communicate to each other.
- **[HTTP](https://www.rfc-editor.org/rfc/rfc9110.html)**: microservices use HTTP
where gRPC is unavailable or not well supported.
- **[OpenTelemetry Traces](https://opentelemetry.io)**: all services are
instrumented using OpenTelemetry available instrumentation libraries.
- **[OpenTelemetry Metrics](https://opentelemetry.io)**: Select services are
instrumented using OpenTelemetry available instrumentation libraries. More will
be added as the relevant SDKs are released.
- **[OpenTelemetry
Collector](/docs/collector/getting-started)**: all
services are instrumented and sending the generated traces and metrics to the
OpenTelemetry Collector via gRPC. The received traces are then exported to the
logs and to Jaeger; received metrics and exemplars* are exported to logs and Prometheus.
- **[Jaeger](https://www.jaegertracing.io)**: all generated traces are being
sent to Jaeger.
- **Synthetic Load Generation**: the application demo comes with a background
job that creates realistic usage patterns on the website using
[Locust](https://locust.io/) load generator.
- **[Prometheus](https://prometheus.io/)**: all generated metrics and exemplars
are scraped by Prometheus.
- **[Grafana](https://grafana.com/)**: all metric dashboards are stored in
Grafana.
- **[Envoy](https://www.envoyproxy.io/)**: Envoy is used as a reverse proxy for
user-facing web interfaces such as the frontend, load generator, and feature
flag service.

_\*Only exemplars attached to histograms are currently exported to Prometheus.
See [issue in the collector](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/18201)
for details._
45 changes: 45 additions & 0 deletions content/en/docs/demo/demo_screenshots.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
---
title: Demo Screenshots
---

- [Demo Screenshots](.)
- [Webstore](#webstore)
- [Jaeger](#jaeger)
- [Prometheus](#prometheus)
- [Grafana](#grafana)
- [Feature Flag UI](#feature-flag-ui)
- [Load Generator UI](#load-generator-ui)

## Webstore

| Home Page | Checkout Screen |
| ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| ![frontend-1](https://user-images.githubusercontent.com/15364991/194416314-d8210de5-814a-45b8-a47c-9d6bace51fa5.png) | ![frontend-2](https://user-images.githubusercontent.com/15364991/194416580-7f7ac8fe-85c0-462d-a896-6e0f6c95afac.png) |

## Jaeger

| Jaeger UI | Trace View |
| ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| ![jaeger-ui](https://user-images.githubusercontent.com/15364991/194417029-1e40f276-8785-47fb-b645-c90820c0ff52.png) | ![jaeger-trace-view](https://user-images.githubusercontent.com/15364991/194416769-188acc26-71c9-4611-8150-aa8639f11217.png) |

| System Architecture|
| --- |
|![jaeger-system-architecture](https://user-images.githubusercontent.com/47896520/196496223-6d6ea729-5bea-4a8c-a2c6-cd51cce386ae.png)|

## Prometheus

![prometheus](https://user-images.githubusercontent.com/47896520/196564627-ba9f5e91-a0fa-4bf0-beb1-f3a79ca309b5.png)

## Grafana

| Prometheus Data Source |Jaeger Data Source |
| --- | --- |
| ![grafana-prometheus](https://user-images.githubusercontent.com/47896520/196495466-86d3ce33-def4-4808-a6d9-3e32934bbf03.png) | ![gragana-jaeger](https://user-images.githubusercontent.com/47896520/196495509-c233d0d9-5e4c-4607-b609-dbf7869298d9.png) |

## Feature Flag UI

![feature-flag-ui](https://user-images.githubusercontent.com/47896520/196496050-22fbbb56-9e62-46dd-a23c-c34c5566f7d2.png)

## Load Generator UI

![load-generator-ui](https://user-images.githubusercontent.com/47896520/196496589-bda802fc-aada-4e72-a184-93bb4711abca.png)
Loading