Skip to content

Commit

Permalink
Add demo doc pages, drop tmp git submodule (#2270)
Browse files Browse the repository at this point in the history
  • Loading branch information
chalin authored Feb 6, 2023
1 parent 74c457b commit 7543257
Show file tree
Hide file tree
Showing 43 changed files with 3,057 additions and 31 deletions.
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

0 comments on commit 7543257

Please sign in to comment.