diff --git a/README.md b/README.md
index e3b338c414..55fe529688 100644
--- a/README.md
+++ b/README.md
@@ -6,6 +6,7 @@
[![Commits](https://img.shields.io/github/commits-since/open-telemetry/opentelemetry-demo/latest?color=ff69b4&include_prereleases)](https://github.com/open-telemetry/opentelemetry-demo/graphs/commit-activity)
[![Downloads](https://img.shields.io/docker/pulls/otel/demo)](https://hub.docker.com/r/otel/demo)
[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg?color=red)](https://github.com/open-telemetry/opentelemetry-demo/blob/main/LICENSE)
+[![Integration Tests](https://github.com/open-telemetry/opentelemetry-demo/actions/workflows/run-integration-tests.yml/badge.svg)](https://github.com/open-telemetry/opentelemetry-demo/actions/workflows/run-integration-tests.yml)
## Welcome to the OpenTelemetry Astronomy Shop Demo
@@ -33,6 +34,10 @@ guidance](./CONTRIBUTING.md).
If you'd like to extend this demo or maintain a fork of it, read our
[fork guidance](https://opentelemetry.io/docs/demo/forking/).
+## Splunk customizations
+
+A number of customizations have been made to use the demo application with Splunk Observability Cloud, which can be found in the [/splunk](./splunk) folder. See [this document](./splunk/README.md) for details.
+
## Quick start
You can be up and running with the demo in a few minutes. Check out the docs for
diff --git a/splunk/README.md b/splunk/README.md
new file mode 100644
index 0000000000..ba23ce0b7f
--- /dev/null
+++ b/splunk/README.md
@@ -0,0 +1,23 @@
+
+
+## Welcome to the OpenTelemetry Astronomy Shop Demo
+
+This repository contains a fork of the OpenTelemetry Astronomy Shop, a microservice-based
+distributed system intended to illustrate the implementation of OpenTelemetry in
+a near real-world environment. It includes customizations for use with Splunk Observability Cloud.
+
+## Update Docker and Kubernetes Scripts
+
+After synchronizing changes with the upstream repository, the following command can be used to update the Splunk versions of the docker-compose.yml and kubernetes/opentelemetry-demo.yaml files, which are optimized for use with Splunk Observability Cloud:
+
+```bash
+./update-demos.sh
+```
+
+## Quick start
+
+You can be up and running with the demo in a few minutes. Check out the docs for
+your preferred deployment method:
+
+- [Docker](https://lantern.splunk.com/Data_Descriptors/Docker/Setting_up_the_OpenTelemetry_Demo_in_Docker)
+- [Kubernetes](https://lantern.splunk.com/Data_Descriptors/Kubernetes/Setting_up_the_OpenTelemetry_Demo_in_Kubernetes)
diff --git a/splunk/docker-compose.yml b/splunk/docker-compose.yml
new file mode 100644
index 0000000000..d540cba8a5
--- /dev/null
+++ b/splunk/docker-compose.yml
@@ -0,0 +1,864 @@
+# Copyright The OpenTelemetry Authors
+# SPDX-License-Identifier: Apache-2.0
+
+version: '3.9'
+x-default-logging: &logging
+ driver: "json-file"
+ options:
+ max-size: "5m"
+ max-file: "2"
+networks:
+ default:
+ name: opentelemetry-demo
+ driver: bridge
+services:
+ # ******************
+ # Core Demo Services
+ # ******************
+ # Accounting service
+ accountingservice:
+ image: ${IMAGE_NAME}:${IMAGE_VERSION}-accountingservice
+ container_name: accounting-service
+ build:
+ context: ./
+ dockerfile: ./src/accountingservice/Dockerfile
+ cache_from:
+ - ${IMAGE_NAME}:${IMAGE_VERSION}-accountingservice
+ deploy:
+ resources:
+ limits:
+ memory: 20M
+ restart: unless-stopped
+ environment:
+ - KAFKA_SERVICE_ADDR
+ - OTEL_EXPORTER_OTLP_ENDPOINT
+ - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
+ - OTEL_RESOURCE_ATTRIBUTES
+ - OTEL_SERVICE_NAME=accountingservice
+ depends_on:
+ otelcol:
+ condition: service_started
+ kafka:
+ condition: service_healthy
+ logging: *logging
+ # AdService
+ adservice:
+ image: ${IMAGE_NAME}:${IMAGE_VERSION}-adservice
+ container_name: ad-service
+ build:
+ context: ./
+ dockerfile: ./src/adservice/Dockerfile
+ cache_from:
+ - ${IMAGE_NAME}:${IMAGE_VERSION}-adservice
+ deploy:
+ resources:
+ limits:
+ memory: 300M
+ restart: unless-stopped
+ ports:
+ - "${AD_SERVICE_PORT}"
+ environment:
+ - AD_SERVICE_PORT
+ - FEATURE_FLAG_GRPC_SERVICE_ADDR
+ - OTEL_EXPORTER_OTLP_ENDPOINT
+ - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
+ - OTEL_RESOURCE_ATTRIBUTES
+ - OTEL_LOGS_EXPORTER=otlp
+ - OTEL_SERVICE_NAME=adservice
+ depends_on:
+ otelcol:
+ condition: service_started
+ logging: *logging
+ # Cart service
+ cartservice:
+ image: ${IMAGE_NAME}:${IMAGE_VERSION}-cartservice
+ container_name: cart-service
+ build:
+ context: ./
+ dockerfile: ./src/cartservice/src/Dockerfile
+ cache_from:
+ - ${IMAGE_NAME}:${IMAGE_VERSION}-cartservice
+ deploy:
+ resources:
+ limits:
+ memory: 160M
+ restart: unless-stopped
+ ports:
+ - "${CART_SERVICE_PORT}"
+ environment:
+ - CART_SERVICE_PORT
+ - REDIS_ADDR
+ - OTEL_EXPORTER_OTLP_ENDPOINT
+ - OTEL_RESOURCE_ATTRIBUTES
+ - OTEL_SERVICE_NAME=cartservice
+ - ASPNETCORE_URLS=http://*:${CART_SERVICE_PORT}
+ depends_on:
+ redis-cart:
+ condition: service_started
+ otelcol:
+ condition: service_started
+ logging: *logging
+ # Checkout service
+ checkoutservice:
+ image: ${IMAGE_NAME}:${IMAGE_VERSION}-checkoutservice
+ container_name: checkout-service
+ build:
+ context: ./
+ dockerfile: ./src/checkoutservice/Dockerfile
+ cache_from:
+ - ${IMAGE_NAME}:${IMAGE_VERSION}-checkoutservice
+ deploy:
+ resources:
+ limits:
+ memory: 20M
+ restart: unless-stopped
+ ports:
+ - "${CHECKOUT_SERVICE_PORT}"
+ environment:
+ - CHECKOUT_SERVICE_PORT
+ - CART_SERVICE_ADDR
+ - CURRENCY_SERVICE_ADDR
+ - EMAIL_SERVICE_ADDR
+ - PAYMENT_SERVICE_ADDR
+ - PRODUCT_CATALOG_SERVICE_ADDR
+ - SHIPPING_SERVICE_ADDR
+ - KAFKA_SERVICE_ADDR
+ - OTEL_EXPORTER_OTLP_ENDPOINT
+ - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
+ - OTEL_RESOURCE_ATTRIBUTES
+ - OTEL_SERVICE_NAME=checkoutservice
+ depends_on:
+ cartservice:
+ condition: service_started
+ currencyservice:
+ condition: service_started
+ emailservice:
+ condition: service_started
+ paymentservice:
+ condition: service_started
+ productcatalogservice:
+ condition: service_started
+ shippingservice:
+ condition: service_started
+ otelcol:
+ condition: service_started
+ kafka:
+ condition: service_healthy
+ logging: *logging
+ # Currency service
+ currencyservice:
+ image: ${IMAGE_NAME}:${IMAGE_VERSION}-currencyservice
+ container_name: currency-service
+ build:
+ context: ./src/currencyservice
+ cache_from:
+ - ${IMAGE_NAME}:${IMAGE_VERSION}-currencyservice
+ args:
+ - GRPC_VERSION=1.46.0
+ - OPENTELEMETRY_VERSION=1.5.0
+ deploy:
+ resources:
+ limits:
+ memory: 20M
+ restart: unless-stopped
+ ports:
+ - "${CURRENCY_SERVICE_PORT}"
+ environment:
+ - CURRENCY_SERVICE_PORT
+ - OTEL_EXPORTER_OTLP_ENDPOINT
+ - OTEL_RESOURCE_ATTRIBUTES=${OTEL_RESOURCE_ATTRIBUTES},service.name=currencyservice # The C++ SDK does not support OTEL_SERVICE_NAME
+ depends_on:
+ otelcol:
+ condition: service_started
+ logging: *logging
+ # Email service
+ emailservice:
+ image: ${IMAGE_NAME}:${IMAGE_VERSION}-emailservice
+ container_name: email-service
+ build:
+ context: ./src/emailservice
+ cache_from:
+ - ${IMAGE_NAME}:${IMAGE_VERSION}-emailservice
+ deploy:
+ resources:
+ limits:
+ memory: 100M
+ restart: unless-stopped
+ ports:
+ - "${EMAIL_SERVICE_PORT}"
+ environment:
+ - APP_ENV=production
+ - EMAIL_SERVICE_PORT
+ - OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://${OTEL_COLLECTOR_HOST}:4318/v1/traces
+ - OTEL_RESOURCE_ATTRIBUTES
+ - OTEL_SERVICE_NAME=emailservice
+ depends_on:
+ otelcol:
+ condition: service_started
+ logging: *logging
+ # Feature Flag service
+ featureflagservice:
+ image: ${IMAGE_NAME}:${IMAGE_VERSION}-featureflagservice
+ container_name: feature-flag-service
+ build:
+ context: ./
+ dockerfile: ./src/featureflagservice/Dockerfile
+ cache_from:
+ - ${IMAGE_NAME}:${IMAGE_VERSION}-featureflagservice
+ deploy:
+ resources:
+ limits:
+ memory: 175M
+ restart: unless-stopped
+ ports:
+ - "${FEATURE_FLAG_SERVICE_PORT}" # Feature Flag Service UI
+ - "${FEATURE_FLAG_GRPC_SERVICE_PORT}" # Feature Flag Service gRPC API
+ environment:
+ - FEATURE_FLAG_SERVICE_PORT
+ - FEATURE_FLAG_GRPC_SERVICE_PORT
+ - OTEL_EXPORTER_OTLP_ENDPOINT
+ - OTEL_EXPORTER_OTLP_TRACES_PROTOCOL=grpc
+ - OTEL_SERVICE_NAME=featureflagservice
+ - DATABASE_URL=ecto://ffs:ffs@ffs_postgres:5432/ffs
+ healthcheck:
+ test: ["CMD", "curl", "-H", "baggage: synthetic_request=true", "-f", "http://localhost:${FEATURE_FLAG_SERVICE_PORT}"]
+ depends_on:
+ ffs_postgres:
+ condition: service_healthy
+ logging: *logging
+ # Fraud Detection service
+ frauddetectionservice:
+ image: ${IMAGE_NAME}:${IMAGE_VERSION}-frauddetectionservice
+ container_name: frauddetection-service
+ build:
+ context: ./
+ dockerfile: ./src/frauddetectionservice/Dockerfile
+ cache_from:
+ - ${IMAGE_NAME}:${IMAGE_VERSION}-frauddetectionservice
+ deploy:
+ resources:
+ limits:
+ memory: 200M
+ restart: unless-stopped
+ environment:
+ - KAFKA_SERVICE_ADDR
+ - OTEL_EXPORTER_OTLP_ENDPOINT
+ - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
+ - OTEL_RESOURCE_ATTRIBUTES
+ - OTEL_SERVICE_NAME=frauddetectionservice
+ depends_on:
+ otelcol:
+ condition: service_started
+ kafka:
+ condition: service_healthy
+ logging: *logging
+ # Frontend
+ frontend:
+ image: ${IMAGE_NAME}:${IMAGE_VERSION}-frontend
+ container_name: frontend
+ build:
+ context: ./
+ dockerfile: ./src/frontend/Dockerfile
+ cache_from:
+ - ${IMAGE_NAME}:${IMAGE_VERSION}-frontend
+ deploy:
+ resources:
+ limits:
+ memory: 200M
+ restart: unless-stopped
+ ports:
+ - "${FRONTEND_PORT}"
+ environment:
+ - PORT=${FRONTEND_PORT}
+ - FRONTEND_ADDR
+ - AD_SERVICE_ADDR
+ - CART_SERVICE_ADDR
+ - CHECKOUT_SERVICE_ADDR
+ - CURRENCY_SERVICE_ADDR
+ - PRODUCT_CATALOG_SERVICE_ADDR
+ - RECOMMENDATION_SERVICE_ADDR
+ - SHIPPING_SERVICE_ADDR
+ - OTEL_EXPORTER_OTLP_ENDPOINT
+ - OTEL_RESOURCE_ATTRIBUTES=${OTEL_RESOURCE_ATTRIBUTES}
+ - ENV_PLATFORM
+ - OTEL_SERVICE_NAME=frontend
+ - PUBLIC_OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
+ - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
+ - WEB_OTEL_SERVICE_NAME=frontend-web
+ depends_on:
+ adservice:
+ condition: service_started
+ cartservice:
+ condition: service_started
+ checkoutservice:
+ condition: service_started
+ currencyservice:
+ condition: service_started
+ productcatalogservice:
+ condition: service_started
+ quoteservice:
+ condition: service_started
+ recommendationservice:
+ condition: service_started
+ shippingservice:
+ condition: service_started
+ otelcol:
+ condition: service_started
+ logging: *logging
+ # Frontend Proxy (Envoy)
+ frontendproxy:
+ image: ${IMAGE_NAME}:${IMAGE_VERSION}-frontendproxy
+ container_name: frontend-proxy
+ build:
+ context: ./
+ dockerfile: src/frontendproxy/Dockerfile
+ deploy:
+ resources:
+ limits:
+ memory: 50M
+ ports:
+ - "${ENVOY_PORT}:${ENVOY_PORT}"
+ - 10000:10000
+ environment:
+ - FRONTEND_PORT
+ - FRONTEND_HOST
+ - FEATURE_FLAG_SERVICE_PORT
+ - FEATURE_FLAG_SERVICE_HOST
+ - LOCUST_WEB_HOST
+ - LOCUST_WEB_PORT
+ - GRAFANA_SERVICE_PORT
+ - GRAFANA_SERVICE_HOST
+ - JAEGER_SERVICE_PORT
+ - JAEGER_SERVICE_HOST
+ - OTEL_COLLECTOR_HOST
+ - OTEL_COLLECTOR_PORT_GRPC
+ - OTEL_COLLECTOR_PORT_HTTP
+ - ENVOY_PORT
+ depends_on:
+ frontend:
+ condition: service_started
+ featureflagservice:
+ condition: service_started
+ loadgenerator:
+ condition: service_started
+ jaeger:
+ condition: service_started
+ grafana:
+ condition: service_started
+ # Load Generator
+ loadgenerator:
+ image: ${IMAGE_NAME}:${IMAGE_VERSION}-loadgenerator
+ container_name: load-generator
+ build:
+ context: ./
+ dockerfile: ./src/loadgenerator/Dockerfile
+ cache_from:
+ - ${IMAGE_NAME}:${IMAGE_VERSION}-loadgenerator
+ deploy:
+ resources:
+ limits:
+ memory: 120M
+ restart: unless-stopped
+ ports:
+ - "${LOCUST_WEB_PORT}"
+ environment:
+ - LOCUST_WEB_PORT
+ - LOCUST_USERS
+ - LOCUST_HOST
+ - LOCUST_HEADLESS
+ - LOCUST_AUTOSTART
+ - OTEL_EXPORTER_OTLP_ENDPOINT
+ - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
+ - OTEL_RESOURCE_ATTRIBUTES
+ - OTEL_SERVICE_NAME=loadgenerator
+ - PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python
+ depends_on:
+ frontend:
+ condition: service_started
+ logging: *logging
+ # Payment service
+ paymentservice:
+ image: ${IMAGE_NAME}:${IMAGE_VERSION}-paymentservice
+ container_name: payment-service
+ build:
+ context: ./
+ dockerfile: ./src/paymentservice/Dockerfile
+ cache_from:
+ - ${IMAGE_NAME}:${IMAGE_VERSION}-paymentservice
+ deploy:
+ resources:
+ limits:
+ memory: 120M
+ restart: unless-stopped
+ ports:
+ - "${PAYMENT_SERVICE_PORT}"
+ environment:
+ - PAYMENT_SERVICE_PORT
+ - OTEL_EXPORTER_OTLP_ENDPOINT
+ - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
+ - OTEL_RESOURCE_ATTRIBUTES
+ - OTEL_SERVICE_NAME=paymentservice
+ depends_on:
+ otelcol:
+ condition: service_started
+ logging: *logging
+ # Product Catalog service
+ productcatalogservice:
+ image: ${IMAGE_NAME}:${IMAGE_VERSION}-productcatalogservice
+ container_name: product-catalog-service
+ build:
+ context: ./
+ dockerfile: ./src/productcatalogservice/Dockerfile
+ cache_from:
+ - ${IMAGE_NAME}:${IMAGE_VERSION}-productcatalogservice
+ deploy:
+ resources:
+ limits:
+ memory: 20M
+ restart: unless-stopped
+ ports:
+ - "${PRODUCT_CATALOG_SERVICE_PORT}"
+ environment:
+ - PRODUCT_CATALOG_SERVICE_PORT
+ - FEATURE_FLAG_GRPC_SERVICE_ADDR
+ - OTEL_EXPORTER_OTLP_ENDPOINT
+ - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
+ - OTEL_RESOURCE_ATTRIBUTES
+ - OTEL_SERVICE_NAME=productcatalogservice
+ depends_on:
+ otelcol:
+ condition: service_started
+ logging: *logging
+ # Quote service
+ quoteservice:
+ image: ${IMAGE_NAME}:${IMAGE_VERSION}-quoteservice
+ container_name: quote-service
+ build:
+ context: ./
+ dockerfile: ./src/quoteservice/Dockerfile
+ cache_from:
+ - ${IMAGE_NAME}:${IMAGE_VERSION}-quoteservice
+ deploy:
+ resources:
+ limits:
+ memory: 40M
+ restart: unless-stopped
+ ports:
+ - "${QUOTE_SERVICE_PORT}"
+ environment:
+ - OTEL_EXPORTER_OTLP_ENDPOINT=http://${OTEL_COLLECTOR_HOST}:4318
+ - OTEL_PHP_AUTOLOAD_ENABLED=true
+ - QUOTE_SERVICE_PORT
+ - OTEL_RESOURCE_ATTRIBUTES
+ - OTEL_SERVICE_NAME=quoteservice
+ - OTEL_PHP_INTERNAL_METRICS_ENABLED=true
+ depends_on:
+ otelcol:
+ condition: service_started
+ logging: *logging
+ # Recommendation service
+ recommendationservice:
+ image: ${IMAGE_NAME}:${IMAGE_VERSION}-recommendationservice
+ container_name: recommendation-service
+ build:
+ context: ./
+ dockerfile: ./src/recommendationservice/Dockerfile
+ cache_from:
+ - ${IMAGE_NAME}:${IMAGE_VERSION}-recommendationservice
+ deploy:
+ resources:
+ limits:
+ memory: 500M # This is high to enable supporting the recommendationCache feature flag use case
+ restart: unless-stopped
+ ports:
+ - "${RECOMMENDATION_SERVICE_PORT}"
+ environment:
+ - RECOMMENDATION_SERVICE_PORT
+ - PRODUCT_CATALOG_SERVICE_ADDR
+ - FEATURE_FLAG_GRPC_SERVICE_ADDR
+ - OTEL_PYTHON_LOG_CORRELATION=true
+ - OTEL_EXPORTER_OTLP_ENDPOINT
+ - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
+ - OTEL_RESOURCE_ATTRIBUTES
+ - OTEL_SERVICE_NAME=recommendationservice
+ - PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python
+ depends_on:
+ featureflagservice:
+ condition: service_started
+ productcatalogservice:
+ condition: service_started
+ otelcol:
+ condition: service_started
+ logging: *logging
+ # Shipping service
+ shippingservice:
+ image: ${IMAGE_NAME}:${IMAGE_VERSION}-shippingservice
+ container_name: shipping-service
+ build:
+ context: ./
+ dockerfile: ./src/shippingservice/Dockerfile
+ cache_from:
+ - ${IMAGE_NAME}:${IMAGE_VERSION}-shippingservice
+ deploy:
+ resources:
+ limits:
+ memory: 20M
+ restart: unless-stopped
+ ports:
+ - "${SHIPPING_SERVICE_PORT}"
+ environment:
+ - SHIPPING_SERVICE_PORT
+ - QUOTE_SERVICE_ADDR
+ - OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://${OTEL_COLLECTOR_HOST}:4317/v1/traces
+ - OTEL_RESOURCE_ATTRIBUTES
+ - OTEL_SERVICE_NAME=shippingservice
+ depends_on:
+ otelcol:
+ condition: service_started
+ logging: *logging
+ # ******************
+ # Dependent Services
+ # ******************
+ # Postgres used by Feature Flag service
+ ffs_postgres:
+ image: postgres:16.1
+ container_name: postgres
+ user: postgres
+ deploy:
+ resources:
+ limits:
+ memory: 120M
+ restart: unless-stopped
+ environment:
+ - POSTGRES_USER=ffs
+ - POSTGRES_DB=ffs
+ - POSTGRES_PASSWORD=ffs
+ healthcheck:
+ test: ["CMD-SHELL", "pg_isready -d ffs -U ffs"]
+ interval: 10s
+ timeout: 5s
+ retries: 5
+ logging: *logging
+ # Kafka used by Checkout, Accounting, and Fraud Detection services
+ kafka:
+ image: ${IMAGE_NAME}:${IMAGE_VERSION}-kafka
+ container_name: kafka
+ build:
+ context: ./
+ dockerfile: ./src/kafka/Dockerfile
+ cache_from:
+ - ${IMAGE_NAME}:${IMAGE_VERSION}-kafka
+ deploy:
+ resources:
+ limits:
+ memory: 500M
+ restart: unless-stopped
+ environment:
+ - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092
+ - OTEL_EXPORTER_OTLP_ENDPOINT
+ - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
+ - OTEL_RESOURCE_ATTRIBUTES
+ - OTEL_SERVICE_NAME=kafka
+ - KAFKA_HEAP_OPTS=-Xmx200m -Xms200m
+ healthcheck:
+ test: nc -z kafka 9092
+ start_period: 10s
+ interval: 5s
+ timeout: 10s
+ retries: 10
+ logging: *logging
+ # Redis used by Cart service
+ redis-cart:
+ image: redis:7.2-alpine
+ container_name: redis-cart
+ user: redis
+ deploy:
+ resources:
+ limits:
+ memory: 20M
+ restart: unless-stopped
+ ports:
+ - "${REDIS_PORT}"
+ logging: *logging
+ # ********************
+ # Telemetry Components
+ # ********************
+ # Jaeger
+ jaeger:
+ image: jaegertracing/all-in-one:1.52
+ container_name: jaeger
+ command:
+ - "--memory.max-traces=8000"
+ - "--query.base-path=/jaeger/ui"
+ - "--prometheus.server-url=http://${PROMETHEUS_ADDR}"
+ - "--prometheus.query.normalize-calls=true"
+ - "--prometheus.query.normalize-duration=true"
+ deploy:
+ resources:
+ limits:
+ memory: 300M
+ restart: unless-stopped
+ ports:
+ - "${JAEGER_SERVICE_PORT}" # Jaeger UI
+ - "4317" # OTLP gRPC default port
+ environment:
+ - METRICS_STORAGE_TYPE=prometheus
+ logging: *logging
+ # Grafana
+ grafana:
+ image: grafana/grafana:10.2.2
+ container_name: grafana
+ deploy:
+ resources:
+ limits:
+ memory: 100M
+ environment:
+ - "GF_INSTALL_PLUGINS=grafana-opensearch-datasource"
+ volumes:
+ - ./src/grafana/grafana.ini:/etc/grafana/grafana.ini
+ - ./src/grafana/provisioning/:/etc/grafana/provisioning/
+ ports:
+ - "${GRAFANA_SERVICE_PORT}"
+ logging: *logging
+ # OpenTelemetry Collector
+ otelcol:
+ image: quay.io/signalfx/splunk-otel-collector:latest
+ container_name: otel-col
+ deploy:
+ resources:
+ limits:
+ memory: 125M
+ restart: unless-stopped
+ command: ["--config=/etc/otelcol-config.yml"]
+ volumes:
+ - ./splunk/otelcol-config.yml:/etc/otelcol-config.yml
+ - ./logs:/logs
+ - ./checkpoint:/checkpoint
+ ports:
+ - "4317" # OTLP over gRPC receiver
+ - "4318" # OTLP over HTTP receiver
+ - "9464"
+ - "8888"
+ - "13133"
+ - "14250"
+ - "14268"
+ - "6060"
+ - "9080"
+ - "9411"
+ - "9943"
+ depends_on:
+ - jaeger
+ logging: *logging
+ environment:
+ - ENVOY_PORT
+ - SPLUNK_ACCESS_TOKEN=${SPLUNK_ACCESS_TOKEN}
+ - SPLUNK_REALM=${SPLUNK_REALM}
+ - SPLUNK_HEC_TOKEN=${SPLUNK_HEC_TOKEN}
+ - SPLUNK_HEC_URL=${SPLUNK_HEC_URL}
+ - SPLUNK_MEMORY_TOTAL_MIB=${SPLUNK_MEMORY_TOTAL_MIB}
+ # Prometheus
+ prometheus:
+ image: quay.io/prometheus/prometheus:v2.48.1
+ container_name: prometheus
+ command:
+ - --web.console.templates=/etc/prometheus/consoles
+ - --web.console.libraries=/etc/prometheus/console_libraries
+ - --storage.tsdb.retention.time=1h
+ - --config.file=/etc/prometheus/prometheus-config.yaml
+ - --storage.tsdb.path=/prometheus
+ - --web.enable-lifecycle
+ - --web.route-prefix=/
+ - --enable-feature=exemplar-storage
+ - --enable-feature=otlp-write-receiver
+ volumes:
+ - ./src/prometheus/prometheus-config.yaml:/etc/prometheus/prometheus-config.yaml
+ deploy:
+ resources:
+ limits:
+ memory: 300M
+ ports:
+ - "${PROMETHEUS_SERVICE_PORT}:${PROMETHEUS_SERVICE_PORT}"
+ logging: *logging
+ opensearch:
+ image: opensearchproject/opensearch:latest
+ container_name: opensearch
+ environment:
+ - cluster.name=demo-cluster
+ - node.name=demo-node
+ - bootstrap.memory_lock=true
+ - discovery.type=single-node
+ - "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m"
+ - "DISABLE_INSTALL_DEMO_CONFIG=true"
+ - "DISABLE_SECURITY_PLUGIN=true"
+ ulimits:
+ memlock:
+ soft: -1
+ hard: -1
+ nofile:
+ soft: 65536
+ hard: 65536
+ ports:
+ - "9200:9200"
+ logging: *logging
+ dataprepper:
+ image: opensearchproject/data-prepper:latest
+ volumes:
+ - ./src/opensearch/pipelines.yaml:/usr/share/data-prepper/pipelines/pipelines.yaml
+ - ./src/opensearch/data-prepper-config.yaml:/usr/share/data-prepper/config/data-prepper-config.yaml
+ ports:
+ - "21892"
+ logging: *logging
+ # *****
+ # Tests
+ # *****
+ # Frontend Tests
+ frontendTests:
+ image: ${IMAGE_NAME}:${IMAGE_VERSION}-frontend-tests
+ container_name: frontend-tests
+ build:
+ context: ./
+ dockerfile: ./src/frontend/Dockerfile.cypress
+ profiles:
+ - tests
+ volumes:
+ - ./src/frontend/cypress/videos:/app/cypress/videos
+ - ./src/frontend/cypress/screenshots:/app/cypress/screenshots
+ environment:
+ - CYPRESS_baseUrl=http://${FRONTEND_ADDR}
+ - FRONTEND_ADDR
+ - NODE_ENV=production
+ depends_on:
+ - frontend
+ # Integration Tests
+ integrationTests:
+ image: ${IMAGE_NAME}:${IMAGE_VERSION}-integrationTests
+ container_name: integrationTests
+ profiles:
+ - tests
+ build:
+ context: ./
+ dockerfile: ./test/Dockerfile
+ environment:
+ - AD_SERVICE_ADDR
+ - CART_SERVICE_ADDR
+ - CHECKOUT_SERVICE_ADDR
+ - CURRENCY_SERVICE_ADDR
+ - EMAIL_SERVICE_ADDR
+ - PAYMENT_SERVICE_ADDR
+ - PRODUCT_CATALOG_SERVICE_ADDR
+ - RECOMMENDATION_SERVICE_ADDR
+ - SHIPPING_SERVICE_ADDR
+ depends_on:
+ - adservice
+ - cartservice
+ - checkoutservice
+ - currencyservice
+ - emailservice
+ - paymentservice
+ - productcatalogservice
+ - recommendationservice
+ - shippingservice
+ - quoteservice
+ # Tracebased Tests
+ traceBasedTests:
+ image: ${IMAGE_NAME}:${IMAGE_VERSION}-traceBasedTests
+ container_name: traceBasedTests
+ profiles:
+ - tests
+ build:
+ context: ./
+ dockerfile: ./test/tracetesting/Dockerfile
+ args:
+ - TRACETEST_IMAGE_VERSION
+ environment:
+ - AD_SERVICE_ADDR
+ - CART_SERVICE_ADDR
+ - CHECKOUT_SERVICE_ADDR
+ - CURRENCY_SERVICE_ADDR
+ - EMAIL_SERVICE_ADDR
+ - FRONTEND_ADDR
+ - PAYMENT_SERVICE_ADDR
+ - PRODUCT_CATALOG_SERVICE_ADDR
+ - RECOMMENDATION_SERVICE_ADDR
+ - SHIPPING_SERVICE_ADDR
+ - KAFKA_SERVICE_ADDR
+ extra_hosts:
+ - "host.docker.internal:host-gateway"
+ volumes:
+ - ./test/tracetesting:/app/test/tracetesting
+ - ./pb:/app/pb
+ depends_on:
+ tracetest-server:
+ condition: service_healthy
+ # adding demo services as dependencies
+ frontend:
+ condition: service_started
+ adservice:
+ condition: service_started
+ cartservice:
+ condition: service_started
+ checkoutservice:
+ condition: service_started
+ currencyservice:
+ condition: service_started
+ emailservice:
+ condition: service_started
+ paymentservice:
+ condition: service_started
+ productcatalogservice:
+ condition: service_started
+ recommendationservice:
+ condition: service_started
+ shippingservice:
+ condition: service_started
+ quoteservice:
+ condition: service_started
+ accountingservice:
+ condition: service_started
+ frauddetectionservice:
+ condition: service_started
+ tracetest-server:
+ image: kubeshop/tracetest:${TRACETEST_IMAGE_VERSION}
+ platform: linux/amd64
+ container_name: tracetest-server
+ profiles:
+ - tests
+ - odd # Observabilty-Driven Development (ODD)
+ volumes:
+ - type: bind
+ source: ./test/tracetesting/tracetest-config.yaml
+ target: /app/tracetest.yaml
+ - type: bind
+ source: ./test/tracetesting/tracetest-provision.yaml
+ target: /app/provision.yaml
+ command: --provisioning-file /app/provision.yaml
+ ports:
+ - 11633:11633
+ extra_hosts:
+ - "host.docker.internal:host-gateway"
+ depends_on:
+ tracetest-postgres:
+ condition: service_healthy
+ otelcol:
+ condition: service_started
+ healthcheck:
+ test: ["CMD", "wget", "--spider", "localhost:11633"]
+ interval: 1s
+ timeout: 3s
+ retries: 60
+ tracetest-postgres:
+ image: postgres:16.0
+ container_name: tracetest-postgres
+ profiles:
+ - tests
+ - odd # Observabilty-Driven Development (ODD)
+ environment:
+ POSTGRES_PASSWORD: postgres
+ POSTGRES_USER: postgres
+ healthcheck:
+ test: pg_isready -U "$$POSTGRES_USER" -d "$$POSTGRES_DB"
+ interval: 1s
+ timeout: 5s
+ retries: 60
+ ports:
+ - 5432
diff --git a/splunk/opentelemetry-demo.yaml b/splunk/opentelemetry-demo.yaml
new file mode 100644
index 0000000000..f49ecaede4
--- /dev/null
+++ b/splunk/opentelemetry-demo.yaml
@@ -0,0 +1,9855 @@
+# Copyright The OpenTelemetry Authors
+# SPDX-License-Identifier: Apache-2.0
+# This file is generated by 'make generate-kubernetes-manifests'
+---
+# Source: opentelemetry-demo/charts/grafana/templates/serviceaccount.yaml
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ labels:
+ app.kubernetes.io/name: grafana
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/version: "10.1.5"
+ name: opentelemetry-demo-grafana
+ namespace: otel-demo
+---
+# Source: opentelemetry-demo/charts/jaeger/templates/allinone-sa.yaml
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: opentelemetry-demo-jaeger
+ labels:
+ app.kubernetes.io/name: jaeger
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/version: "1.51.0"
+ app.kubernetes.io/component: all-in-one
+---
+# Source: opentelemetry-demo/charts/prometheus/templates/serviceaccount.yaml
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ labels:
+ app.kubernetes.io/component: server
+ app.kubernetes.io/name: prometheus
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/version: v2.47.2
+ app.kubernetes.io/part-of: prometheus
+ name: opentelemetry-demo-prometheus-server
+ namespace: otel-demo
+ annotations: {}
+---
+# Source: opentelemetry-demo/templates/serviceaccount.yaml
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: opentelemetry-demo
+ labels:
+ opentelemetry.io/name: opentelemetry-demo
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/name: opentelemetry-demo
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+---
+# Source: opentelemetry-demo/charts/grafana/templates/secret.yaml
+apiVersion: v1
+kind: Secret
+metadata:
+ name: opentelemetry-demo-grafana
+ namespace: otel-demo
+ labels:
+ app.kubernetes.io/name: grafana
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/version: "10.1.5"
+type: Opaque
+data:
+ admin-user: "YWRtaW4="
+ admin-password: "YWRtaW4="
+ ldap-toml: ""
+---
+# Source: opentelemetry-demo/charts/grafana/templates/configmap.yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: opentelemetry-demo-grafana
+ namespace: otel-demo
+ labels:
+ app.kubernetes.io/name: grafana
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/version: "10.1.5"
+data:
+ grafana.ini: |
+ [analytics]
+ check_for_updates = true
+ [auth]
+ disable_login_form = true
+ [auth.anonymous]
+ enabled = true
+ org_name = Main Org.
+ org_role = Admin
+ [grafana_net]
+ url = https://grafana.net
+ [log]
+ mode = console
+ [paths]
+ data = /var/lib/grafana/
+ logs = /var/log/grafana
+ plugins = /var/lib/grafana/plugins
+ provisioning = /etc/grafana/provisioning
+ [server]
+ domain = ''
+ root_url = %(protocol)s://%(domain)s:%(http_port)s/grafana
+ serve_from_sub_path = true
+ datasources.yaml: |
+ apiVersion: 1
+ datasources:
+ - editable: true
+ isDefault: true
+ jsonData:
+ exemplarTraceIdDestinations:
+ - datasourceUid: webstore-traces
+ name: trace_id
+ - name: trace_id
+ url: http://localhost:8080/jaeger/ui/trace/$${__value.raw}
+ urlDisplayLabel: View in Jaeger UI
+ name: Prometheus
+ type: prometheus
+ uid: webstore-metrics
+ url: http://opentelemetry-demo-prometheus-server:9090
+ - editable: true
+ isDefault: false
+ name: Jaeger
+ type: jaeger
+ uid: webstore-traces
+ url: http://opentelemetry-demo-jaeger-query:16686/jaeger/ui
+ dashboardproviders.yaml: |
+ apiVersion: 1
+ providers:
+ - disableDeletion: false
+ editable: true
+ folder: ""
+ name: default
+ options:
+ path: /var/lib/grafana/dashboards/default
+ orgId: 1
+ type: file
+---
+# Source: opentelemetry-demo/charts/prometheus/templates/cm.yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ labels:
+ app.kubernetes.io/component: server
+ app.kubernetes.io/name: prometheus
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/version: v2.47.2
+ app.kubernetes.io/part-of: prometheus
+ name: opentelemetry-demo-prometheus-server
+ namespace: otel-demo
+data:
+ allow-snippet-annotations: "false"
+ alerting_rules.yml: |
+ {}
+ alerts: |
+ {}
+ prometheus.yml: |
+ global:
+ evaluation_interval: 1m
+ scrape_interval: 1m
+ scrape_timeout: 10s
+ rule_files:
+ - /etc/config/recording_rules.yml
+ - /etc/config/alerting_rules.yml
+ - /etc/config/rules
+ - /etc/config/alerts
+ scrape_configs: []
+ recording_rules.yml: |
+ {}
+ rules: |
+ {}
+---
+# Source: opentelemetry-demo/templates/grafana-dashboards.yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: opentelemetry-demo-grafana-dashboards
+ labels:
+ opentelemetry.io/name: opentelemetry-demo
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/name: opentelemetry-demo
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+data:
+ demo-dashboard.json: |-
+ {
+ "annotations": {
+ "list": [
+ {
+ "builtIn": 1,
+ "datasource": {
+ "type": "grafana",
+ "uid": "-- Grafana --"
+ },
+ "enable": true,
+ "hide": true,
+ "iconColor": "rgba(0, 211, 255, 1)",
+ "name": "Annotations & Alerts",
+ "target": {
+ "limit": 100,
+ "matchAny": false,
+ "tags": [],
+ "type": "dashboard"
+ },
+ "type": "dashboard"
+ }
+ ]
+ },
+ "editable": true,
+ "fiscalYearStartMonth": 0,
+ "graphTooltip": 0,
+ "links": [],
+ "liveNow": false,
+ "panels": [
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 0
+ },
+ "id": 14,
+ "panels": [],
+ "title": "Metrics",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "percent"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 12,
+ "x": 0,
+ "y": 1
+ },
+ "id": 6,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "expr": "rate(process_runtime_cpython_cpu_time_seconds_total{type=~\"system\"}[$__rate_interval])*100",
+ "hide": false,
+ "interval": "2m",
+ "legendFormat": "{{job}} ({{type}})",
+ "range": true,
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "expr": "rate(process_runtime_cpython_cpu_time_seconds_total{type=~\"user\"}[$__rate_interval])*100",
+ "hide": false,
+ "interval": "2m",
+ "legendFormat": "{{job}} ({{type}})",
+ "range": true,
+ "refId": "B"
+ }
+ ],
+ "title": "Python services (CPU%)",
+ "transformations": [
+ {
+ "id": "renameByRegex",
+ "options": {
+ "regex": "opentelemetry-demo/(.*)",
+ "renamePattern": "$1"
+ }
+ }
+ ],
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "bytes"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 12,
+ "x": 12,
+ "y": 1
+ },
+ "id": 8,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "expr": "process_runtime_cpython_memory_bytes{type=\"rss\"}",
+ "legendFormat": "{{job}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Python services (Memory)",
+ "transformations": [
+ {
+ "id": "renameByRegex",
+ "options": {
+ "regex": "opentelemetry-demo/(.*)",
+ "renamePattern": "$1"
+ }
+ }
+ ],
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "bars",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 12,
+ "x": 0,
+ "y": 9
+ },
+ "id": 4,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": false
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "expr": "rate(app_recommendations_counter_total{recommendation_type=\"catalog\"}[$__rate_interval])",
+ "interval": "2m",
+ "legendFormat": "recommendations",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Recommendations Rate",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 12,
+ "x": 12,
+ "y": 9
+ },
+ "id": 10,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "expr": " sum by (span_name) (rate(calls_total{status_code=\"STATUS_CODE_ERROR\", service_name=\"${service}\"}[$__rate_interval]))",
+ "interval": "",
+ "legendFormat": "{{ span_name }}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Error Rate for ${service} by span name",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "dtdurationms"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 12,
+ "x": 0,
+ "y": 17
+ },
+ "id": 2,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "histogram_quantile(0.50, sum(rate(duration_milliseconds_bucket{service_name=\"${service}\"}[$__rate_interval])) by (le))",
+ "legendFormat": "quantile50",
+ "range": true,
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "histogram_quantile(0.95, sum(rate(duration_milliseconds_bucket{service_name=\"${service}\"}[$__rate_interval])) by (le))",
+ "hide": false,
+ "legendFormat": "quantile95",
+ "range": true,
+ "refId": "B"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "histogram_quantile(0.99, sum(rate(duration_milliseconds_bucket{service_name=\"${service}\"}[$__rate_interval])) by (le))",
+ "hide": false,
+ "legendFormat": "quantile99",
+ "range": true,
+ "refId": "C"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "histogram_quantile(0.999, sum(rate(duration_milliseconds_bucket{service_name=\"${service}\"}[$__rate_interval])) by (le))",
+ "hide": false,
+ "legendFormat": "quantile999",
+ "range": true,
+ "refId": "D"
+ }
+ ],
+ "title": "Latency for ${service}",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "reqps"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 12,
+ "x": 12,
+ "y": 17
+ },
+ "id": 12,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "expr": "sum by (span_name) (rate(duration_milliseconds_count{service_name=\"${service}\"}[$__rate_interval]))",
+ "legendFormat": "{{ span_name }}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Requests Rate for ${service} by span name",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 12,
+ "x": 0,
+ "y": 25
+ },
+ "id": 16,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "expr": "rate(otel_trace_span_processor_spans{job=\"opentelemetry-demo/quoteservice\"}[2m])*120",
+ "interval": "2m",
+ "legendFormat": "{{state}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Quote Service batch span processor",
+ "type": "timeseries"
+ }
+ ],
+ "refresh": "",
+ "revision": 1,
+ "schemaVersion": 38,
+ "style": "dark",
+ "tags": [],
+ "templating": {
+ "list": [
+ {
+ "allValue": "",
+ "current": {
+ "selected": false,
+ "text": "frontend",
+ "value": "frontend"
+ },
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "definition": "duration_milliseconds_bucket",
+ "hide": 0,
+ "includeAll": false,
+ "multi": false,
+ "name": "service",
+ "options": [],
+ "query": {
+ "query": "duration_milliseconds_bucket",
+ "refId": "PrometheusVariableQueryEditor-VariableQuery"
+ },
+ "refresh": 1,
+ "regex": "/.*service_name=\\\"([^\\\"]+)\\\".*/",
+ "skipUrlSync": false,
+ "sort": 1,
+ "type": "query"
+ }
+ ]
+ },
+ "time": {
+ "from": "now-3h",
+ "to": "now"
+ },
+ "timepicker": {},
+ "timezone": "",
+ "title": "Demo Dashboard",
+ "uid": "W2gX2zHVk",
+ "version": 1,
+ "weekStart": ""
+ }
+ opentelemetry-collector-data-flow.json: |
+ {
+ "annotations": {
+ "list": [
+ {
+ "builtIn": 1,
+ "datasource": {
+ "type": "grafana",
+ "uid": "-- Grafana --"
+ },
+ "enable": true,
+ "hide": true,
+ "iconColor": "rgba(0, 211, 255, 1)",
+ "name": "Annotations & Alerts",
+ "target": {
+ "limit": 100,
+ "matchAny": false,
+ "tags": [],
+ "type": "dashboard"
+ },
+ "type": "dashboard"
+ }
+ ]
+ },
+ "description": "otelcol metrics dashboard",
+ "editable": true,
+ "fiscalYearStartMonth": 0,
+ "graphTooltip": 0,
+ "id": 6,
+ "links": [],
+ "liveNow": false,
+ "panels": [
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 0
+ },
+ "id": 8,
+ "panels": [],
+ "title": "Process",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "description": "Otel Collector Instance",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-BlYlRd"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 0,
+ "y": 1
+ },
+ "id": 6,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "center",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "textMode": "auto"
+ },
+ "pluginVersion": "9.1.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "expr": "count(count(otelcol_process_cpu_seconds{service_instance_id=~\".*\"}) by (service_instance_id))",
+ "legendFormat": "__auto",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Instance",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "description": "otelcol_process_cpu_seconds",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-BlYlRd"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "s"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 3,
+ "y": 1
+ },
+ "id": 24,
+ "options": {
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": true
+ },
+ "pluginVersion": "9.1.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "expr": "avg(rate(otelcol_process_cpu_seconds{}[$__rate_interval])*100) by (instance)",
+ "legendFormat": "__auto",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Cpu",
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "description": "Memory Rss\navg(otelcol_process_memory_rss{}) by (instance)",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-BlYlRd"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "bytes"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 6,
+ "y": 1
+ },
+ "id": 38,
+ "options": {
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": true
+ },
+ "pluginVersion": "9.1.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "expr": "avg(otelcol_process_memory_rss{}) by (instance)",
+ "legendFormat": "__auto",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Memory",
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "description": "",
+ "gridPos": {
+ "h": 4,
+ "w": 15,
+ "x": 9,
+ "y": 1
+ },
+ "id": 32,
+ "options": {
+ "code": {
+ "language": "plaintext",
+ "showLineNumbers": false,
+ "showMiniMap": false
+ },
+ "content": "## Opentelemetry Collector Data Ingress/Egress\n\n`service_version:` ${service_version}\n\n`opentelemetry collector:` contrib\n\n",
+ "mode": "markdown"
+ },
+ "pluginVersion": "9.1.0",
+ "type": "text"
+ },
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 5
+ },
+ "id": 10,
+ "panels": [],
+ "title": "Trace Pipeline",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "description": "(avg(sum by(job) (rate(otelcol_exporter_sent_spans{}[$__range]))) / avg(sum by(job) (rate(otelcol_receiver_accepted_spans{}[$__range])))) ",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "light-blue",
+ "value": null
+ },
+ {
+ "color": "semi-dark-red",
+ "value": 0
+ },
+ {
+ "color": "super-light-orange",
+ "value": 0.4
+ },
+ {
+ "color": "dark-blue",
+ "value": 0.9
+ },
+ {
+ "color": "super-light-orange",
+ "value": 1.2
+ },
+ {
+ "color": "dark-red",
+ "value": 2.1
+ }
+ ]
+ },
+ "unit": "percentunit"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 19,
+ "w": 3,
+ "x": 0,
+ "y": 6
+ },
+ "id": 55,
+ "options": {
+ "orientation": "vertical",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": false
+ },
+ "pluginVersion": "9.1.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "avg(sum by(job) (rate(otelcol_exporter_sent_spans{}[$__range])))",
+ "format": "time_series",
+ "hide": true,
+ "instant": false,
+ "legendFormat": "__auto",
+ "range": true,
+ "refId": "export"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "expr": "avg(sum by(job) (rate(otelcol_receiver_accepted_spans{}[$__range])))",
+ "format": "time_series",
+ "hide": true,
+ "legendFormat": "__auto",
+ "range": true,
+ "refId": "acc"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "expr": "(avg(sum by(job) (rate(otelcol_exporter_sent_spans{}[$__range]))) / avg(sum by(job) (rate(otelcol_receiver_accepted_spans{}[$__range])))) ",
+ "hide": false,
+ "legendFormat": "__auto",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Export Ratio",
+ "transformations": [],
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "gridPos": {
+ "h": 11,
+ "w": 21,
+ "x": 3,
+ "y": 6
+ },
+ "id": 4,
+ "options": {
+ "nodes": {
+ "mainStatUnit": "flops"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "label_join(label_join(\n(rate(otelcol_receiver_accepted_spans{}[$__interval]))\n, \"id\", \"\", \"transport\", \"receiver\")\n, \"title\", \"\", \"transport\", \"receiver\")\n\nor\n\nlabel_replace(label_replace(\nsum by(service_name) (rate(otelcol_receiver_accepted_spans{}[$__interval]))\n, \"id\", \"processor\", \"dummynode\", \"\")\n, \"title\", \"processor\", \"dummynode\", \"\")\n\nor\nlabel_replace(label_replace(\n(rate(otelcol_processor_batch_batch_send_size_count{}[$__interval]))\n, \"id\", \"$0\", \"processor\", \".*\")\n, \"title\", \"$0\", \"processor\", \".*\")\n\nor\nlabel_replace(label_replace(\nsum by(exporter) (rate(otelcol_exporter_sent_spans{}[$__interval]))\n, \"id\", \"exporter\", \"dummynode\", \"\")\n, \"title\", \"exporter\", \"dummynode\", \"\")\n \nor\nlabel_replace(label_replace(\nsum by(exporter) (rate(otelcol_exporter_sent_spans{}[$__interval]))\n, \"id\", \"$0\", \"exporter\", \".*\")\n, \"title\", \"$0\", \"exporter\", \".*\")",
+ "format": "table",
+ "instant": true,
+ "legendFormat": "__auto",
+ "range": false,
+ "refId": "nodes"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "label_join(\nlabel_replace(label_join(\n(rate(otelcol_receiver_accepted_spans{}[$__interval]))\n\n ,\"source\",\"\",\"transport\",\"receiver\")\n,\"target\",\"processor\",\"\",\"\")\n,\"id\",\"-\",\"source\",\"target\")\n\n or\n\n label_join(\nlabel_replace(label_replace(\n (rate(otelcol_processor_batch_batch_send_size_count{}[$__interval]))\n ,\"source\",\"processor\",\"\",\"\")\n,\"target\",\"$0\",\"processor\",\".*\")\n,\"id\",\"-\",\"source\",\"target\")\n\nor\n label_join(\nlabel_replace(label_replace(\n (rate(otelcol_processor_batch_batch_send_size_count{}[$__interval]))\n ,\"source\",\"$0\",\"processor\",\".*\")\n,\"target\",\"exporter\",\"\",\"\")\n,\"id\",\"-\",\"source\",\"target\")\n\nor\n label_join(\nlabel_replace(label_replace(\n (rate(otelcol_exporter_sent_spans{}[$__interval]))\n ,\"source\",\"exporter\",\"\",\"\")\n,\"target\",\"$0\",\"exporter\",\".*\")\n,\"id\",\"-\",\"source\",\"target\")\n\n",
+ "format": "table",
+ "hide": false,
+ "instant": true,
+ "legendFormat": "__auto",
+ "range": false,
+ "refId": "edges"
+ }
+ ],
+ "transformations": [],
+ "type": "nodeGraph"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "description": "Spans Accepted by Receiver and Transport",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-BlYlRd"
+ },
+ "mappings": [],
+ "noValue": "no data",
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "text",
+ "value": null
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 5,
+ "x": 3,
+ "y": 17
+ },
+ "id": 12,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "textMode": "auto"
+ },
+ "pluginVersion": "9.1.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "expr": "sum(rate(otelcol_receiver_accepted_spans{}[$__rate_interval])) by (receiver,transport)",
+ "legendFormat": "{{receiver}}-{{transport}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Accepted",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "description": "Total Spans Accepted ",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-BlYlRd"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "text",
+ "value": null
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 3,
+ "x": 8,
+ "y": 17
+ },
+ "id": 13,
+ "options": {
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": true
+ },
+ "pluginVersion": "9.1.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "expr": "sum(rate(otelcol_receiver_accepted_spans{}[$__rate_interval])) ",
+ "legendFormat": "{{receiver}}-{{transport}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Total ",
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "description": "Total Batch Processed",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-BlYlRd"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "#EAB839",
+ "value": 1
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 5,
+ "x": 11,
+ "y": 17
+ },
+ "id": 15,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "text": {},
+ "textMode": "auto"
+ },
+ "pluginVersion": "9.1.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "expr": "sum(rate(otelcol_processor_batch_batch_send_size_sum{}[$__rate_interval])) by (processor)",
+ "legendFormat": "{{processor}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Batch",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-BlYlRd"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "text",
+ "value": null
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 3,
+ "x": 16,
+ "y": 17
+ },
+ "id": 14,
+ "options": {
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": true
+ },
+ "pluginVersion": "9.1.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "sum(rate(otelcol_exporter_sent_spans{}[$__interval])) ",
+ "format": "time_series",
+ "instant": false,
+ "legendFormat": "{{processor}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Total ",
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "description": "Sent by Exporter",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-BlYlRd"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "text",
+ "value": null
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 5,
+ "x": 19,
+ "y": 17
+ },
+ "id": 30,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "textMode": "auto"
+ },
+ "pluginVersion": "9.1.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "sum(rate(otelcol_exporter_sent_spans{}[$__rate_interval])) by (exporter)",
+ "format": "time_series",
+ "instant": false,
+ "legendFormat": "{{processor}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Sent",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-BlYlRd"
+ },
+ "mappings": [],
+ "noValue": "no data",
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "text",
+ "value": null
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 3,
+ "w": 5,
+ "x": 3,
+ "y": 22
+ },
+ "id": 17,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "textMode": "auto"
+ },
+ "pluginVersion": "9.1.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "expr": "sum(rate(otelcol_receiver_refused_spans{}[$__rate_interval])) by (receiver,transport)",
+ "legendFormat": "{{receiver}}-{{transport}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Refused",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "description": "Total Spans Accepted ",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-BlYlRd"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "text",
+ "value": null
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 3,
+ "w": 3,
+ "x": 8,
+ "y": 22
+ },
+ "id": 18,
+ "options": {
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": true
+ },
+ "pluginVersion": "9.1.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "expr": "sum(rate(otelcol_receiver_refused_spans{}[$__rate_interval])) ",
+ "legendFormat": "{{receiver}}-{{transport}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Total ",
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "description": "otelcol_exporter_send_failed_spans",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-BlYlRd"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "text",
+ "value": null
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 3,
+ "w": 3,
+ "x": 16,
+ "y": 22
+ },
+ "id": 19,
+ "options": {
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": true
+ },
+ "pluginVersion": "9.1.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "sum(rate(otelcol_exporter_send_failed_spans{}[$__rate_interval])) ",
+ "format": "time_series",
+ "instant": false,
+ "legendFormat": "{{processor}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Total ",
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "description": "Sent by Exporter\notelcol_exporter_send_failed_spans",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-BlYlRd"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "text",
+ "value": null
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 3,
+ "w": 5,
+ "x": 19,
+ "y": 22
+ },
+ "id": 20,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "textMode": "auto"
+ },
+ "pluginVersion": "9.1.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "sum(rate(otelcol_exporter_send_failed_spans{}[$__rate_interval])) by (exporter)",
+ "format": "time_series",
+ "instant": false,
+ "legendFormat": "{{processor}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Failed",
+ "type": "stat"
+ },
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 25
+ },
+ "id": 22,
+ "panels": [],
+ "title": "Metrics Pipeline",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "description": "avg(sum by(job) (rate(otelcol_exporter_sent_metric_points{}[$__range]))) versus avg(sum by(job) (rate(otelcol_receiver_accepted_metric_points{}[$__range])))",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "light-blue",
+ "value": null
+ },
+ {
+ "color": "semi-dark-red",
+ "value": 0
+ },
+ {
+ "color": "super-light-orange",
+ "value": 0.4
+ },
+ {
+ "color": "dark-blue",
+ "value": 0.9
+ },
+ {
+ "color": "super-light-orange",
+ "value": 1.2
+ },
+ {
+ "color": "dark-red",
+ "value": 2.1
+ }
+ ]
+ },
+ "unit": "percentunit"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 19,
+ "w": 3,
+ "x": 0,
+ "y": 26
+ },
+ "id": 54,
+ "options": {
+ "orientation": "vertical",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "/.*/",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": false
+ },
+ "pluginVersion": "9.1.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "avg(sum by(job) (rate(otelcol_exporter_sent_metric_points{}[$__range])))",
+ "format": "time_series",
+ "hide": true,
+ "instant": false,
+ "legendFormat": "__auto",
+ "range": true,
+ "refId": "export"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "expr": "avg(sum by(job) (rate(otelcol_receiver_accepted_metric_points{}[$__range])))",
+ "format": "time_series",
+ "hide": true,
+ "legendFormat": "__auto",
+ "range": true,
+ "refId": "acc"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "expr": "( avg(sum by(job) (rate(otelcol_exporter_sent_metric_points{}[$__range]))) /avg(sum by(job) (rate(otelcol_receiver_accepted_metric_points{}[$__range]))))",
+ "hide": false,
+ "legendFormat": "__auto",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Export Ratio",
+ "transformations": [
+ {
+ "id": "calculateField",
+ "options": {
+ "alias": "percent",
+ "binary": {
+ "left": "avg(sum by(job) (rate(otelcol_exporter_sent_metric_points{}[3600s])))",
+ "operator": "/",
+ "reducer": "sum",
+ "right": "avg(sum by(job) (rate(otelcol_receiver_accepted_metric_points{}[3600s])))"
+ },
+ "mode": "binary",
+ "reduce": {
+ "reducer": "sum"
+ }
+ }
+ },
+ {
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "(sum(rate(otelcol_exporter_sent_metric_points{exporter=\"prometheus\"}[1m0s])) )": true,
+ "Time": true,
+ "avg(sum by(job) (rate(otelcol_exporter_sent_metric_points{}[3600s])))": true,
+ "avg(sum by(job) (rate(otelcol_receiver_accepted_metric_points{}[3600s])))": true,
+ "{instance=\"otelcol:9464\", job=\"otel\"}": true
+ },
+ "indexByName": {},
+ "renameByName": {
+ "Time": "",
+ "percent": "Percent",
+ "{exporter=\"debug\", instance=\"otelcol:8888\", job=\"otel-collector\", service_instance_id=\"fbfa720a-ebf9-45c8-a79a-9d3b6021a663\", service_name=\"otelcol-contrib\", service_version=\"0.70.0\"}": ""
+ }
+ }
+ }
+ ],
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "description": "Metrics Signalling Pipelines",
+ "gridPos": {
+ "h": 11,
+ "w": 21,
+ "x": 3,
+ "y": 26
+ },
+ "id": 25,
+ "options": {
+ "nodes": {
+ "mainStatUnit": "flops"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "\nlabel_join(label_join(\n(rate(otelcol_receiver_accepted_metric_points{}[$__interval]))\n, \"id\", \"\", \"transport\", \"receiver\")\n, \"title\", \"\", \"transport\", \"receiver\")\n\nor\n\nlabel_replace(label_replace(\nsum by(service_name) (rate(otelcol_receiver_accepted_spans{}[$__interval]))\n, \"id\", \"processor\", \"dummynode\", \"\")\n, \"title\", \"processor\", \"dummynode\", \"\")\n\n\n\nor\nlabel_replace(label_replace(\n(rate(otelcol_processor_batch_batch_send_size_count{}[$__interval]))\n, \"id\", \"$0\", \"processor\", \".*\")\n, \"title\", \"$0\", \"processor\", \".*\")\n\n\n\n\n\nor\nlabel_replace(label_replace(\nsum (rate(otelcol_exporter_sent_metric_points{}[$__interval]))\n, \"id\", \"exporter\", \"dummynode\", \"\")\n, \"title\", \"exporter\", \"dummynode\", \"\")\n\nor\nlabel_replace(label_replace(\nsum by(exporter) (rate(otelcol_exporter_sent_metric_points{}[$__interval]))\n, \"id\", \"$0\", \"exporter\", \".*\")\n, \"title\", \"$0\", \"exporter\", \".*\")",
+ "format": "table",
+ "instant": true,
+ "legendFormat": "__auto",
+ "range": false,
+ "refId": "nodes"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "label_join(\nlabel_replace(label_join(\n(rate(otelcol_receiver_accepted_metric_points{}[$__interval]))\n\n,\"source\",\"\",\"transport\",\"receiver\")\n,\"target\",\"processor\",\"\",\"\")\n,\"id\",\"-\",\"source\",\"target\")\n\n\nor\n\nlabel_join(\nlabel_replace(label_replace(\n(rate(otelcol_processor_batch_batch_send_size_count{}[$__interval]))\n,\"source\",\"processor\",\"\",\"\")\n,\"target\",\"$0\",\"processor\",\".*\")\n,\"id\",\"-\",\"source\",\"target\")\n\n\n\n\n\nor\n\n\nlabel_join(\nlabel_replace(label_replace(\n(rate(otelcol_processor_batch_batch_send_size_count{}[$__interval]))\n,\"source\",\"$0\",\"processor\",\".*\")\n,\"target\",\"exporter\",\"\",\"\")\n,\"id\",\"-\",\"source\",\"target\")\n\nor\nlabel_join(\nlabel_replace(label_replace(\n(rate(otelcol_exporter_sent_metric_points{}[$__interval]))\n,\"source\",\"exporter\",\"\",\"\")\n,\"target\",\"$0\",\"exporter\",\".*\")\n,\"id\",\"-\",\"source\",\"target\")",
+ "format": "table",
+ "hide": false,
+ "instant": true,
+ "legendFormat": "__auto",
+ "range": false,
+ "refId": "edges"
+ }
+ ],
+ "transformations": [],
+ "type": "nodeGraph"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "description": "otelcol_receiver_accepted_metric_points",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-BlYlRd"
+ },
+ "mappings": [],
+ "noValue": "no data",
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "text",
+ "value": null
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 5,
+ "x": 3,
+ "y": 37
+ },
+ "id": 26,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "textMode": "auto"
+ },
+ "pluginVersion": "9.1.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "expr": "sum(rate(otelcol_receiver_accepted_metric_points{}[$__rate_interval])) by (receiver,transport)",
+ "legendFormat": "{{receiver}}-{{transport}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Accepted",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "description": "otelcol_receiver_accepted_metric_points\nTotal Accepted ",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-BlYlRd"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "text",
+ "value": null
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 3,
+ "x": 8,
+ "y": 37
+ },
+ "id": 27,
+ "options": {
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": true
+ },
+ "pluginVersion": "9.1.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "expr": "sum(rate(otelcol_receiver_accepted_metric_points{}[$__rate_interval])) ",
+ "legendFormat": "{{receiver}}-{{transport}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Total ",
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-BlYlRd"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "#EAB839",
+ "value": 1
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 5,
+ "x": 11,
+ "y": 37
+ },
+ "id": 28,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "text": {},
+ "textMode": "auto"
+ },
+ "pluginVersion": "9.1.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "expr": "sum(rate(otelcol_processor_batch_batch_send_size_sum{}[$__rate_interval])) by (processor)",
+ "legendFormat": "{{processor}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Batch",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "description": "Total Export ",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-BlYlRd"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "text",
+ "value": null
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 3,
+ "x": 16,
+ "y": 37
+ },
+ "id": 29,
+ "options": {
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": true
+ },
+ "pluginVersion": "9.1.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "sum(rate(otelcol_exporter_sent_metric_points{}[$__rate_interval])) ",
+ "format": "time_series",
+ "instant": false,
+ "legendFormat": "{{processor}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Total ",
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "description": "Sent by Exporter",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-BlYlRd"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "text",
+ "value": null
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 5,
+ "x": 19,
+ "y": 37
+ },
+ "id": 16,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "textMode": "auto"
+ },
+ "pluginVersion": "9.1.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "sum(rate(otelcol_exporter_sent_metric_points{}[$__rate_interval])) by (exporter) ",
+ "format": "time_series",
+ "instant": false,
+ "legendFormat": "{{processor}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Sent",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-BlYlRd"
+ },
+ "mappings": [],
+ "noValue": "no data",
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "text",
+ "value": null
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 3,
+ "w": 5,
+ "x": 3,
+ "y": 42
+ },
+ "id": 47,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "textMode": "auto"
+ },
+ "pluginVersion": "9.1.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "expr": "sum(rate(otelcol_receiver_refused_metric_points{}[$__rate_interval])) by (receiver,transport)",
+ "legendFormat": "{{receiver}}-{{transport}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Refused",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "description": "Total Refused \nsum(rate(otelcol_receiver_refused_metric_points{}[$__rate_interval])) ",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-BlYlRd"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "text",
+ "value": null
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 3,
+ "w": 3,
+ "x": 8,
+ "y": 42
+ },
+ "id": 48,
+ "options": {
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": true
+ },
+ "pluginVersion": "9.1.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "expr": "sum(rate(otelcol_receiver_refused_metric_points{}[$__rate_interval])) ",
+ "legendFormat": "{{receiver}}-{{transport}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Total ",
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "description": "Total Failed Export ",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-BlYlRd"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "text",
+ "value": null
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 3,
+ "w": 3,
+ "x": 16,
+ "y": 42
+ },
+ "id": 49,
+ "options": {
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": true
+ },
+ "pluginVersion": "9.1.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "sum(rate(otelcol_exporter_send_failed_metric_points{}[$__rate_interval])) ",
+ "format": "time_series",
+ "instant": false,
+ "legendFormat": "{{processor}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Total",
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "description": "Sent by Exporter\notelcol_exporter_send_failed_spans",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-BlYlRd"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "text",
+ "value": null
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 3,
+ "w": 5,
+ "x": 19,
+ "y": 42
+ },
+ "id": 50,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "textMode": "auto"
+ },
+ "pluginVersion": "9.1.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "sum(rate(otelcol_exporter_send_failed_metric_points{}[$__rate_interval])) by (exporter)",
+ "format": "time_series",
+ "instant": false,
+ "legendFormat": "{{processor}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Failed",
+ "type": "stat"
+ },
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 45
+ },
+ "id": 35,
+ "panels": [],
+ "title": "Prometheus Scrape",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "description": "otelcol prometheus exporter 9464 export rate versus prometheus scrape metrics",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "light-blue",
+ "value": null
+ },
+ {
+ "color": "semi-dark-red",
+ "value": 0
+ },
+ {
+ "color": "super-light-orange",
+ "value": 0.4
+ },
+ {
+ "color": "dark-blue",
+ "value": 0.9
+ },
+ {
+ "color": "super-light-orange",
+ "value": 1.2
+ },
+ {
+ "color": "dark-red",
+ "value": 2.1
+ }
+ ]
+ },
+ "unit": "percentunit"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 3,
+ "x": 0,
+ "y": 46
+ },
+ "id": 53,
+ "options": {
+ "orientation": "vertical",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "/.*/",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": false
+ },
+ "pluginVersion": "9.1.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "(sum_over_time(scrape_samples_scraped{job=\"otel\"}[$__range])/ count_over_time(scrape_samples_scraped{job=\"otel\"}[$__range])/(5*30)) ",
+ "format": "time_series",
+ "instant": false,
+ "legendFormat": "__auto",
+ "range": true,
+ "refId": "accepted"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "expr": "(sum(rate(otelcol_exporter_sent_metric_points{exporter=\"prometheus\"}[$__rate_interval])) )",
+ "format": "time_series",
+ "hide": false,
+ "legendFormat": "__auto",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Exported/Scraped",
+ "transformations": [
+ {
+ "id": "calculateField",
+ "options": {
+ "alias": "percent",
+ "binary": {
+ "left": "{instance=\"otelcol:9464\", job=\"otel\"}",
+ "operator": "/",
+ "reducer": "sum",
+ "right": "(sum(rate(otelcol_exporter_sent_metric_points{exporter=\"prometheus\"}[1m0s])) )"
+ },
+ "mode": "binary",
+ "reduce": {
+ "reducer": "sum"
+ }
+ }
+ },
+ {
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "(sum(rate(otelcol_exporter_sent_metric_points{exporter=\"prometheus\"}[1m0s])) )": true,
+ "Time": true,
+ "{instance=\"otelcol:9464\", job=\"otel\"}": true
+ },
+ "indexByName": {},
+ "renameByName": {
+ "percent": "Percent"
+ }
+ }
+ }
+ ],
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "description": "sum_over_time(scrape_samples_scraped[$__range])/ count_over_time(scrape_samples_scraped[$__range])",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-BlYlRd"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 5,
+ "x": 3,
+ "y": 46
+ },
+ "id": 37,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "textMode": "value_and_name"
+ },
+ "pluginVersion": "9.1.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "sum_over_time(scrape_samples_scraped[$__range])/ count_over_time(scrape_samples_scraped[$__range])/(5*30)",
+ "format": "time_series",
+ "instant": false,
+ "legendFormat": "{{job}}/{{instance}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Samples Scraped",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "description": "scrape_samples_scraped{job!=\"\"}\nTotal Samples Scraped",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-BlYlRd"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 3,
+ "x": 8,
+ "y": 46
+ },
+ "id": 42,
+ "options": {
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": true
+ },
+ "pluginVersion": "9.1.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "sum_over_time(scrape_samples_scraped[$__range])/ count_over_time(scrape_samples_scraped[$__range])/(5*30)",
+ "format": "time_series",
+ "hide": false,
+ "instant": false,
+ "legendFormat": "__auto",
+ "range": true,
+ "refId": "B"
+ }
+ ],
+ "title": "Total",
+ "transformations": [
+ {
+ "id": "calculateField",
+ "options": {
+ "mode": "reduceRow",
+ "reduce": {
+ "include": [
+ "{instance=\"otelcol:9464\", job=\"otel\"}",
+ "{instance=\"otelcol:8888\", job=\"otel-collector\"}"
+ ],
+ "reducer": "sum"
+ },
+ "replaceFields": true
+ }
+ }
+ ],
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 8,
+ "x": 11,
+ "y": 46
+ },
+ "id": 41,
+ "pluginVersion": "9.1.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "label_replace(label_replace(label_replace(\nsum (scrape_samples_scraped{job!=\"\"}) by (instance)\n, \"id\", \"$0\", \"instance\", \".*\")\n, \"title\", \"$0\", \"instance\", \".*\")\n,\"mainstat\",\"\",\"\",\"\")\n\nor \n\nlabel_replace(label_replace(label_replace(\nsum (scrape_samples_scraped{job!=\"\"})\n, \"id\", \"prometheus\", \"\", \"\")\n, \"title\", \"prometheus\", \"\", \"\")\n,\"mainstat\",\"\",\"\",\"\")\n",
+ "format": "table",
+ "hide": false,
+ "instant": true,
+ "legendFormat": "__auto",
+ "range": false,
+ "refId": "nodes"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "label_join(\nlabel_replace(label_replace(\nsum (scrape_samples_scraped{job!=\"\"}) by (instance)\n,\"source\",\"$0\",\"instance\",\".*\")\n,\"target\",\"prometheus\",\"\",\"\")\n,\"id\",\"-\",\"source\",\"target\")",
+ "format": "table",
+ "hide": false,
+ "instant": true,
+ "legendFormat": "__auto",
+ "range": false,
+ "refId": "edges"
+ }
+ ],
+ "transformations": [
+ {
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "Time": true
+ },
+ "indexByName": {},
+ "renameByName": {}
+ }
+ }
+ ],
+ "type": "nodeGraph"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "description": "Sent by Exporter",
+ "gridPos": {
+ "h": 9,
+ "w": 5,
+ "x": 19,
+ "y": 46
+ },
+ "id": 52,
+ "options": {
+ "code": {
+ "language": "plaintext",
+ "showLineNumbers": false,
+ "showMiniMap": false
+ },
+ "content": "\n \n## Prometheus Config\n\n`evaluation_interval:` 30s\n\n`scrape_interval:` 5s",
+ "mode": "markdown"
+ },
+ "pluginVersion": "9.1.0",
+ "type": "text"
+ }
+ ],
+ "refresh": false,
+ "schemaVersion": 37,
+ "style": "dark",
+ "tags": [],
+ "templating": {
+ "list": [
+ {
+ "allValue": ".*",
+ "current": {
+ "selected": false,
+ "text": "0.70.0",
+ "value": "0.70.0"
+ },
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "definition": "query_result(sum(otelcol_process_uptime{}) by (service_version))\n",
+ "hide": 2,
+ "includeAll": false,
+ "label": "service_version",
+ "multi": true,
+ "name": "service_version",
+ "options": [],
+ "query": {
+ "query": "query_result(sum(otelcol_process_uptime{}) by (service_version))\n",
+ "refId": "StandardVariableQuery"
+ },
+ "refresh": 1,
+ "regex": "/.*service_version=\"(.*)\".*/",
+ "skipUrlSync": false,
+ "sort": 0,
+ "type": "query"
+ }
+ ]
+ },
+ "time": {
+ "from": "now-15m",
+ "to": "now"
+ },
+ "timepicker": {},
+ "timezone": "",
+ "title": "Opentelemetry Collector Data Flow",
+ "uid": "rl5_tea4k",
+ "version": 2,
+ "weekStart": ""
+ }
+ opentelemetry-collector.json: |-
+ {
+ "__inputs": [],
+ "__elements": {},
+ "__requires": [
+ {
+ "type": "grafana",
+ "id": "grafana",
+ "name": "Grafana",
+ "version": "10.0.3"
+ },
+ {
+ "type": "panel",
+ "id": "heatmap",
+ "name": "Heatmap",
+ "version": ""
+ },
+ {
+ "type": "panel",
+ "id": "nodeGraph",
+ "name": "Node Graph",
+ "version": ""
+ },
+ {
+ "type": "datasource",
+ "id": "prometheus",
+ "name": "Prometheus",
+ "version": "1.0.0"
+ },
+ {
+ "type": "panel",
+ "id": "table",
+ "name": "Table",
+ "version": ""
+ },
+ {
+ "type": "panel",
+ "id": "text",
+ "name": "Text",
+ "version": ""
+ },
+ {
+ "type": "panel",
+ "id": "timeseries",
+ "name": "Time series",
+ "version": ""
+ }
+ ],
+ "annotations": {
+ "list": [
+ {
+ "builtIn": 1,
+ "datasource": {
+ "type": "datasource",
+ "uid": "grafana"
+ },
+ "enable": true,
+ "hide": true,
+ "iconColor": "rgba(0, 211, 255, 1)",
+ "name": "Annotations & Alerts",
+ "target": {
+ "limit": 100,
+ "matchAny": false,
+ "tags": [],
+ "type": "dashboard"
+ },
+ "type": "dashboard"
+ }
+ ]
+ },
+ "description": "Visualize OpenTelemetry (OTEL) collector metrics (tested with OTEL contrib v0.84.0)",
+ "editable": true,
+ "fiscalYearStartMonth": 0,
+ "gnetId": 15983,
+ "graphTooltip": 1,
+ "id": null,
+ "links": [],
+ "liveNow": false,
+ "panels": [
+ {
+ "collapsed": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 0
+ },
+ "id": 23,
+ "panels": [],
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "refId": "A"
+ }
+ ],
+ "title": "Receivers",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "description": "Accepted: count/rate of spans successfully pushed into the pipeline.\nRefused: count/rate of spans that could not be pushed into the pipeline.",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": true,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "links": [],
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "short"
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/Refused.*/"
+ },
+ "properties": [
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "red",
+ "mode": "fixed"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 8,
+ "x": 0,
+ "y": 1
+ },
+ "id": 28,
+ "interval": "$minstep",
+ "links": [],
+ "options": {
+ "legend": {
+ "calcs": [
+ "min",
+ "max",
+ "mean"
+ ],
+ "displayMode": "table",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "multi",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "8.3.5",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "sum(${metric:value}(otelcol_receiver_accepted_spans{receiver=~\"$receiver\",job=\"$job\"}[$__rate_interval])) by (receiver $grouping)",
+ "format": "time_series",
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Accepted: {{receiver}} {{transport}} {{service_instance_id}}",
+ "range": true,
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "sum(${metric:value}(otelcol_receiver_refused_spans{receiver=~\"$receiver\",job=\"$job\"}[$__rate_interval])) by (receiver $grouping)",
+ "format": "time_series",
+ "hide": false,
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Refused: {{receiver}} {{transport}} {{service_instance_id}}",
+ "range": true,
+ "refId": "B"
+ }
+ ],
+ "title": "Spans ${metric:text}",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "description": "Accepted: count/rate of metric points successfully pushed into the pipeline.\nRefused: count/rate of metric points that could not be pushed into the pipeline.",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": true,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "links": [],
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "short"
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/Refused.*/"
+ },
+ "properties": [
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "red",
+ "mode": "fixed"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 8,
+ "x": 8,
+ "y": 1
+ },
+ "id": 32,
+ "interval": "$minstep",
+ "links": [],
+ "options": {
+ "legend": {
+ "calcs": [
+ "min",
+ "max",
+ "mean"
+ ],
+ "displayMode": "table",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "multi",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "8.3.5",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "sum(${metric:value}(otelcol_receiver_accepted_metric_points{receiver=~\"$receiver\",job=\"$job\"}[$__rate_interval])) by (receiver $grouping)",
+ "format": "time_series",
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Accepted: {{receiver}} {{transport}} {{service_instance_id}}",
+ "range": true,
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "sum(${metric:value}(otelcol_receiver_refused_metric_points{receiver=~\"$receiver\",job=\"$job\"}[$__rate_interval])) by (receiver $grouping)",
+ "format": "time_series",
+ "hide": false,
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Refused: {{receiver}} {{transport}} {{service_instance_id}}",
+ "range": true,
+ "refId": "B"
+ }
+ ],
+ "title": "Metric Points ${metric:text}",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "description": "Accepted: count/rate of log records successfully pushed into the pipeline.\nRefused: count/rate of log records that could not be pushed into the pipeline.",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": true,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "links": [],
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "short"
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/Refused.*/"
+ },
+ "properties": [
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "red",
+ "mode": "fixed"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 8,
+ "x": 16,
+ "y": 1
+ },
+ "id": 47,
+ "interval": "$minstep",
+ "links": [],
+ "options": {
+ "legend": {
+ "calcs": [
+ "min",
+ "max",
+ "mean"
+ ],
+ "displayMode": "table",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "multi",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "8.3.5",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "sum(${metric:value}(otelcol_receiver_accepted_log_records{receiver=~\"$receiver\",job=\"$job\"}[$__rate_interval])) by (receiver $grouping)",
+ "format": "time_series",
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Accepted: {{receiver}} {{transport}} {{service_instance_id}}",
+ "range": true,
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "sum(${metric:value}(otelcol_receiver_refused_log_records{receiver=~\"$receiver\",job=\"$job\"}[$__rate_interval])) by (receiver $grouping)",
+ "format": "time_series",
+ "hide": false,
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Refused: {{receiver}} {{transport}} {{service_instance_id}}",
+ "range": true,
+ "refId": "B"
+ }
+ ],
+ "title": "Log Records ${metric:text}",
+ "type": "timeseries"
+ },
+ {
+ "collapsed": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 9
+ },
+ "id": 34,
+ "panels": [],
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "refId": "A"
+ }
+ ],
+ "title": "Processors",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": true,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "links": [],
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "short"
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/.*Refused.*/"
+ },
+ "properties": [
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "red",
+ "mode": "fixed"
+ }
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/.*Dropped.*/"
+ },
+ "properties": [
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "purple",
+ "mode": "fixed"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 8,
+ "x": 0,
+ "y": 18
+ },
+ "id": 36,
+ "interval": "$minstep",
+ "links": [],
+ "options": {
+ "legend": {
+ "calcs": [
+ "min",
+ "max",
+ "mean"
+ ],
+ "displayMode": "table",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "multi",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "8.3.5",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "sum(${metric:value}(otelcol_processor_batch_batch_send_size_count{processor=~\"$processor\",job=\"$job\"}[$__rate_interval])) by (processor)",
+ "format": "time_series",
+ "hide": false,
+ "instant": false,
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Batch send size count: {{processor}}",
+ "refId": "B"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "sum(${metric:value}(otelcol_processor_batch_batch_send_size_sum{processor=~\"$processor\",job=\"$job\"}[$__rate_interval])) by (processor)",
+ "format": "time_series",
+ "hide": false,
+ "instant": false,
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Batch send size sum: {{processor}}",
+ "refId": "A"
+ }
+ ],
+ "title": "Batch Metrics",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "description": "Number of units in the batch",
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "scaleDistribution": {
+ "type": "linear"
+ }
+ },
+ "links": []
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 8,
+ "x": 8,
+ "y": 18
+ },
+ "id": 49,
+ "interval": "$minstep",
+ "links": [],
+ "maxDataPoints": 50,
+ "options": {
+ "calculate": false,
+ "cellGap": 1,
+ "color": {
+ "exponent": 0.5,
+ "fill": "dark-orange",
+ "mode": "scheme",
+ "reverse": true,
+ "scale": "exponential",
+ "scheme": "Reds",
+ "steps": 57
+ },
+ "exemplars": {
+ "color": "rgba(255,0,255,0.7)"
+ },
+ "filterValues": {
+ "le": 1e-9
+ },
+ "legend": {
+ "show": true
+ },
+ "rowsFrame": {
+ "layout": "auto"
+ },
+ "tooltip": {
+ "show": true,
+ "yHistogram": false
+ },
+ "yAxis": {
+ "axisPlacement": "left",
+ "reverse": false
+ }
+ },
+ "pluginVersion": "10.0.3",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "sum(increase(otelcol_processor_batch_batch_send_size_bucket{processor=~\"$processor\",job=\"$job\"}[$__rate_interval])) by (le)",
+ "format": "heatmap",
+ "hide": false,
+ "instant": false,
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "{{le}}",
+ "refId": "B"
+ }
+ ],
+ "title": "Batch Send Size Heatmap",
+ "type": "heatmap"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "description": "Number of times the batch was sent due to a size trigger. Number of times the batch was sent due to a timeout trigger.",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": true,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "links": [],
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "short"
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/.*Refused.*/"
+ },
+ "properties": [
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "red",
+ "mode": "fixed"
+ }
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/.*Dropped.*/"
+ },
+ "properties": [
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "purple",
+ "mode": "fixed"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 8,
+ "x": 16,
+ "y": 18
+ },
+ "id": 56,
+ "interval": "$minstep",
+ "links": [],
+ "options": {
+ "legend": {
+ "calcs": [
+ "min",
+ "max",
+ "mean"
+ ],
+ "displayMode": "table",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "multi",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "8.3.5",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "sum(${metric:value}(otelcol_processor_batch_batch_size_trigger_send{processor=~\"$processor\",job=\"$job\"}[$__rate_interval])) by (processor)",
+ "format": "time_series",
+ "hide": false,
+ "instant": false,
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Batch sent due to a size trigger: {{processor}}",
+ "refId": "B"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "sum(${metric:value}(otelcol_processor_batch_timeout_trigger_send{processor=~\"$processor\"}[$__rate_interval])) by (processor)",
+ "format": "time_series",
+ "hide": false,
+ "instant": false,
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Batch sent due to a timeout trigger: {{processor}}",
+ "refId": "A"
+ }
+ ],
+ "title": "Batch Metrics",
+ "type": "timeseries"
+ },
+ {
+ "collapsed": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 26
+ },
+ "id": 25,
+ "panels": [],
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "refId": "A"
+ }
+ ],
+ "title": "Exporters",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "description": "Sent: count/rate of spans successfully sent to destination.\nEngueue: count/rate of spans failed to be added to the sending queue.",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": true,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "links": [],
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "short"
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/Failed:.*/"
+ },
+ "properties": [
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "red",
+ "mode": "fixed"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 8,
+ "x": 0,
+ "y": 27
+ },
+ "id": 37,
+ "interval": "$minstep",
+ "links": [],
+ "options": {
+ "legend": {
+ "calcs": [
+ "min",
+ "max",
+ "mean"
+ ],
+ "displayMode": "table",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "multi",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "8.3.5",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "sum(${metric:value}(otelcol_exporter_sent_spans{exporter=~\"$exporter\",job=\"$job\"}[$__rate_interval])) by (exporter $grouping)",
+ "format": "time_series",
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Sent: {{exporter}} {{service_instance_id}}",
+ "range": true,
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "sum(${metric:value}(otelcol_exporter_enqueue_failed_spans{exporter=~\"$exporter\",job=\"$job\"}[$__rate_interval])) by (exporter $grouping)",
+ "format": "time_series",
+ "hide": false,
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Enqueue: {{exporter}} {{service_instance_id}}",
+ "range": true,
+ "refId": "B"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "sum(${metric:value}(otelcol_exporter_send_failed_spans{exporter=~\"$exporter\",job=\"$job\"}[$__rate_interval])) by (exporter $grouping)",
+ "format": "time_series",
+ "hide": false,
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Failed: {{exporter}} {{service_instance_id}}",
+ "range": true,
+ "refId": "C"
+ }
+ ],
+ "title": "Spans ${metric:text}",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "description": "Sent: count/rate of metric points successfully sent to destination.\nEngueue: count/rate of metric points failed to be added to the sending queue.",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": true,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "links": [],
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "short"
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/Failed:.*/"
+ },
+ "properties": [
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "red",
+ "mode": "fixed"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 8,
+ "x": 8,
+ "y": 27
+ },
+ "id": 38,
+ "interval": "$minstep",
+ "links": [],
+ "options": {
+ "legend": {
+ "calcs": [
+ "min",
+ "max",
+ "mean"
+ ],
+ "displayMode": "table",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "multi",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "8.3.5",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "sum(${metric:value}(otelcol_exporter_sent_metric_points{exporter=~\"$exporter\",job=\"$job\"}[$__rate_interval])) by (exporter $grouping)",
+ "format": "time_series",
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Sent: {{exporter}} {{service_instance_id}}",
+ "range": true,
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "sum(${metric:value}(otelcol_exporter_enqueue_failed_metric_points{exporter=~\"$exporter\",job=\"$job\"}[$__rate_interval])) by (exporter $grouping)",
+ "format": "time_series",
+ "hide": false,
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Enqueue: {{exporter}} {{service_instance_id}}",
+ "range": true,
+ "refId": "B"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "sum(${metric:value}(otelcol_exporter_send_failed_metric_points{exporter=~\"$exporter\",job=\"$job\"}[$__rate_interval])) by (exporter $grouping)",
+ "format": "time_series",
+ "hide": false,
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Failed: {{exporter}} {{service_instance_id}}",
+ "range": true,
+ "refId": "C"
+ }
+ ],
+ "title": "Metric Points ${metric:text}",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "description": "Sent: count/rate of log records successfully sent to destination.\nEngueue: count/rate of log records failed to be added to the sending queue.",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": true,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "links": [],
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "short"
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/Failed:.*/"
+ },
+ "properties": [
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "red",
+ "mode": "fixed"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 8,
+ "x": 16,
+ "y": 27
+ },
+ "id": 48,
+ "interval": "$minstep",
+ "links": [],
+ "options": {
+ "legend": {
+ "calcs": [
+ "min",
+ "max",
+ "mean"
+ ],
+ "displayMode": "table",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "multi",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "8.3.5",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "sum(${metric:value}(otelcol_exporter_sent_log_records{exporter=~\"$exporter\",job=\"$job\"}[$__rate_interval])) by (exporter $grouping)",
+ "format": "time_series",
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Sent: {{exporter}} {{service_instance_id}}",
+ "range": true,
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "sum(${metric:value}(otelcol_exporter_enqueue_failed_log_records{exporter=~\"$exporter\",job=\"$job\"}[$__rate_interval])) by (exporter $grouping)",
+ "format": "time_series",
+ "hide": false,
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Enqueue: {{exporter}} {{service_instance_id}}",
+ "range": true,
+ "refId": "B"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "sum(${metric:value}(otelcol_exporter_send_failed_log_records{exporter=~\"$exporter\",job=\"$job\"}[$__rate_interval])) by (exporter $grouping)",
+ "format": "time_series",
+ "hide": false,
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Failed: {{exporter}} {{service_instance_id}}",
+ "range": true,
+ "refId": "C"
+ }
+ ],
+ "title": "Log Records ${metric:text}",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "description": "Current size of the retry queue (in batches)",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": true,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "links": [],
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "short"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 0,
+ "y": 36
+ },
+ "id": 10,
+ "links": [],
+ "options": {
+ "legend": {
+ "calcs": [
+ "min",
+ "max",
+ "mean"
+ ],
+ "displayMode": "table",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "multi",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "8.3.5",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "max(otelcol_exporter_queue_size{exporter=~\"$exporter\",job=\"$job\"}) by (exporter)",
+ "format": "time_series",
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Max queue size: {{exporter}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Exporter Queue Size",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "description": "Fixed capacity of the retry queue (in batches)",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": true,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "links": [],
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "short"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 12,
+ "y": 36
+ },
+ "id": 55,
+ "links": [],
+ "options": {
+ "legend": {
+ "calcs": [
+ "min",
+ "max",
+ "mean"
+ ],
+ "displayMode": "table",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "multi",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "8.3.5",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "min(otelcol_exporter_queue_capacity{exporter=~\"$exporter\",job=\"$job\"}) by (exporter)",
+ "format": "time_series",
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Queue capacity: {{exporter}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Exporter Queue Capacity",
+ "type": "timeseries"
+ },
+ {
+ "collapsed": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 45
+ },
+ "id": 21,
+ "panels": [],
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "refId": "A"
+ }
+ ],
+ "title": "Collector",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "description": "Total physical memory (resident set size)",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": true,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "links": [],
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "bytes"
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Max Memory RSS "
+ },
+ "properties": [
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "red",
+ "mode": "fixed"
+ }
+ },
+ {
+ "id": "custom.fillBelowTo",
+ "value": "Avg Memory RSS "
+ },
+ {
+ "id": "custom.lineWidth",
+ "value": 0
+ },
+ {
+ "id": "custom.fillOpacity",
+ "value": 20
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Min Memory RSS "
+ },
+ "properties": [
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "yellow",
+ "mode": "fixed"
+ }
+ },
+ {
+ "id": "custom.lineWidth",
+ "value": 0
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Avg Memory RSS "
+ },
+ "properties": [
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "orange",
+ "mode": "fixed"
+ }
+ },
+ {
+ "id": "custom.fillBelowTo",
+ "value": "Min Memory RSS "
+ },
+ {
+ "id": "custom.fillOpacity",
+ "value": 20
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 8,
+ "x": 0,
+ "y": 46
+ },
+ "id": 40,
+ "interval": "$minstep",
+ "links": [],
+ "options": {
+ "legend": {
+ "calcs": [
+ "min",
+ "max",
+ "mean"
+ ],
+ "displayMode": "table",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "multi",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "8.3.5",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "max(otelcol_process_memory_rss{job=\"$job\"}) by (job $grouping)",
+ "format": "time_series",
+ "hide": false,
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Max Memory RSS {{service_instance_id}}",
+ "range": true,
+ "refId": "C"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "avg(otelcol_process_memory_rss{job=\"$job\"}) by (job $grouping)",
+ "format": "time_series",
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Avg Memory RSS {{service_instance_id}}",
+ "range": true,
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "min(otelcol_process_memory_rss{job=\"$job\"}) by (job $grouping)",
+ "format": "time_series",
+ "hide": false,
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Min Memory RSS {{service_instance_id}}",
+ "range": true,
+ "refId": "B"
+ }
+ ],
+ "title": "Total RSS Memory",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "description": "Total bytes of memory obtained from the OS (see 'go doc runtime.MemStats.Sys')",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": true,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "links": [],
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "bytes"
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Max Memory RSS "
+ },
+ "properties": [
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "red",
+ "mode": "fixed"
+ }
+ },
+ {
+ "id": "custom.fillBelowTo",
+ "value": "Avg Memory RSS "
+ },
+ {
+ "id": "custom.lineWidth",
+ "value": 0
+ },
+ {
+ "id": "custom.fillOpacity",
+ "value": 20
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Min Memory RSS "
+ },
+ "properties": [
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "yellow",
+ "mode": "fixed"
+ }
+ },
+ {
+ "id": "custom.lineWidth",
+ "value": 0
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Avg Memory RSS "
+ },
+ "properties": [
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "orange",
+ "mode": "fixed"
+ }
+ },
+ {
+ "id": "custom.fillBelowTo",
+ "value": "Min Memory RSS "
+ },
+ {
+ "id": "custom.fillOpacity",
+ "value": 20
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 8,
+ "x": 8,
+ "y": 46
+ },
+ "id": 52,
+ "interval": "$minstep",
+ "links": [],
+ "options": {
+ "legend": {
+ "calcs": [
+ "min",
+ "max",
+ "mean"
+ ],
+ "displayMode": "table",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "multi",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "8.3.5",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "max(otelcol_process_runtime_total_sys_memory_bytes{job=\"$job\"}) by (job $grouping)",
+ "format": "time_series",
+ "hide": false,
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Max Memory RSS {{service_instance_id}}",
+ "range": true,
+ "refId": "C"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "avg(otelcol_process_runtime_total_sys_memory_bytes{job=\"$job\"}) by (job $grouping)",
+ "format": "time_series",
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Avg Memory RSS {{service_instance_id}}",
+ "range": true,
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "min(otelcol_process_runtime_total_sys_memory_bytes{job=\"$job\"}) by (job $grouping)",
+ "format": "time_series",
+ "hide": false,
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Min Memory RSS {{service_instance_id}}",
+ "range": true,
+ "refId": "B"
+ }
+ ],
+ "title": "Total Runtime Sys Memory",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "description": "Bytes of allocated heap objects (see 'go doc runtime.MemStats.HeapAlloc')",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": true,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "links": [],
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "bytes"
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Max Memory RSS "
+ },
+ "properties": [
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "red",
+ "mode": "fixed"
+ }
+ },
+ {
+ "id": "custom.fillBelowTo",
+ "value": "Avg Memory RSS "
+ },
+ {
+ "id": "custom.lineWidth",
+ "value": 0
+ },
+ {
+ "id": "custom.fillOpacity",
+ "value": 20
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Min Memory RSS "
+ },
+ "properties": [
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "yellow",
+ "mode": "fixed"
+ }
+ },
+ {
+ "id": "custom.lineWidth",
+ "value": 0
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Avg Memory RSS "
+ },
+ "properties": [
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "orange",
+ "mode": "fixed"
+ }
+ },
+ {
+ "id": "custom.fillBelowTo",
+ "value": "Min Memory RSS "
+ },
+ {
+ "id": "custom.fillOpacity",
+ "value": 20
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 8,
+ "x": 16,
+ "y": 46
+ },
+ "id": 53,
+ "interval": "$minstep",
+ "links": [],
+ "options": {
+ "legend": {
+ "calcs": [
+ "min",
+ "max",
+ "mean"
+ ],
+ "displayMode": "table",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "multi",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "8.3.5",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "max(otelcol_process_runtime_heap_alloc_bytes{job=\"$job\"}) by (job $grouping)",
+ "format": "time_series",
+ "hide": false,
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Max Memory RSS {{service_instance_id}}",
+ "range": true,
+ "refId": "C"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "avg(otelcol_process_runtime_heap_alloc_bytes{job=\"$job\"}) by (job $grouping)",
+ "format": "time_series",
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Avg Memory RSS {{service_instance_id}}",
+ "range": true,
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "min(otelcol_process_runtime_heap_alloc_bytes{job=\"$job\"}) by (job $grouping)",
+ "format": "time_series",
+ "hide": false,
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Min Memory RSS {{service_instance_id}}",
+ "range": true,
+ "refId": "B"
+ }
+ ],
+ "title": "Total Runtime Heap Memory",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "description": "Total CPU user and system time in percentage",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": true,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "links": [],
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "percent"
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Max CPU usage "
+ },
+ "properties": [
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "red",
+ "mode": "fixed"
+ }
+ },
+ {
+ "id": "custom.fillBelowTo",
+ "value": "Avg CPU usage "
+ },
+ {
+ "id": "custom.lineWidth",
+ "value": 0
+ },
+ {
+ "id": "custom.fillOpacity",
+ "value": 20
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Avg CPU usage "
+ },
+ "properties": [
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "orange",
+ "mode": "fixed"
+ }
+ },
+ {
+ "id": "custom.fillBelowTo",
+ "value": "Min CPU usage "
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Min CPU usage "
+ },
+ "properties": [
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "yellow",
+ "mode": "fixed"
+ }
+ },
+ {
+ "id": "custom.lineWidth",
+ "value": 0
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 8,
+ "x": 0,
+ "y": 55
+ },
+ "id": 39,
+ "interval": "$minstep",
+ "links": [],
+ "options": {
+ "legend": {
+ "calcs": [
+ "min",
+ "max",
+ "mean"
+ ],
+ "displayMode": "table",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "multi",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "8.3.5",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "max(rate(otelcol_process_cpu_seconds{job=\"$job\"}[$__rate_interval])*100) by (job $grouping)",
+ "format": "time_series",
+ "hide": false,
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Max CPU usage {{service_instance_id}}",
+ "range": true,
+ "refId": "B"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "avg(rate(otelcol_process_cpu_seconds{job=\"$job\"}[$__rate_interval])*100) by (job $grouping)",
+ "format": "time_series",
+ "hide": false,
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Avg CPU usage {{service_instance_id}}",
+ "range": true,
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "min(rate(otelcol_process_cpu_seconds{job=\"$job\"}[$__rate_interval])*100) by (job $grouping)",
+ "format": "time_series",
+ "hide": false,
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Min CPU usage {{service_instance_id}}",
+ "range": true,
+ "refId": "C"
+ }
+ ],
+ "title": "CPU Usage",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "description": "Number of service instances, which are reporting metrics",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": true,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "links": [],
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "short"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 8,
+ "x": 8,
+ "y": 55
+ },
+ "id": 41,
+ "interval": "$minstep",
+ "links": [],
+ "options": {
+ "legend": {
+ "calcs": [
+ "min",
+ "max",
+ "mean"
+ ],
+ "displayMode": "table",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "multi",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "8.3.5",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "count(count(otelcol_process_cpu_seconds{service_instance_id=~\".*\",job=\"$job\"}) by (service_instance_id))",
+ "format": "time_series",
+ "hide": false,
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Service instance count",
+ "range": true,
+ "refId": "B"
+ }
+ ],
+ "title": "Service Instance Count",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": true,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "links": [],
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "s"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 8,
+ "x": 16,
+ "y": 55
+ },
+ "id": 54,
+ "interval": "$minstep",
+ "links": [],
+ "options": {
+ "legend": {
+ "calcs": [
+ "min",
+ "max",
+ "mean"
+ ],
+ "displayMode": "table",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "multi",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "8.3.5",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "max(otelcol_process_uptime{service_instance_id=~\".*\",job=\"$job\"}) by (service_instance_id)",
+ "format": "time_series",
+ "hide": false,
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "Service instance uptime: {{service_instance_id}}",
+ "range": true,
+ "refId": "B"
+ }
+ ],
+ "title": "Uptime by Service Instance",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "custom": {
+ "align": "auto",
+ "cellOptions": {
+ "type": "auto"
+ },
+ "inspect": false
+ },
+ "links": [],
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "s"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 24,
+ "x": 0,
+ "y": 64
+ },
+ "id": 57,
+ "interval": "$minstep",
+ "links": [],
+ "options": {
+ "cellHeight": "sm",
+ "footer": {
+ "countRows": false,
+ "fields": "",
+ "reducer": [
+ "sum"
+ ],
+ "show": false
+ },
+ "showHeader": true
+ },
+ "pluginVersion": "10.0.3",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "max(otelcol_process_uptime{service_instance_id=~\".*\",job=\"$job\"}) by (service_instance_id,service_name,service_version)",
+ "format": "table",
+ "hide": false,
+ "instant": true,
+ "interval": "$minstep",
+ "intervalFactor": 1,
+ "legendFormat": "__auto",
+ "range": false,
+ "refId": "B"
+ }
+ ],
+ "title": "Service Instance Details",
+ "transformations": [
+ {
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "Time": true,
+ "Value": true
+ },
+ "indexByName": {},
+ "renameByName": {}
+ }
+ }
+ ],
+ "type": "table"
+ },
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 69
+ },
+ "id": 59,
+ "panels": [],
+ "title": "Data Flows",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "description": "Receivers -> Processor(s) -> Exporters (Node Graph panel is beta, so this panel may not show data correctly).",
+ "gridPos": {
+ "h": 9,
+ "w": 8,
+ "x": 0,
+ "y": 70
+ },
+ "id": 58,
+ "options": {
+ "nodes": {
+ "mainStatUnit": "flops"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "# receivers\nlabel_replace(\n label_join(\n label_join(\n sum(${metric:value}(\n otelcol_receiver_accepted_spans{receiver=~\"$receiver\",job=\"$job\"}[$__rate_interval])\n ) by (receiver)\n , \"id\", \"-rcv-\", \"transport\", \"receiver\"\n )\n , \"title\", \"\", \"transport\", \"receiver\"\n )\n , \"icon\", \"arrow-to-right\", \"\", \"\"\n)\n\n# dummy processor\nor\nlabel_replace(\n label_replace(\n label_replace(\n (sum(rate(otelcol_process_uptime{job=\"$job\"}[$__interval])))\n , \"id\", \"processor\", \"\", \"\"\n )\n , \"title\", \"Processor(s)\", \"\", \"\"\n )\n , \"icon\", \"arrow-random\", \"\", \"\"\n)\n\n# exporters\nor\nlabel_replace(\n label_join(\n label_join(\n sum(${metric:value}(\n otelcol_exporter_sent_spans{exporter=~\"$exporter\",job=\"$job\"}[$__rate_interval])\n ) by (exporter)\n , \"id\", \"-exp-\", \"transport\", \"exporter\"\n )\n , \"title\", \"\", \"transport\", \"exporter\"\n )\n , \"icon\", \"arrow-from-right\", \"\", \"\"\n)",
+ "format": "table",
+ "hide": false,
+ "instant": true,
+ "legendFormat": "__auto",
+ "range": false,
+ "refId": "nodes"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "# receivers -> processor\r\nlabel_join(\r\n label_replace(\r\n label_join(\r\n (sum(rate(otelcol_receiver_accepted_spans{job=\"$job\"}[$__interval])) by (receiver))\r\n ,\"source\", \"-rcv-\", \"transport\", \"receiver\"\r\n )\r\n ,\"target\", \"processor\", \"\", \"\"\r\n )\r\n , \"id\", \"-\", \"source\", \"target\"\r\n)\r\n\r\n# processor -> exporters\r\nor\r\nlabel_join(\r\n label_replace(\r\n label_join(\r\n (sum(rate(otelcol_exporter_sent_spans{job=\"$job\"}[$__interval])) by (exporter))\r\n , \"target\", \"-exp-\", \"transport\", \"exporter\"\r\n )\r\n , \"source\", \"processor\", \"\", \"\"\r\n )\r\n , \"id\", \"-\", \"source\", \"target\"\r\n)",
+ "format": "table",
+ "hide": false,
+ "instant": true,
+ "legendFormat": "__auto",
+ "range": false,
+ "refId": "edges"
+ }
+ ],
+ "title": "Spans Flow",
+ "transformations": [
+ {
+ "id": "renameByRegex",
+ "options": {
+ "regex": "Value",
+ "renamePattern": "mainstat"
+ }
+ },
+ {
+ "disabled": true,
+ "id": "calculateField",
+ "options": {
+ "alias": "secondarystat",
+ "mode": "reduceRow",
+ "reduce": {
+ "include": [
+ "mainstat"
+ ],
+ "reducer": "sum"
+ }
+ }
+ }
+ ],
+ "type": "nodeGraph"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "description": "Receivers -> Processor(s) -> Exporters (Node Graph panel is beta, so this panel may not show data correctly).",
+ "gridPos": {
+ "h": 9,
+ "w": 8,
+ "x": 8,
+ "y": 70
+ },
+ "id": 60,
+ "options": {
+ "nodes": {
+ "mainStatUnit": "none"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "# receivers\nlabel_replace(\n label_join(\n label_join(\n (sum(\n ${metric:value}(otelcol_receiver_accepted_metric_points{receiver=~\"$receiver\",job=\"$job\"}[$__rate_interval])\n ) by (receiver))\n , \"id\", \"-rcv-\", \"transport\", \"receiver\"\n )\n , \"title\", \"\", \"transport\", \"receiver\"\n )\n , \"icon\", \"arrow-to-right\", \"\", \"\"\n)\n\n# dummy processor\nor\nlabel_replace(\n label_replace(\n label_replace(\n (sum(rate(otelcol_process_uptime{job=\"$job\"}[$__interval])))\n , \"id\", \"processor\", \"\", \"\"\n )\n , \"title\", \"Processor(s)\", \"\", \"\"\n )\n , \"icon\", \"arrow-random\", \"\", \"\"\n)\n\n# exporters\nor\nlabel_replace(\n label_join(\n label_join(\n (sum(\n ${metric:value}(otelcol_exporter_sent_metric_points{exporter=~\"$exporter\",job=\"$job\"}[$__rate_interval])\n ) by (exporter))\n , \"id\", \"-exp-\", \"transport\", \"exporter\"\n )\n , \"title\", \"\", \"transport\", \"exporter\"\n )\n , \"icon\", \"arrow-from-right\", \"\", \"\"\n)",
+ "format": "table",
+ "hide": false,
+ "instant": true,
+ "legendFormat": "__auto",
+ "range": false,
+ "refId": "nodes"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "# receivers -> processor\r\nlabel_join(\r\n label_replace(\r\n label_join(\r\n (sum(rate(otelcol_receiver_accepted_metric_points{job=\"$job\"}[$__interval])) by (receiver))\r\n , \"source\", \"-rcv-\", \"transport\", \"receiver\"\r\n )\r\n , \"target\", \"processor\", \"\", \"\"\r\n )\r\n , \"id\", \"-\", \"source\", \"target\"\r\n)\r\n\r\n# processor -> exporters\r\nor \r\nlabel_join(\r\n label_replace(\r\n label_join(\r\n (sum(rate(otelcol_exporter_sent_metric_points{job=\"$job\"}[$__interval])) by (exporter))\r\n , \"target\", \"-exp-\", \"transport\", \"exporter\"\r\n )\r\n , \"source\", \"processor\", \"\", \"\"\r\n )\r\n , \"id\", \"-\", \"source\", \"target\"\r\n)",
+ "format": "table",
+ "hide": false,
+ "instant": true,
+ "legendFormat": "__auto",
+ "range": false,
+ "refId": "edges"
+ }
+ ],
+ "title": "Metric Points Flow",
+ "transformations": [
+ {
+ "id": "renameByRegex",
+ "options": {
+ "regex": "Value",
+ "renamePattern": "mainstat"
+ }
+ },
+ {
+ "disabled": true,
+ "id": "calculateField",
+ "options": {
+ "alias": "secondarystat",
+ "mode": "reduceRow",
+ "reduce": {
+ "include": [
+ "Value #nodes"
+ ],
+ "reducer": "sum"
+ }
+ }
+ }
+ ],
+ "type": "nodeGraph"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "description": "Receivers -> Processor(s) -> Exporters (Node Graph panel is beta, so this panel may not show data correctly).",
+ "gridPos": {
+ "h": 9,
+ "w": 8,
+ "x": 16,
+ "y": 70
+ },
+ "id": 61,
+ "options": {
+ "nodes": {
+ "mainStatUnit": "flops"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "# receivers\nlabel_replace(\n label_join(\n label_join(\n sum(${metric:value}(\n otelcol_receiver_accepted_log_records{receiver=~\"$receiver\",job=\"$job\"}[$__rate_interval])\n ) by (receiver)\n , \"id\", \"-rcv-\", \"transport\", \"receiver\"\n )\n , \"title\", \"\", \"transport\", \"receiver\"\n )\n , \"icon\", \"arrow-to-right\", \"\", \"\"\n)\n\n# dummy processor\nor\nlabel_replace(\n label_replace(\n label_replace(\n (sum(rate(otelcol_process_uptime{job=\"$job\"}[$__interval])))\n , \"id\", \"processor\", \"\", \"\"\n )\n , \"title\", \"Processor(s)\", \"\", \"\"\n )\n , \"icon\", \"arrow-random\", \"\", \"\"\n)\n\n# exporters\nor\nlabel_replace(\n label_join(\n label_join(\n sum(${metric:value}(\n otelcol_exporter_sent_log_records{exporter=~\"$exporter\",job=\"$job\"}[$__rate_interval])\n ) by (exporter)\n , \"id\", \"-exp-\", \"transport\", \"exporter\"\n )\n , \"title\", \"\", \"transport\", \"exporter\"\n )\n , \"icon\", \"arrow-from-right\", \"\", \"\"\n)",
+ "format": "table",
+ "hide": false,
+ "instant": true,
+ "legendFormat": "__auto",
+ "range": false,
+ "refId": "nodes"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "# receivers -> processor\r\nlabel_join(\r\n label_replace(\r\n label_join(\r\n (sum(rate(otelcol_receiver_accepted_log_records{job=\"$job\"}[$__interval])) by (receiver))\r\n , \"source\", \"-rcv-\", \"transport\", \"receiver\"\r\n )\r\n , \"target\", \"processor\", \"\", \"\"\r\n )\r\n , \"id\", \"-edg-\", \"source\", \"target\"\r\n)\r\n\r\n# processor -> exporters\r\nor \r\nlabel_join(\r\n label_replace(\r\n label_join(\r\n (sum(rate(otelcol_exporter_sent_log_records{job=\"$job\"}[$__interval])) by (exporter))\r\n ,\"target\",\"-exp-\",\"transport\",\"exporter\"\r\n )\r\n ,\"source\",\"processor\",\"\",\"\"\r\n )\r\n ,\"id\",\"-edg-\",\"source\",\"target\"\r\n)",
+ "format": "table",
+ "hide": false,
+ "instant": true,
+ "legendFormat": "__auto",
+ "range": false,
+ "refId": "edges"
+ }
+ ],
+ "title": "Log Records Flow",
+ "transformations": [
+ {
+ "id": "renameByRegex",
+ "options": {
+ "regex": "Value",
+ "renamePattern": "mainstat"
+ }
+ },
+ {
+ "disabled": true,
+ "id": "calculateField",
+ "options": {
+ "alias": "secondarystat",
+ "mode": "reduceRow",
+ "reduce": {
+ "include": [
+ "mainstat"
+ ],
+ "reducer": "sum"
+ }
+ }
+ }
+ ],
+ "type": "nodeGraph"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editable": true,
+ "error": false,
+ "gridPos": {
+ "h": 3,
+ "w": 24,
+ "x": 0,
+ "y": 79
+ },
+ "id": 45,
+ "links": [],
+ "options": {
+ "code": {
+ "language": "plaintext",
+ "showLineNumbers": false,
+ "showMiniMap": false
+ },
+ "content": " | \nOTEL collector troubleshooting (how to enable telemetry metrics) | \nScaling the Collector (metrics to watch) | \nInstalled from Grafana.com dashboards",
+ "mode": "html"
+ },
+ "pluginVersion": "10.0.3",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "refId": "A"
+ }
+ ],
+ "title": "Documentation",
+ "type": "text"
+ }
+ ],
+ "refresh": "10s",
+ "schemaVersion": 38,
+ "style": "dark",
+ "tags": [
+ "opentelemetry",
+ "monitoring"
+ ],
+ "templating": {
+ "list": [
+ {
+ "current": {},
+ "hide": 0,
+ "includeAll": false,
+ "label": "Datasource",
+ "multi": false,
+ "name": "datasource",
+ "options": [],
+ "query": "prometheus",
+ "queryValue": "",
+ "refresh": 1,
+ "regex": "",
+ "skipUrlSync": false,
+ "type": "datasource"
+ },
+ {
+ "current": {},
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "definition": "label_values(otelcol_process_uptime, job)",
+ "hide": 0,
+ "includeAll": false,
+ "label": "Job",
+ "multi": false,
+ "name": "job",
+ "options": [],
+ "query": {
+ "query": "label_values(otelcol_process_uptime, job)",
+ "refId": "StandardVariableQuery"
+ },
+ "refresh": 1,
+ "regex": "",
+ "skipUrlSync": false,
+ "sort": 1,
+ "type": "query"
+ },
+ {
+ "auto": true,
+ "auto_count": 300,
+ "auto_min": "10s",
+ "current": {
+ "selected": false,
+ "text": "auto",
+ "value": "$__auto_interval_minstep"
+ },
+ "hide": 0,
+ "label": "Min step",
+ "name": "minstep",
+ "options": [
+ {
+ "selected": true,
+ "text": "auto",
+ "value": "$__auto_interval_minstep"
+ },
+ {
+ "selected": false,
+ "text": "10s",
+ "value": "10s"
+ },
+ {
+ "selected": false,
+ "text": "30s",
+ "value": "30s"
+ },
+ {
+ "selected": false,
+ "text": "1m",
+ "value": "1m"
+ },
+ {
+ "selected": false,
+ "text": "5m",
+ "value": "5m"
+ }
+ ],
+ "query": "10s,30s,1m,5m",
+ "queryValue": "",
+ "refresh": 2,
+ "skipUrlSync": false,
+ "type": "interval"
+ },
+ {
+ "current": {
+ "selected": true,
+ "text": "Rate",
+ "value": "rate"
+ },
+ "hide": 0,
+ "includeAll": false,
+ "label": "Base metric",
+ "multi": false,
+ "name": "metric",
+ "options": [
+ {
+ "selected": true,
+ "text": "Rate",
+ "value": "rate"
+ },
+ {
+ "selected": false,
+ "text": "Count",
+ "value": "increase"
+ }
+ ],
+ "query": "Rate : rate, Count : increase",
+ "queryValue": "",
+ "skipUrlSync": false,
+ "type": "custom"
+ },
+ {
+ "allValue": ".*",
+ "current": {},
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "definition": "label_values(receiver)",
+ "hide": 0,
+ "includeAll": true,
+ "label": "Receiver",
+ "multi": false,
+ "name": "receiver",
+ "options": [],
+ "query": {
+ "query": "label_values(receiver)",
+ "refId": "StandardVariableQuery"
+ },
+ "refresh": 2,
+ "regex": "",
+ "skipUrlSync": false,
+ "sort": 1,
+ "tagValuesQuery": "",
+ "tagsQuery": "",
+ "type": "query",
+ "useTags": false
+ },
+ {
+ "current": {},
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "definition": "label_values(processor)",
+ "hide": 0,
+ "includeAll": true,
+ "label": "Processor",
+ "multi": false,
+ "name": "processor",
+ "options": [],
+ "query": {
+ "query": "label_values(processor)",
+ "refId": "StandardVariableQuery"
+ },
+ "refresh": 2,
+ "regex": "",
+ "skipUrlSync": false,
+ "sort": 1,
+ "tagValuesQuery": "",
+ "tagsQuery": "",
+ "type": "query",
+ "useTags": false
+ },
+ {
+ "allValue": ".*",
+ "current": {},
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "definition": "label_values(exporter)",
+ "hide": 0,
+ "includeAll": true,
+ "label": "Exporter",
+ "multi": false,
+ "name": "exporter",
+ "options": [],
+ "query": {
+ "query": "label_values(exporter)",
+ "refId": "StandardVariableQuery"
+ },
+ "refresh": 2,
+ "regex": "",
+ "skipUrlSync": false,
+ "sort": 1,
+ "tagValuesQuery": "",
+ "tagsQuery": "",
+ "type": "query",
+ "useTags": false
+ },
+ {
+ "current": {
+ "selected": true,
+ "text": "None (basic metrics)",
+ "value": ""
+ },
+ "description": "Detailed metrics must be configured in the collector configuration. They add grouping by transport protocol (http/grpc) for receivers. ",
+ "hide": 0,
+ "includeAll": false,
+ "label": "Additional groupping",
+ "multi": false,
+ "name": "grouping",
+ "options": [
+ {
+ "selected": true,
+ "text": "None (basic metrics)",
+ "value": ""
+ },
+ {
+ "selected": false,
+ "text": "By transport (detailed metrics)",
+ "value": ",transport"
+ },
+ {
+ "selected": false,
+ "text": "By service instance id",
+ "value": ",service_instance_id"
+ }
+ ],
+ "query": "None (basic metrics) : , By transport (detailed metrics) : \\,transport, By service instance id : \\,service_instance_id",
+ "queryValue": "",
+ "skipUrlSync": false,
+ "type": "custom"
+ }
+ ]
+ },
+ "time": {
+ "from": "now-6h",
+ "to": "now"
+ },
+ "timepicker": {
+ "refresh_intervals": [
+ "5s",
+ "10s",
+ "30s",
+ "1m",
+ "5m",
+ "15m",
+ "30m",
+ "1h",
+ "2h",
+ "1d"
+ ],
+ "time_options": [
+ "5m",
+ "15m",
+ "1h",
+ "6h",
+ "12h",
+ "24h",
+ "2d",
+ "7d",
+ "30d"
+ ]
+ },
+ "timezone": "utc",
+ "title": "OpenTelemetry Collector",
+ "uid": "BKf2sowmj",
+ "version": 72,
+ "weekStart": ""
+ }
+ spanmetrics-dashboard.json: |
+ {
+ "annotations": {
+ "list": [
+ {
+ "builtIn": 1,
+ "datasource": {
+ "type": "grafana",
+ "uid": "-- Grafana --"
+ },
+ "enable": true,
+ "hide": true,
+ "iconColor": "rgba(0, 211, 255, 1)",
+ "name": "Annotations & Alerts",
+ "target": {
+ "limit": 100,
+ "matchAny": false,
+ "tags": [],
+ "type": "dashboard"
+ },
+ "type": "dashboard"
+ }
+ ]
+ },
+ "description": "Spanmetrics way of demo application view.",
+ "author": {
+ "name": "devrimdemiroz"
+ },
+ "editable": true,
+ "fiscalYearStartMonth": 0,
+ "graphTooltip": 0,
+ "links": [],
+ "liveNow": false,
+ "panels": [
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 0
+ },
+ "id": 24,
+ "panels": [],
+ "title": "Service Level - Throughput and Latencies",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-BlYlRd"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "blue",
+ "value": null
+ },
+ {
+ "color": "green",
+ "value": 2
+ },
+ {
+ "color": "#EAB839",
+ "value": 64
+ },
+ {
+ "color": "orange",
+ "value": 128
+ },
+ {
+ "color": "red",
+ "value": 256
+ }
+ ]
+ },
+ "unit": "ms"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 20,
+ "w": 12,
+ "x": 0,
+ "y": 1
+ },
+ "id": 2,
+ "interval": "5m",
+ "options": {
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": true
+ },
+ "pluginVersion": "9.1.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "topk(7,histogram_quantile(0.50, sum(rate(duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name)))",
+ "format": "time_series",
+ "hide": true,
+ "instant": false,
+ "interval": "",
+ "legendFormat": "{{service_name}}-quantile_0.50",
+ "range": true,
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "topk(7,histogram_quantile(0.95, sum(rate(duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])) by (le,service_name)))",
+ "hide": false,
+ "instant": true,
+ "interval": "",
+ "legendFormat": "{{le}} - {{service_name}}",
+ "range": false,
+ "refId": "B"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "histogram_quantile(0.99, sum(rate(duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name))",
+ "hide": true,
+ "interval": "",
+ "legendFormat": "quantile99",
+ "range": true,
+ "refId": "C"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "histogram_quantile(0.999, sum(rate(duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name))",
+ "hide": true,
+ "interval": "",
+ "legendFormat": "quantile999",
+ "range": true,
+ "refId": "D"
+ }
+ ],
+ "title": "Top 3x3 - Service Latency - quantile95",
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-BlYlRd"
+ },
+ "decimals": 2,
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "super-light-blue",
+ "value": 1
+ },
+ {
+ "color": "#EAB839",
+ "value": 2
+ },
+ {
+ "color": "red",
+ "value": 10
+ }
+ ]
+ },
+ "unit": "reqps"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 13,
+ "w": 12,
+ "x": 12,
+ "y": 1
+ },
+ "id": 4,
+ "interval": "5m",
+ "options": {
+ "displayMode": "lcd",
+ "minVizHeight": 10,
+ "minVizWidth": 0,
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "mean"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true,
+ "text": {}
+ },
+ "pluginVersion": "9.1.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "topk(7,sum by (service_name) (rate(calls_total{service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])))",
+ "format": "time_series",
+ "instant": true,
+ "interval": "",
+ "legendFormat": "{{service_name}}",
+ "range": false,
+ "refId": "A"
+ }
+ ],
+ "title": "Top 7 Services Mean Rate over Range",
+ "transformations": [],
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-reds"
+ },
+ "decimals": 4,
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "#EAB839",
+ "value": 1
+ },
+ {
+ "color": "red",
+ "value": 15
+ }
+ ]
+ },
+ "unit": "reqps"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 12,
+ "y": 14
+ },
+ "id": 15,
+ "interval": "5m",
+ "options": {
+ "displayMode": "lcd",
+ "minVizHeight": 10,
+ "minVizWidth": 0,
+ "orientation": "vertical",
+ "reduceOptions": {
+ "calcs": [
+ "mean"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true,
+ "text": {}
+ },
+ "pluginVersion": "9.1.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "topk(7,sum(rate(calls_total{status_code=\"STATUS_CODE_ERROR\",service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])) by (service_name))",
+ "instant": true,
+ "interval": "",
+ "legendFormat": "{{service_name}}",
+ "range": false,
+ "refId": "A"
+ }
+ ],
+ "title": "Top 7 Services Mean ERROR Rate over Range",
+ "transformations": [],
+ "type": "bargauge"
+ },
+ {
+ "collapsed": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 21
+ },
+ "id": 14,
+ "panels": [],
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "refId": "A"
+ }
+ ],
+ "title": "span_names Level - Throughput",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "custom": {
+ "align": "auto",
+ "displayMode": "auto",
+ "inspect": false
+ },
+ "decimals": 2,
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "reqps"
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "bRate"
+ },
+ "properties": [
+ {
+ "id": "custom.displayMode",
+ "value": "lcd-gauge"
+ },
+ {
+ "id": "color",
+ "value": {
+ "mode": "continuous-BlYlRd"
+ }
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "eRate"
+ },
+ "properties": [
+ {
+ "id": "custom.displayMode",
+ "value": "lcd-gauge"
+ },
+ {
+ "id": "color",
+ "value": {
+ "mode": "continuous-RdYlGr"
+ }
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Error Rate"
+ },
+ "properties": [
+ {
+ "id": "custom.width",
+ "value": 663
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Rate"
+ },
+ "properties": [
+ {
+ "id": "custom.width",
+ "value": 667
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Service"
+ },
+ "properties": [
+ {
+ "id": "custom.width",
+ "value": null
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 11,
+ "w": 24,
+ "x": 0,
+ "y": 22
+ },
+ "id": 22,
+ "interval": "5m",
+ "options": {
+ "footer": {
+ "fields": "",
+ "reducer": [
+ "sum"
+ ],
+ "show": false
+ },
+ "showHeader": true,
+ "sortBy": []
+ },
+ "pluginVersion": "9.1.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "exemplar": false,
+ "expr": "topk(7, sum(rate(calls_total{service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])) by (span_name,service_name)) ",
+ "format": "table",
+ "instant": true,
+ "interval": "",
+ "legendFormat": "",
+ "refId": "Rate"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "exemplar": false,
+ "expr": "topk(7, sum(rate(calls_total{status_code=\"STATUS_CODE_ERROR\",service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])) by (span_name,service_name))",
+ "format": "table",
+ "hide": false,
+ "instant": true,
+ "interval": "",
+ "legendFormat": "",
+ "refId": "Error Rate"
+ }
+ ],
+ "title": "Top 7 span_names and Errors (APM Table)",
+ "transformations": [
+ {
+ "id": "seriesToColumns",
+ "options": {
+ "byField": "span_name"
+ }
+ },
+ {
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "Time 1": true,
+ "Time 2": true
+ },
+ "indexByName": {},
+ "renameByName": {
+ "Value #Error Rate": "Error Rate",
+ "Value #Rate": "Rate",
+ "service_name 1": "Rate in Service",
+ "service_name 2": "Error Rate in Service"
+ }
+ }
+ },
+ {
+ "id": "calculateField",
+ "options": {
+ "alias": "bRate",
+ "mode": "reduceRow",
+ "reduce": {
+ "include": [
+ "Rate"
+ ],
+ "reducer": "sum"
+ }
+ }
+ },
+ {
+ "id": "calculateField",
+ "options": {
+ "alias": "eRate",
+ "mode": "reduceRow",
+ "reduce": {
+ "include": [
+ "Error Rate"
+ ],
+ "reducer": "sum"
+ }
+ }
+ },
+ {
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "Error Rate": true,
+ "Rate": true,
+ "bRate": false
+ },
+ "indexByName": {
+ "Error Rate": 4,
+ "Error Rate in Service": 6,
+ "Rate": 1,
+ "Rate in Service": 5,
+ "bRate": 2,
+ "eRate": 3,
+ "span_name": 0
+ },
+ "renameByName": {
+ "Rate in Service": "Service",
+ "bRate": "Rate",
+ "eRate": "Error Rate",
+ "span_name": "span_name Name"
+ }
+ }
+ },
+ {
+ "id": "sortBy",
+ "options": {
+ "fields": {},
+ "sort": [
+ {
+ "desc": true,
+ "field": "Rate"
+ }
+ ]
+ }
+ }
+ ],
+ "type": "table"
+ },
+ {
+ "collapsed": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 33
+ },
+ "id": 20,
+ "panels": [],
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "refId": "A"
+ }
+ ],
+ "title": "span_name Level - Latencies",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-BlYlRd"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "blue",
+ "value": null
+ },
+ {
+ "color": "green",
+ "value": 2
+ },
+ {
+ "color": "#EAB839",
+ "value": 64
+ },
+ {
+ "color": "orange",
+ "value": 128
+ },
+ {
+ "color": "red",
+ "value": 256
+ }
+ ]
+ },
+ "unit": "ms"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 13,
+ "w": 12,
+ "x": 0,
+ "y": 34
+ },
+ "id": 25,
+ "interval": "5m",
+ "options": {
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": true
+ },
+ "pluginVersion": "9.1.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "topk(7,histogram_quantile(0.50, sum(rate(duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name)))",
+ "format": "time_series",
+ "hide": true,
+ "instant": false,
+ "interval": "",
+ "legendFormat": "{{service_name}}-quantile_0.50",
+ "range": true,
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "topk(7,histogram_quantile(0.95, sum(rate(duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])) by (le,span_name)))",
+ "hide": false,
+ "instant": true,
+ "interval": "",
+ "legendFormat": "{{span_name}}",
+ "range": false,
+ "refId": "B"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "histogram_quantile(0.99, sum(rate(duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name))",
+ "hide": true,
+ "interval": "",
+ "legendFormat": "quantile99",
+ "range": true,
+ "refId": "C"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "histogram_quantile(0.999, sum(rate(duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name))",
+ "hide": true,
+ "interval": "",
+ "legendFormat": "quantile999",
+ "range": true,
+ "refId": "D"
+ }
+ ],
+ "title": "Top 3x3 - span_name Latency - quantile95",
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-BlYlRd"
+ },
+ "decimals": 2,
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "ms"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 13,
+ "w": 12,
+ "x": 12,
+ "y": 34
+ },
+ "id": 10,
+ "interval": "5m",
+ "options": {
+ "displayMode": "lcd",
+ "minVizHeight": 10,
+ "minVizWidth": 0,
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "mean"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true
+ },
+ "pluginVersion": "9.1.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "topk(7, sum by (span_name,service_name)(increase(duration_milliseconds_sum{service_name=~\"${service}\", span_name=~\"$span_name\"}[5m]) / increase(duration_milliseconds_count{service_name=~\"${service}\",span_name=~\"$span_name\"}[5m\n])))",
+ "instant": true,
+ "interval": "",
+ "legendFormat": "{{span_name}} [{{service_name}}]",
+ "range": false,
+ "refId": "A"
+ }
+ ],
+ "title": "Top 7 Highest Endpoint Latencies Mean Over Range ",
+ "transformations": [],
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 15,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "smooth",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "ms"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 12,
+ "w": 24,
+ "x": 0,
+ "y": 47
+ },
+ "id": 16,
+ "interval": "5m",
+ "options": {
+ "legend": {
+ "calcs": [
+ "mean",
+ "logmin",
+ "max",
+ "delta"
+ ],
+ "displayMode": "table",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "8.4.7",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "topk(7,sum by (span_name,service_name)(increase(duration_milliseconds_sum{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval]) / increase(duration_milliseconds_count{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])))",
+ "instant": false,
+ "interval": "",
+ "legendFormat": "[{{service_name}}] {{span_name}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Top 7 Latencies Over Range ",
+ "type": "timeseries"
+ }
+ ],
+ "refresh": "5m",
+ "schemaVersion": 37,
+ "style": "dark",
+ "tags": [],
+ "templating": {
+ "list": [
+ {
+ "allValue": ".*",
+ "current": {
+ "selected": false,
+ "text": "All",
+ "value": "$__all"
+ },
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "definition": "query_result(count by (service_name)(count_over_time(calls_total[$__range])))",
+ "hide": 0,
+ "includeAll": true,
+ "multi": true,
+ "name": "service",
+ "options": [],
+ "query": {
+ "query": "query_result(count by (service_name)(count_over_time(calls_total[$__range])))",
+ "refId": "StandardVariableQuery"
+ },
+ "refresh": 2,
+ "regex": "/.*service_name=\"(.*)\".*/",
+ "skipUrlSync": false,
+ "sort": 1,
+ "type": "query"
+ },
+ {
+ "allValue": ".*",
+ "current": {
+ "selected": false,
+ "text": "All",
+ "value": "$__all"
+ },
+ "datasource": {
+ "type": "prometheus",
+ "uid": "webstore-metrics"
+ },
+ "definition": "query_result(sum ({__name__=~\".*calls_total\",service_name=~\"$service\"}) by (span_name))",
+ "hide": 0,
+ "includeAll": true,
+ "multi": true,
+ "name": "span_name",
+ "options": [],
+ "query": {
+ "query": "query_result(sum ({__name__=~\".*calls_total\",service_name=~\"$service\"}) by (span_name))",
+ "refId": "StandardVariableQuery"
+ },
+ "refresh": 2,
+ "regex": "/.*span_name=\"(.*)\".*/",
+ "skipUrlSync": false,
+ "sort": 0,
+ "type": "query"
+ }
+ ]
+ },
+ "time": {
+ "from": "now-1h",
+ "to": "now"
+ },
+ "timepicker": {},
+ "timezone": "",
+ "title": "Spanmetrics Demo Dashboard",
+ "uid": "W2gX2zHVk48",
+ "version": 1,
+ "weekStart": ""
+ }
+---
+# Source: opentelemetry-demo/charts/grafana/templates/clusterrole.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ labels:
+ app.kubernetes.io/name: grafana
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/version: "10.1.5"
+ name: opentelemetry-demo-grafana-clusterrole
+rules: []
+---
+# Source: opentelemetry-demo/charts/opentelemetry-collector/templates/clusterrole.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: opentelemetry-demo-otelcol
+ labels:
+ app.kubernetes.io/name: otelcol
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/version: "0.88.0"
+rules:
+ - apiGroups: [""]
+ resources: ["pods", "namespaces"]
+ verbs: ["get", "watch", "list"]
+ - apiGroups: ["apps"]
+ resources: ["replicasets"]
+ verbs: ["get", "list", "watch"]
+ - apiGroups: ["extensions"]
+ resources: ["replicasets"]
+ verbs: ["get", "list", "watch"]
+---
+# Source: opentelemetry-demo/charts/prometheus/templates/clusterrole.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ labels:
+ app.kubernetes.io/component: server
+ app.kubernetes.io/name: prometheus
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/version: v2.47.2
+ app.kubernetes.io/part-of: prometheus
+ name: opentelemetry-demo-prometheus-server
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ - nodes/proxy
+ - nodes/metrics
+ - services
+ - endpoints
+ - pods
+ - ingresses
+ - configmaps
+ verbs:
+ - get
+ - list
+ - watch
+ - apiGroups:
+ - "extensions"
+ - "networking.k8s.io"
+ resources:
+ - ingresses/status
+ - ingresses
+ verbs:
+ - get
+ - list
+ - watch
+ - apiGroups:
+ - "discovery.k8s.io"
+ resources:
+ - endpointslices
+ verbs:
+ - get
+ - list
+ - watch
+ - nonResourceURLs:
+ - "/metrics"
+ verbs:
+ - get
+---
+# Source: opentelemetry-demo/charts/grafana/templates/clusterrolebinding.yaml
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: opentelemetry-demo-grafana-clusterrolebinding
+ labels:
+ app.kubernetes.io/name: grafana
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/version: "10.1.5"
+subjects:
+ - kind: ServiceAccount
+ name: opentelemetry-demo-grafana
+ namespace: otel-demo
+roleRef:
+ kind: ClusterRole
+ name: opentelemetry-demo-grafana-clusterrole
+ apiGroup: rbac.authorization.k8s.io
+---
+# Source: opentelemetry-demo/charts/opentelemetry-collector/templates/clusterrolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: opentelemetry-demo-otelcol
+ labels:
+ app.kubernetes.io/name: otelcol
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/version: "0.88.0"
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: opentelemetry-demo-otelcol
+subjects:
+ - kind: ServiceAccount
+ name: opentelemetry-demo-otelcol
+ namespace: otel-demo
+---
+# Source: opentelemetry-demo/charts/prometheus/templates/clusterrolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ labels:
+ app.kubernetes.io/component: server
+ app.kubernetes.io/name: prometheus
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/version: v2.47.2
+ app.kubernetes.io/part-of: prometheus
+ name: opentelemetry-demo-prometheus-server
+subjects:
+ - kind: ServiceAccount
+ name: opentelemetry-demo-prometheus-server
+ namespace: otel-demo
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: opentelemetry-demo-prometheus-server
+---
+# Source: opentelemetry-demo/charts/grafana/templates/role.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ name: opentelemetry-demo-grafana
+ namespace: otel-demo
+ labels:
+ app.kubernetes.io/name: grafana
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/version: "10.1.5"
+rules: []
+---
+# Source: opentelemetry-demo/charts/grafana/templates/rolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: opentelemetry-demo-grafana
+ namespace: otel-demo
+ labels:
+ app.kubernetes.io/name: grafana
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/version: "10.1.5"
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: opentelemetry-demo-grafana
+subjects:
+ - kind: ServiceAccount
+ name: opentelemetry-demo-grafana
+ namespace: otel-demo
+---
+# Source: opentelemetry-demo/charts/grafana/templates/service.yaml
+apiVersion: v1
+kind: Service
+metadata:
+ name: opentelemetry-demo-grafana
+ namespace: otel-demo
+ labels:
+ app.kubernetes.io/name: grafana
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/version: "10.1.5"
+spec:
+ type: ClusterIP
+ ports:
+ - name: service
+ port: 80
+ protocol: TCP
+ targetPort: 3000
+ selector:
+ app.kubernetes.io/name: grafana
+ app.kubernetes.io/instance: opentelemetry-demo
+---
+# Source: opentelemetry-demo/charts/jaeger/templates/allinone-agent-svc.yaml
+apiVersion: v1
+kind: Service
+metadata:
+ name: opentelemetry-demo-jaeger-agent
+ labels:
+ app.kubernetes.io/name: jaeger
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/version: "1.51.0"
+ app.kubernetes.io/component: service-agent
+spec:
+ clusterIP: None
+ ports:
+ - name: zk-compact-trft
+ port: 5775
+ protocol: UDP
+ targetPort: 0
+ - name: config-rest
+ port: 5778
+ targetPort: 0
+ - name: jg-compact-trft
+ port: 6831
+ protocol: UDP
+ targetPort: 0
+ - name: jg-binary-trft
+ port: 6832
+ protocol: UDP
+ targetPort: 0
+ selector:
+ app.kubernetes.io/name: jaeger
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: all-in-one
+---
+# Source: opentelemetry-demo/charts/jaeger/templates/allinone-collector-svc.yaml
+apiVersion: v1
+kind: Service
+metadata:
+ name: opentelemetry-demo-jaeger-collector
+ labels:
+ app.kubernetes.io/name: jaeger
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/version: "1.51.0"
+ app.kubernetes.io/component: service-collector
+spec:
+ clusterIP: None
+ ports:
+ - name: http-zipkin
+ port: 9411
+ targetPort: 0
+ - name: grpc-http
+ port: 14250
+ targetPort: 0
+ - name: c-tchan-trft
+ port: 14267
+ targetPort: 0
+ - name: http-c-binary-trft
+ port: 14268
+ targetPort: 0
+ - name: otlp-grpc
+ port: 4317
+ targetPort: 0
+ - name: otlp-http
+ port: 4318
+ targetPort: 0
+ selector:
+ app.kubernetes.io/name: jaeger
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: all-in-one
+---
+# Source: opentelemetry-demo/charts/jaeger/templates/allinone-query-svc.yaml
+apiVersion: v1
+kind: Service
+metadata:
+ name: opentelemetry-demo-jaeger-query
+ labels:
+ app.kubernetes.io/name: jaeger
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/version: "1.51.0"
+ app.kubernetes.io/component: service-query
+spec:
+ clusterIP: None
+ ports:
+ - name: http-query
+ port: 16686
+ targetPort: 16686
+ - name: grpc-query
+ port: 16685
+ targetPort: 16685
+ selector:
+ app.kubernetes.io/name: jaeger
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: all-in-one
+---
+# Source: opentelemetry-demo/charts/prometheus/templates/service.yaml
+apiVersion: v1
+kind: Service
+metadata:
+ labels:
+ app.kubernetes.io/component: server
+ app.kubernetes.io/name: prometheus
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/version: v2.47.2
+ app.kubernetes.io/part-of: prometheus
+ name: opentelemetry-demo-prometheus-server
+ namespace: otel-demo
+spec:
+ ports:
+ - name: http
+ port: 9090
+ protocol: TCP
+ targetPort: 9090
+ selector:
+ app.kubernetes.io/component: server
+ app.kubernetes.io/name: prometheus
+ app.kubernetes.io/instance: opentelemetry-demo
+ sessionAffinity: None
+ type: "ClusterIP"
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: v1
+kind: Service
+metadata:
+ name: opentelemetry-demo-adservice
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-adservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: adservice
+ app.kubernetes.io/name: opentelemetry-demo-adservice
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ type: ClusterIP
+ ports:
+ - port: 8080
+ name: tcp-service
+ targetPort: 8080
+ selector:
+ opentelemetry.io/name: opentelemetry-demo-adservice
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: v1
+kind: Service
+metadata:
+ name: opentelemetry-demo-cartservice
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-cartservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: cartservice
+ app.kubernetes.io/name: opentelemetry-demo-cartservice
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ type: ClusterIP
+ ports:
+ - port: 8080
+ name: tcp-service
+ targetPort: 8080
+ selector:
+ opentelemetry.io/name: opentelemetry-demo-cartservice
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: v1
+kind: Service
+metadata:
+ name: opentelemetry-demo-checkoutservice
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-checkoutservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: checkoutservice
+ app.kubernetes.io/name: opentelemetry-demo-checkoutservice
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ type: ClusterIP
+ ports:
+ - port: 8080
+ name: tcp-service
+ targetPort: 8080
+ selector:
+ opentelemetry.io/name: opentelemetry-demo-checkoutservice
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: v1
+kind: Service
+metadata:
+ name: opentelemetry-demo-currencyservice
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-currencyservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: currencyservice
+ app.kubernetes.io/name: opentelemetry-demo-currencyservice
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ type: ClusterIP
+ ports:
+ - port: 8080
+ name: tcp-service
+ targetPort: 8080
+ selector:
+ opentelemetry.io/name: opentelemetry-demo-currencyservice
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: v1
+kind: Service
+metadata:
+ name: opentelemetry-demo-emailservice
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-emailservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: emailservice
+ app.kubernetes.io/name: opentelemetry-demo-emailservice
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ type: ClusterIP
+ ports:
+ - port: 8080
+ name: tcp-service
+ targetPort: 8080
+ selector:
+ opentelemetry.io/name: opentelemetry-demo-emailservice
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: v1
+kind: Service
+metadata:
+ name: opentelemetry-demo-featureflagservice
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-featureflagservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: featureflagservice
+ app.kubernetes.io/name: opentelemetry-demo-featureflagservice
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ type: ClusterIP
+ ports:
+ - port: 50053
+ name: grpc
+ targetPort: 50053
+ - port: 8081
+ name: http
+ targetPort: 8081
+ selector:
+ opentelemetry.io/name: opentelemetry-demo-featureflagservice
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: v1
+kind: Service
+metadata:
+ name: opentelemetry-demo-ffspostgres
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-ffspostgres
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: ffspostgres
+ app.kubernetes.io/name: opentelemetry-demo-ffspostgres
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ type: ClusterIP
+ ports:
+ - port: 5432
+ name: postgres
+ targetPort: 5432
+ selector:
+ opentelemetry.io/name: opentelemetry-demo-ffspostgres
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: v1
+kind: Service
+metadata:
+ name: opentelemetry-demo-frontend
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-frontend
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: frontend
+ app.kubernetes.io/name: opentelemetry-demo-frontend
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ type: ClusterIP
+ ports:
+ - port: 8080
+ name: tcp-service
+ targetPort: 8080
+ selector:
+ opentelemetry.io/name: opentelemetry-demo-frontend
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: v1
+kind: Service
+metadata:
+ name: opentelemetry-demo-frontendproxy
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-frontendproxy
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: frontendproxy
+ app.kubernetes.io/name: opentelemetry-demo-frontendproxy
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ type: ClusterIP
+ ports:
+ - port: 8080
+ name: tcp-service
+ targetPort: 8080
+ selector:
+ opentelemetry.io/name: opentelemetry-demo-frontendproxy
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: v1
+kind: Service
+metadata:
+ name: opentelemetry-demo-kafka
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-kafka
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: kafka
+ app.kubernetes.io/name: opentelemetry-demo-kafka
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ type: ClusterIP
+ ports:
+ - port: 9092
+ name: plaintext
+ targetPort: 9092
+ - port: 9093
+ name: controller
+ targetPort: 9093
+ selector:
+ opentelemetry.io/name: opentelemetry-demo-kafka
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: v1
+kind: Service
+metadata:
+ name: opentelemetry-demo-loadgenerator
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-loadgenerator
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: loadgenerator
+ app.kubernetes.io/name: opentelemetry-demo-loadgenerator
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ type: ClusterIP
+ ports:
+ - port: 8089
+ name: tcp-service
+ targetPort: 8089
+ selector:
+ opentelemetry.io/name: opentelemetry-demo-loadgenerator
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: v1
+kind: Service
+metadata:
+ name: opentelemetry-demo-paymentservice
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-paymentservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: paymentservice
+ app.kubernetes.io/name: opentelemetry-demo-paymentservice
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ type: ClusterIP
+ ports:
+ - port: 8080
+ name: tcp-service
+ targetPort: 8080
+ selector:
+ opentelemetry.io/name: opentelemetry-demo-paymentservice
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: v1
+kind: Service
+metadata:
+ name: opentelemetry-demo-productcatalogservice
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-productcatalogservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: productcatalogservice
+ app.kubernetes.io/name: opentelemetry-demo-productcatalogservice
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ type: ClusterIP
+ ports:
+ - port: 8080
+ name: tcp-service
+ targetPort: 8080
+ selector:
+ opentelemetry.io/name: opentelemetry-demo-productcatalogservice
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: v1
+kind: Service
+metadata:
+ name: opentelemetry-demo-quoteservice
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-quoteservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: quoteservice
+ app.kubernetes.io/name: opentelemetry-demo-quoteservice
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ type: ClusterIP
+ ports:
+ - port: 8080
+ name: tcp-service
+ targetPort: 8080
+ selector:
+ opentelemetry.io/name: opentelemetry-demo-quoteservice
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: v1
+kind: Service
+metadata:
+ name: opentelemetry-demo-recommendationservice
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-recommendationservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: recommendationservice
+ app.kubernetes.io/name: opentelemetry-demo-recommendationservice
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ type: ClusterIP
+ ports:
+ - port: 8080
+ name: tcp-service
+ targetPort: 8080
+ selector:
+ opentelemetry.io/name: opentelemetry-demo-recommendationservice
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: v1
+kind: Service
+metadata:
+ name: opentelemetry-demo-redis
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-redis
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: redis
+ app.kubernetes.io/name: opentelemetry-demo-redis
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ type: ClusterIP
+ ports:
+ - port: 6379
+ name: redis
+ targetPort: 6379
+ selector:
+ opentelemetry.io/name: opentelemetry-demo-redis
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: v1
+kind: Service
+metadata:
+ name: opentelemetry-demo-shippingservice
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-shippingservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: shippingservice
+ app.kubernetes.io/name: opentelemetry-demo-shippingservice
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ type: ClusterIP
+ ports:
+ - port: 8080
+ name: tcp-service
+ targetPort: 8080
+ selector:
+ opentelemetry.io/name: opentelemetry-demo-shippingservice
+---
+# Source: opentelemetry-demo/charts/grafana/templates/deployment.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: opentelemetry-demo-grafana
+ namespace: otel-demo
+ labels:
+ app.kubernetes.io/name: grafana
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/version: "10.1.5"
+spec:
+ replicas: 1
+ revisionHistoryLimit: 10
+ selector:
+ matchLabels:
+ app.kubernetes.io/name: grafana
+ app.kubernetes.io/instance: opentelemetry-demo
+ strategy:
+ type: RollingUpdate
+ template:
+ metadata:
+ labels:
+ app.kubernetes.io/name: grafana
+ app.kubernetes.io/instance: opentelemetry-demo
+ annotations:
+ checksum/config: 743ad05e1a852116d6bfeab2e3fbec57091448a15bc97c5b8d5c8ed5d89f9531
+ checksum/dashboards-json-config: 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b
+ checksum/sc-dashboard-provider-config: 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b
+ checksum/secret: f37dc127378b75e32576182571ac9b3826d217955ddda163afa1fde86c1cc056
+ kubectl.kubernetes.io/default-container: grafana
+ spec:
+ serviceAccountName: opentelemetry-demo-grafana
+ automountServiceAccountToken: true
+ securityContext:
+ fsGroup: 472
+ runAsGroup: 472
+ runAsNonRoot: true
+ runAsUser: 472
+ enableServiceLinks: true
+ containers:
+ - name: grafana
+ image: "docker.io/grafana/grafana:10.1.5"
+ imagePullPolicy: IfNotPresent
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop:
+ - ALL
+ seccompProfile:
+ type: RuntimeDefault
+ volumeMounts:
+ - name: config
+ mountPath: "/etc/grafana/grafana.ini"
+ subPath: grafana.ini
+ - name: storage
+ mountPath: "/var/lib/grafana"
+ - name: dashboards-default
+ mountPath: "/var/lib/grafana/dashboards/default"
+ - name: config
+ mountPath: "/etc/grafana/provisioning/datasources/datasources.yaml"
+ subPath: "datasources.yaml"
+ - name: config
+ mountPath: "/etc/grafana/provisioning/dashboards/dashboardproviders.yaml"
+ subPath: "dashboardproviders.yaml"
+ ports:
+ - name: grafana
+ containerPort: 3000
+ protocol: TCP
+ - name: gossip-tcp
+ containerPort: 9094
+ protocol: TCP
+ - name: gossip-udp
+ containerPort: 9094
+ protocol: UDP
+ env:
+ - name: POD_IP
+ valueFrom:
+ fieldRef:
+ fieldPath: status.podIP
+ - name: GF_SECURITY_ADMIN_USER
+ valueFrom:
+ secretKeyRef:
+ name: opentelemetry-demo-grafana
+ key: admin-user
+ - name: GF_SECURITY_ADMIN_PASSWORD
+ valueFrom:
+ secretKeyRef:
+ name: opentelemetry-demo-grafana
+ key: admin-password
+ - name: GF_PATHS_DATA
+ value: /var/lib/grafana/
+ - name: GF_PATHS_LOGS
+ value: /var/log/grafana
+ - name: GF_PATHS_PLUGINS
+ value: /var/lib/grafana/plugins
+ - name: GF_PATHS_PROVISIONING
+ value: /etc/grafana/provisioning
+ livenessProbe:
+ failureThreshold: 10
+ httpGet:
+ path: /api/health
+ port: 3000
+ initialDelaySeconds: 60
+ timeoutSeconds: 30
+ readinessProbe:
+ httpGet:
+ path: /api/health
+ port: 3000
+ resources:
+ limits:
+ memory: 150Mi
+ volumes:
+ - name: config
+ configMap:
+ name: opentelemetry-demo-grafana
+ - name: dashboards-default
+ configMap:
+ name: opentelemetry-demo-grafana-dashboards
+ - name: storage
+ emptyDir: {}
+---
+# Source: opentelemetry-demo/charts/jaeger/templates/allinone-deploy.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: opentelemetry-demo-jaeger
+ labels:
+ app.kubernetes.io/name: jaeger
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/version: "1.51.0"
+ app.kubernetes.io/component: all-in-one
+ prometheus.io/port: "14269"
+ prometheus.io/scrape: "true"
+spec:
+ replicas: 1
+ strategy:
+ type: Recreate
+ selector:
+ matchLabels:
+ app.kubernetes.io/name: jaeger
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: all-in-one
+ template:
+ metadata:
+ labels:
+ app.kubernetes.io/name: jaeger
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: all-in-one
+ annotations:
+ prometheus.io/port: "14269"
+ prometheus.io/scrape: "true"
+ spec:
+ containers:
+ - env:
+ - name: METRICS_STORAGE_TYPE
+ value: prometheus
+ - name: SPAN_STORAGE_TYPE
+ value: memory
+ - name: COLLECTOR_ZIPKIN_HOST_PORT
+ value: :9411
+ - name: JAEGER_DISABLED
+ value: "false"
+ - name: COLLECTOR_OTLP_ENABLED
+ value: "true"
+ image: jaegertracing/all-in-one:1.51.0
+ imagePullPolicy: IfNotPresent
+ name: jaeger
+ args:
+ - "--memory.max-traces=8000"
+ - "--query.base-path=/jaeger/ui"
+ - "--prometheus.server-url=http://opentelemetry-demo-prometheus-server:9090"
+ - "--prometheus.query.normalize-calls=true"
+ - "--prometheus.query.normalize-duration=true"
+ ports:
+ - containerPort: 5775
+ protocol: UDP
+ - containerPort: 6831
+ protocol: UDP
+ - containerPort: 6832
+ protocol: UDP
+ - containerPort: 5778
+ protocol: TCP
+ - containerPort: 16686
+ protocol: TCP
+ - containerPort: 16685
+ protocol: TCP
+ - containerPort: 9411
+ protocol: TCP
+ - containerPort: 4317
+ protocol: TCP
+ - containerPort: 4318
+ protocol: TCP
+ livenessProbe:
+ failureThreshold: 5
+ httpGet:
+ path: /
+ port: 14269
+ scheme: HTTP
+ initialDelaySeconds: 5
+ periodSeconds: 15
+ successThreshold: 1
+ timeoutSeconds: 1
+ readinessProbe:
+ failureThreshold: 3
+ httpGet:
+ path: /
+ port: 14269
+ scheme: HTTP
+ initialDelaySeconds: 1
+ periodSeconds: 10
+ successThreshold: 1
+ timeoutSeconds: 1
+ resources:
+ limits:
+ memory: 300Mi
+ volumeMounts:
+ serviceAccountName: opentelemetry-demo-jaeger
+ volumes:
+---
+# Source: opentelemetry-demo/charts/prometheus/templates/deploy.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ labels:
+ app.kubernetes.io/component: server
+ app.kubernetes.io/name: prometheus
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/version: v2.47.2
+ app.kubernetes.io/part-of: prometheus
+ name: opentelemetry-demo-prometheus-server
+ namespace: otel-demo
+spec:
+ selector:
+ matchLabels:
+ app.kubernetes.io/component: server
+ app.kubernetes.io/name: prometheus
+ app.kubernetes.io/instance: opentelemetry-demo
+ replicas: 1
+ revisionHistoryLimit: 10
+ strategy:
+ type: Recreate
+ rollingUpdate: null
+ template:
+ metadata:
+ labels:
+ app.kubernetes.io/component: server
+ app.kubernetes.io/name: prometheus
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/version: v2.47.2
+ app.kubernetes.io/part-of: prometheus
+ spec:
+ enableServiceLinks: true
+ serviceAccountName: opentelemetry-demo-prometheus-server
+ containers:
+ - name: prometheus-server
+ image: "quay.io/prometheus/prometheus:v2.47.2"
+ imagePullPolicy: "IfNotPresent"
+ args:
+ - --storage.tsdb.retention.time=15d
+ - --config.file=/etc/config/prometheus.yml
+ - --storage.tsdb.path=/data
+ - --web.console.libraries=/etc/prometheus/console_libraries
+ - --web.console.templates=/etc/prometheus/consoles
+ - --enable-feature=exemplar-storage
+ - --enable-feature=otlp-write-receiver
+ ports:
+ - containerPort: 9090
+ readinessProbe:
+ httpGet:
+ path: /-/ready
+ port: 9090
+ scheme: HTTP
+ initialDelaySeconds: 30
+ periodSeconds: 5
+ timeoutSeconds: 4
+ failureThreshold: 3
+ successThreshold: 1
+ livenessProbe:
+ httpGet:
+ path: /-/healthy
+ port: 9090
+ scheme: HTTP
+ initialDelaySeconds: 30
+ periodSeconds: 15
+ timeoutSeconds: 10
+ failureThreshold: 3
+ successThreshold: 1
+ resources:
+ limits:
+ memory: 300Mi
+ volumeMounts:
+ - name: config-volume
+ mountPath: /etc/config
+ - name: storage-volume
+ mountPath: /data
+ subPath: ""
+ dnsPolicy: ClusterFirst
+ securityContext:
+ fsGroup: 65534
+ runAsGroup: 65534
+ runAsNonRoot: true
+ runAsUser: 65534
+ terminationGracePeriodSeconds: 300
+ volumes:
+ - name: config-volume
+ configMap:
+ name: opentelemetry-demo-prometheus-server
+ - name: storage-volume
+ emptyDir: {}
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: opentelemetry-demo-accountingservice
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-accountingservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: accountingservice
+ app.kubernetes.io/name: opentelemetry-demo-accountingservice
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ opentelemetry.io/name: opentelemetry-demo-accountingservice
+ template:
+ metadata:
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-accountingservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: accountingservice
+ app.kubernetes.io/name: opentelemetry-demo-accountingservice
+ spec:
+ serviceAccountName: opentelemetry-demo
+ containers:
+ - name: accountingservice
+ image: 'ghcr.io/open-telemetry/demo:1.6.0-accountingservice'
+ imagePullPolicy: IfNotPresent
+ env:
+ - name: OTEL_SERVICE_NAME
+ valueFrom:
+ fieldRef:
+ apiVersion: v1
+ fieldPath: metadata.labels['app.kubernetes.io/component']
+ - name: NODE_IP
+ valueFrom:
+ fieldRef:
+ fieldPath: status.hostIP
+ - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
+ value: cumulative
+ - name: KAFKA_SERVICE_ADDR
+ value: 'opentelemetry-demo-kafka:9092'
+ - name: OTEL_EXPORTER_OTLP_ENDPOINT
+ value: http://$(NODE_IP):4317
+ - name: OTEL_RESOURCE_ATTRIBUTES
+ value: service.name=$(OTEL_SERVICE_NAME),service.namespace=opentelemetry-demo,deployment.environment=development
+ resources:
+ limits:
+ memory: 20Mi
+ initContainers:
+ - command:
+ - sh
+ - -c
+ - until nc -z -v -w30 opentelemetry-demo-kafka 9092; do echo waiting for kafka; sleep 2; done;
+ image: busybox:latest
+ name: wait-for-kafka
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: opentelemetry-demo-adservice
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-adservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: adservice
+ app.kubernetes.io/name: opentelemetry-demo-adservice
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ opentelemetry.io/name: opentelemetry-demo-adservice
+ template:
+ metadata:
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-adservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: adservice
+ app.kubernetes.io/name: opentelemetry-demo-adservice
+ spec:
+ serviceAccountName: opentelemetry-demo
+ containers:
+ - name: adservice
+ image: 'ghcr.io/open-telemetry/demo:1.6.0-adservice'
+ imagePullPolicy: IfNotPresent
+ ports:
+ - containerPort: 8080
+ name: service
+ env:
+ - name: OTEL_SERVICE_NAME
+ valueFrom:
+ fieldRef:
+ apiVersion: v1
+ fieldPath: metadata.labels['app.kubernetes.io/component']
+ - name: NODE_IP
+ valueFrom:
+ fieldRef:
+ fieldPath: status.hostIP
+ - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
+ value: cumulative
+ - name: AD_SERVICE_PORT
+ value: "8080"
+ - name: FEATURE_FLAG_GRPC_SERVICE_ADDR
+ value: 'opentelemetry-demo-featureflagservice:50053'
+ - name: OTEL_EXPORTER_OTLP_ENDPOINT
+ value: http://$(NODE_IP):4317
+ - name: OTEL_LOGS_EXPORTER
+ value: otlp
+ - name: OTEL_RESOURCE_ATTRIBUTES
+ value: service.name=$(OTEL_SERVICE_NAME),service.namespace=opentelemetry-demo,deployment.environment=development
+ resources:
+ limits:
+ memory: 300Mi
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: opentelemetry-demo-cartservice
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-cartservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: cartservice
+ app.kubernetes.io/name: opentelemetry-demo-cartservice
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ opentelemetry.io/name: opentelemetry-demo-cartservice
+ template:
+ metadata:
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-cartservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: cartservice
+ app.kubernetes.io/name: opentelemetry-demo-cartservice
+ spec:
+ serviceAccountName: opentelemetry-demo
+ containers:
+ - name: cartservice
+ image: 'ghcr.io/open-telemetry/demo:1.6.0-cartservice'
+ imagePullPolicy: IfNotPresent
+ ports:
+ - containerPort: 8080
+ name: service
+ env:
+ - name: OTEL_SERVICE_NAME
+ valueFrom:
+ fieldRef:
+ apiVersion: v1
+ fieldPath: metadata.labels['app.kubernetes.io/component']
+ - name: NODE_IP
+ valueFrom:
+ fieldRef:
+ fieldPath: status.hostIP
+ - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
+ value: cumulative
+ - name: CART_SERVICE_PORT
+ value: "8080"
+ - name: ASPNETCORE_URLS
+ value: http://*:$(CART_SERVICE_PORT)
+ - name: FEATURE_FLAG_GRPC_SERVICE_ADDR
+ value: 'opentelemetry-demo-featureflagservice:50053'
+ - name: REDIS_ADDR
+ value: 'opentelemetry-demo-redis:6379'
+ - name: OTEL_EXPORTER_OTLP_ENDPOINT
+ value: http://$(NODE_IP):4317
+ - name: OTEL_RESOURCE_ATTRIBUTES
+ value: service.name=$(OTEL_SERVICE_NAME),service.namespace=opentelemetry-demo,deployment.environment=development
+ resources:
+ limits:
+ memory: 160Mi
+ initContainers:
+ - command:
+ - sh
+ - -c
+ - until nc -z -v -w30 opentelemetry-demo-redis 6379; do echo waiting for redis; sleep 2; done;
+ image: busybox:latest
+ name: wait-for-redis
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: opentelemetry-demo-checkoutservice
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-checkoutservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: checkoutservice
+ app.kubernetes.io/name: opentelemetry-demo-checkoutservice
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ opentelemetry.io/name: opentelemetry-demo-checkoutservice
+ template:
+ metadata:
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-checkoutservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: checkoutservice
+ app.kubernetes.io/name: opentelemetry-demo-checkoutservice
+ spec:
+ serviceAccountName: opentelemetry-demo
+ containers:
+ - name: checkoutservice
+ image: 'ghcr.io/open-telemetry/demo:1.6.0-checkoutservice'
+ imagePullPolicy: IfNotPresent
+ ports:
+ - containerPort: 8080
+ name: service
+ env:
+ - name: OTEL_SERVICE_NAME
+ valueFrom:
+ fieldRef:
+ apiVersion: v1
+ fieldPath: metadata.labels['app.kubernetes.io/component']
+ - name: NODE_IP
+ valueFrom:
+ fieldRef:
+ fieldPath: status.hostIP
+ - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
+ value: cumulative
+ - name: CHECKOUT_SERVICE_PORT
+ value: "8080"
+ - name: CART_SERVICE_ADDR
+ value: 'opentelemetry-demo-cartservice:8080'
+ - name: CURRENCY_SERVICE_ADDR
+ value: 'opentelemetry-demo-currencyservice:8080'
+ - name: EMAIL_SERVICE_ADDR
+ value: http://opentelemetry-demo-emailservice:8080
+ - name: PAYMENT_SERVICE_ADDR
+ value: 'opentelemetry-demo-paymentservice:8080'
+ - name: PRODUCT_CATALOG_SERVICE_ADDR
+ value: 'opentelemetry-demo-productcatalogservice:8080'
+ - name: SHIPPING_SERVICE_ADDR
+ value: 'opentelemetry-demo-shippingservice:8080'
+ - name: KAFKA_SERVICE_ADDR
+ value: 'opentelemetry-demo-kafka:9092'
+ - name: OTEL_EXPORTER_OTLP_ENDPOINT
+ value: http://$(NODE_IP):4317
+ - name: OTEL_RESOURCE_ATTRIBUTES
+ value: service.name=$(OTEL_SERVICE_NAME),service.namespace=opentelemetry-demo,deployment.environment=development
+ resources:
+ limits:
+ memory: 20Mi
+ initContainers:
+ - command:
+ - sh
+ - -c
+ - until nc -z -v -w30 opentelemetry-demo-kafka 9092; do echo waiting for kafka; sleep 2; done;
+ image: busybox:latest
+ name: wait-for-kafka
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: opentelemetry-demo-currencyservice
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-currencyservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: currencyservice
+ app.kubernetes.io/name: opentelemetry-demo-currencyservice
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ opentelemetry.io/name: opentelemetry-demo-currencyservice
+ template:
+ metadata:
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-currencyservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: currencyservice
+ app.kubernetes.io/name: opentelemetry-demo-currencyservice
+ spec:
+ serviceAccountName: opentelemetry-demo
+ containers:
+ - name: currencyservice
+ image: 'ghcr.io/open-telemetry/demo:1.6.0-currencyservice'
+ imagePullPolicy: IfNotPresent
+ ports:
+ - containerPort: 8080
+ name: service
+ env:
+ - name: OTEL_SERVICE_NAME
+ valueFrom:
+ fieldRef:
+ apiVersion: v1
+ fieldPath: metadata.labels['app.kubernetes.io/component']
+ - name: NODE_IP
+ valueFrom:
+ fieldRef:
+ fieldPath: status.hostIP
+ - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
+ value: cumulative
+ - name: CURRENCY_SERVICE_PORT
+ value: "8080"
+ - name: OTEL_EXPORTER_OTLP_ENDPOINT
+ value: http://$(NODE_IP):4317
+ - name: OTEL_RESOURCE_ATTRIBUTES
+ value: service.name=$(OTEL_SERVICE_NAME),service.namespace=opentelemetry-demo,deployment.environment=development
+ resources:
+ limits:
+ memory: 20Mi
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: opentelemetry-demo-emailservice
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-emailservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: emailservice
+ app.kubernetes.io/name: opentelemetry-demo-emailservice
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ opentelemetry.io/name: opentelemetry-demo-emailservice
+ template:
+ metadata:
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-emailservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: emailservice
+ app.kubernetes.io/name: opentelemetry-demo-emailservice
+ spec:
+ serviceAccountName: opentelemetry-demo
+ containers:
+ - name: emailservice
+ image: 'ghcr.io/open-telemetry/demo:1.6.0-emailservice'
+ imagePullPolicy: IfNotPresent
+ ports:
+ - containerPort: 8080
+ name: service
+ env:
+ - name: OTEL_SERVICE_NAME
+ valueFrom:
+ fieldRef:
+ apiVersion: v1
+ fieldPath: metadata.labels['app.kubernetes.io/component']
+ - name: NODE_IP
+ valueFrom:
+ fieldRef:
+ fieldPath: status.hostIP
+ - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
+ value: cumulative
+ - name: EMAIL_SERVICE_PORT
+ value: "8080"
+ - name: APP_ENV
+ value: production
+ - name: OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
+ value: http://$(NODE_IP):4318/v1/traces
+ - name: OTEL_RESOURCE_ATTRIBUTES
+ value: service.name=$(OTEL_SERVICE_NAME),service.namespace=opentelemetry-demo,deployment.environment=development
+ resources:
+ limits:
+ memory: 100Mi
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: opentelemetry-demo-featureflagservice
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-featureflagservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: featureflagservice
+ app.kubernetes.io/name: opentelemetry-demo-featureflagservice
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ opentelemetry.io/name: opentelemetry-demo-featureflagservice
+ template:
+ metadata:
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-featureflagservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: featureflagservice
+ app.kubernetes.io/name: opentelemetry-demo-featureflagservice
+ spec:
+ serviceAccountName: opentelemetry-demo
+ containers:
+ - name: featureflagservice
+ image: 'ghcr.io/open-telemetry/demo:1.6.0-featureflagservice'
+ imagePullPolicy: IfNotPresent
+ ports:
+ - containerPort: 50053
+ name: grpc
+ - containerPort: 8081
+ name: http
+ env:
+ - name: OTEL_SERVICE_NAME
+ valueFrom:
+ fieldRef:
+ apiVersion: v1
+ fieldPath: metadata.labels['app.kubernetes.io/component']
+ - name: NODE_IP
+ valueFrom:
+ fieldRef:
+ fieldPath: status.hostIP
+ - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
+ value: cumulative
+ - name: FEATURE_FLAG_SERVICE_PORT
+ value: "8081"
+ - name: FEATURE_FLAG_GRPC_SERVICE_PORT
+ value: "50053"
+ - name: DATABASE_URL
+ value: ecto://ffs:ffs@opentelemetry-demo-ffspostgres:5432/ffs
+ - name: OTEL_EXPORTER_OTLP_ENDPOINT
+ value: http://$(NODE_IP):4317
+ - name: OTEL_EXPORTER_OTLP_TRACES_PROTOCOL
+ value: grpc
+ - name: OTEL_RESOURCE_ATTRIBUTES
+ value: service.name=$(OTEL_SERVICE_NAME),service.namespace=opentelemetry-demo,deployment.environment=development
+ resources:
+ limits:
+ memory: 175Mi
+ livenessProbe:
+ httpGet:
+ path: /featureflags/
+ port: 8081
+ initialDelaySeconds: 30
+ periodSeconds: 10
+ initContainers:
+ - command:
+ - sh
+ - -c
+ - until nc -z -v -w30 opentelemetry-demo-ffspostgres 5432; do echo waiting for ffspostgres; sleep 2; done
+ image: busybox:latest
+ name: wait-for-ffspostgres
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: opentelemetry-demo-ffspostgres
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-ffspostgres
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: ffspostgres
+ app.kubernetes.io/name: opentelemetry-demo-ffspostgres
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ opentelemetry.io/name: opentelemetry-demo-ffspostgres
+ template:
+ metadata:
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-ffspostgres
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: ffspostgres
+ app.kubernetes.io/name: opentelemetry-demo-ffspostgres
+ spec:
+ serviceAccountName: opentelemetry-demo
+ containers:
+ - name: ffspostgres
+ image: 'postgres:14'
+ imagePullPolicy: IfNotPresent
+ ports:
+ - containerPort: 5432
+ name: postgres
+ env:
+ - name: OTEL_SERVICE_NAME
+ valueFrom:
+ fieldRef:
+ apiVersion: v1
+ fieldPath: metadata.labels['app.kubernetes.io/component']
+ - name: NODE_IP
+ valueFrom:
+ fieldRef:
+ fieldPath: status.hostIP
+ - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
+ value: cumulative
+ - name: POSTGRES_DB
+ value: ffs
+ - name: POSTGRES_USER
+ value: ffs
+ - name: POSTGRES_PASSWORD
+ value: ffs
+ - name: OTEL_RESOURCE_ATTRIBUTES
+ value: service.name=$(OTEL_SERVICE_NAME),service.namespace=opentelemetry-demo,deployment.environment=development
+ resources:
+ limits:
+ memory: 120Mi
+ securityContext:
+ runAsGroup: 999
+ runAsNonRoot: true
+ runAsUser: 999
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: opentelemetry-demo-frauddetectionservice
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-frauddetectionservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: frauddetectionservice
+ app.kubernetes.io/name: opentelemetry-demo-frauddetectionservice
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ opentelemetry.io/name: opentelemetry-demo-frauddetectionservice
+ template:
+ metadata:
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-frauddetectionservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: frauddetectionservice
+ app.kubernetes.io/name: opentelemetry-demo-frauddetectionservice
+ spec:
+ serviceAccountName: opentelemetry-demo
+ containers:
+ - name: frauddetectionservice
+ image: 'ghcr.io/open-telemetry/demo:1.6.0-frauddetectionservice'
+ imagePullPolicy: IfNotPresent
+ env:
+ - name: OTEL_SERVICE_NAME
+ valueFrom:
+ fieldRef:
+ apiVersion: v1
+ fieldPath: metadata.labels['app.kubernetes.io/component']
+ - name: NODE_IP
+ valueFrom:
+ fieldRef:
+ fieldPath: status.hostIP
+ - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
+ value: cumulative
+ - name: KAFKA_SERVICE_ADDR
+ value: 'opentelemetry-demo-kafka:9092'
+ - name: OTEL_EXPORTER_OTLP_ENDPOINT
+ value: http://$(NODE_IP):4317
+ - name: OTEL_RESOURCE_ATTRIBUTES
+ value: service.name=$(OTEL_SERVICE_NAME),service.namespace=opentelemetry-demo,deployment.environment=development
+ resources:
+ limits:
+ memory: 200Mi
+ initContainers:
+ - command:
+ - sh
+ - -c
+ - until nc -z -v -w30 opentelemetry-demo-kafka 9092; do echo waiting for kafka; sleep 2; done;
+ image: busybox:latest
+ name: wait-for-kafka
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: opentelemetry-demo-frontend
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-frontend
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: frontend
+ app.kubernetes.io/name: opentelemetry-demo-frontend
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ opentelemetry.io/name: opentelemetry-demo-frontend
+ template:
+ metadata:
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-frontend
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: frontend
+ app.kubernetes.io/name: opentelemetry-demo-frontend
+ spec:
+ serviceAccountName: opentelemetry-demo
+ containers:
+ - name: frontend
+ image: 'ghcr.io/open-telemetry/demo:1.6.0-frontend'
+ imagePullPolicy: IfNotPresent
+ ports:
+ - containerPort: 8080
+ name: service
+ env:
+ - name: OTEL_SERVICE_NAME
+ valueFrom:
+ fieldRef:
+ apiVersion: v1
+ fieldPath: metadata.labels['app.kubernetes.io/component']
+ - name: NODE_IP
+ valueFrom:
+ fieldRef:
+ fieldPath: status.hostIP
+ - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
+ value: cumulative
+ - name: FRONTEND_PORT
+ value: "8080"
+ - name: FRONTEND_ADDR
+ value: :8080
+ - name: AD_SERVICE_ADDR
+ value: 'opentelemetry-demo-adservice:8080'
+ - name: CART_SERVICE_ADDR
+ value: 'opentelemetry-demo-cartservice:8080'
+ - name: CHECKOUT_SERVICE_ADDR
+ value: 'opentelemetry-demo-checkoutservice:8080'
+ - name: CURRENCY_SERVICE_ADDR
+ value: 'opentelemetry-demo-currencyservice:8080'
+ - name: PRODUCT_CATALOG_SERVICE_ADDR
+ value: 'opentelemetry-demo-productcatalogservice:8080'
+ - name: RECOMMENDATION_SERVICE_ADDR
+ value: 'opentelemetry-demo-recommendationservice:8080'
+ - name: SHIPPING_SERVICE_ADDR
+ value: 'opentelemetry-demo-shippingservice:8080'
+ - name: OTEL_EXPORTER_OTLP_ENDPOINT
+ value: http://$(NODE_IP):4317
+ - name: WEB_OTEL_SERVICE_NAME
+ value: frontend-web
+ - name: PUBLIC_OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
+ value: http://localhost:8080/otlp-http/v1/traces
+ - name: OTEL_RESOURCE_ATTRIBUTES
+ value: service.name=$(OTEL_SERVICE_NAME),service.namespace=opentelemetry-demo,deployment.environment=development
+ resources:
+ limits:
+ memory: 200Mi
+ securityContext:
+ runAsGroup: 1001
+ runAsNonRoot: true
+ runAsUser: 1001
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: opentelemetry-demo-frontendproxy
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-frontendproxy
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: frontendproxy
+ app.kubernetes.io/name: opentelemetry-demo-frontendproxy
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ opentelemetry.io/name: opentelemetry-demo-frontendproxy
+ template:
+ metadata:
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-frontendproxy
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: frontendproxy
+ app.kubernetes.io/name: opentelemetry-demo-frontendproxy
+ spec:
+ serviceAccountName: opentelemetry-demo
+ containers:
+ - name: frontendproxy
+ image: 'ghcr.io/open-telemetry/demo:1.6.0-frontendproxy'
+ imagePullPolicy: IfNotPresent
+ ports:
+ - containerPort: 8080
+ name: service
+ env:
+ - name: OTEL_SERVICE_NAME
+ valueFrom:
+ fieldRef:
+ apiVersion: v1
+ fieldPath: metadata.labels['app.kubernetes.io/component']
+ - name: NODE_IP
+ valueFrom:
+ fieldRef:
+ fieldPath: status.hostIP
+ - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
+ value: cumulative
+ - name: ENVOY_PORT
+ value: "8080"
+ - name: FRONTEND_PORT
+ value: "8080"
+ - name: FRONTEND_HOST
+ value: 'opentelemetry-demo-frontend'
+ - name: FEATURE_FLAG_SERVICE_PORT
+ value: "8081"
+ - name: FEATURE_FLAG_SERVICE_HOST
+ value: 'opentelemetry-demo-featureflagservice'
+ - name: LOCUST_WEB_PORT
+ value: "8089"
+ - name: LOCUST_WEB_HOST
+ value: 'opentelemetry-demo-loadgenerator'
+ - name: GRAFANA_SERVICE_PORT
+ value: "80"
+ - name: GRAFANA_SERVICE_HOST
+ value: 'opentelemetry-demo-grafana'
+ - name: JAEGER_SERVICE_PORT
+ value: "16686"
+ - name: JAEGER_SERVICE_HOST
+ value: 'opentelemetry-demo-jaeger-query'
+ - name: OTEL_COLLECTOR_PORT_GRPC
+ value: "4317"
+ - name: OTEL_COLLECTOR_PORT_HTTP
+ value: "4318"
+ - name: OTEL_COLLECTOR_HOST
+ value: $(NODE_IP)
+ - name: OTEL_RESOURCE_ATTRIBUTES
+ value: service.name=$(OTEL_SERVICE_NAME),service.namespace=opentelemetry-demo,deployment.environment=development
+ resources:
+ limits:
+ memory: 50Mi
+ securityContext:
+ runAsGroup: 101
+ runAsNonRoot: true
+ runAsUser: 101
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: opentelemetry-demo-kafka
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-kafka
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: kafka
+ app.kubernetes.io/name: opentelemetry-demo-kafka
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ opentelemetry.io/name: opentelemetry-demo-kafka
+ template:
+ metadata:
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-kafka
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: kafka
+ app.kubernetes.io/name: opentelemetry-demo-kafka
+ spec:
+ serviceAccountName: opentelemetry-demo
+ containers:
+ - name: kafka
+ image: 'ghcr.io/open-telemetry/demo:1.6.0-kafka'
+ imagePullPolicy: IfNotPresent
+ ports:
+ - containerPort: 9092
+ name: plaintext
+ - containerPort: 9093
+ name: controller
+ env:
+ - name: OTEL_SERVICE_NAME
+ valueFrom:
+ fieldRef:
+ apiVersion: v1
+ fieldPath: metadata.labels['app.kubernetes.io/component']
+ - name: NODE_IP
+ valueFrom:
+ fieldRef:
+ fieldPath: status.hostIP
+ - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
+ value: cumulative
+ - name: KAFKA_ADVERTISED_LISTENERS
+ value: PLAINTEXT://opentelemetry-demo-kafka:9092
+ - name: OTEL_EXPORTER_OTLP_ENDPOINT
+ value: http://$(NODE_IP):4317
+ - name: KAFKA_HEAP_OPTS
+ value: -Xmx200M -Xms200M
+ - name: OTEL_RESOURCE_ATTRIBUTES
+ value: service.name=$(OTEL_SERVICE_NAME),service.namespace=opentelemetry-demo,deployment.environment=development
+ resources:
+ limits:
+ memory: 500Mi
+ securityContext:
+ runAsGroup: 1000
+ runAsNonRoot: true
+ runAsUser: 1000
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: opentelemetry-demo-loadgenerator
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-loadgenerator
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: loadgenerator
+ app.kubernetes.io/name: opentelemetry-demo-loadgenerator
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ opentelemetry.io/name: opentelemetry-demo-loadgenerator
+ template:
+ metadata:
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-loadgenerator
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: loadgenerator
+ app.kubernetes.io/name: opentelemetry-demo-loadgenerator
+ spec:
+ serviceAccountName: opentelemetry-demo
+ containers:
+ - name: loadgenerator
+ image: 'ghcr.io/open-telemetry/demo:1.6.0-loadgenerator'
+ imagePullPolicy: IfNotPresent
+ ports:
+ - containerPort: 8089
+ name: service
+ env:
+ - name: OTEL_SERVICE_NAME
+ valueFrom:
+ fieldRef:
+ apiVersion: v1
+ fieldPath: metadata.labels['app.kubernetes.io/component']
+ - name: NODE_IP
+ valueFrom:
+ fieldRef:
+ fieldPath: status.hostIP
+ - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
+ value: cumulative
+ - name: LOCUST_WEB_PORT
+ value: "8089"
+ - name: LOCUST_USERS
+ value: "10"
+ - name: LOCUST_SPAWN_RATE
+ value: "1"
+ - name: LOCUST_HOST
+ value: http://opentelemetry-demo-frontendproxy:8080
+ - name: LOCUST_HEADLESS
+ value: "false"
+ - name: LOCUST_AUTOSTART
+ value: "true"
+ - name: PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION
+ value: python
+ - name: OTEL_EXPORTER_OTLP_ENDPOINT
+ value: http://$(NODE_IP):4317
+ - name: OTEL_RESOURCE_ATTRIBUTES
+ value: service.name=$(OTEL_SERVICE_NAME),service.namespace=opentelemetry-demo,deployment.environment=development
+ resources:
+ limits:
+ memory: 120Mi
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: opentelemetry-demo-paymentservice
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-paymentservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: paymentservice
+ app.kubernetes.io/name: opentelemetry-demo-paymentservice
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ opentelemetry.io/name: opentelemetry-demo-paymentservice
+ template:
+ metadata:
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-paymentservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: paymentservice
+ app.kubernetes.io/name: opentelemetry-demo-paymentservice
+ spec:
+ serviceAccountName: opentelemetry-demo
+ containers:
+ - name: paymentservice
+ image: 'ghcr.io/open-telemetry/demo:1.6.0-paymentservice'
+ imagePullPolicy: IfNotPresent
+ ports:
+ - containerPort: 8080
+ name: service
+ env:
+ - name: OTEL_SERVICE_NAME
+ valueFrom:
+ fieldRef:
+ apiVersion: v1
+ fieldPath: metadata.labels['app.kubernetes.io/component']
+ - name: NODE_IP
+ valueFrom:
+ fieldRef:
+ fieldPath: status.hostIP
+ - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
+ value: cumulative
+ - name: PAYMENT_SERVICE_PORT
+ value: "8080"
+ - name: OTEL_EXPORTER_OTLP_ENDPOINT
+ value: http://$(NODE_IP):4317
+ - name: OTEL_RESOURCE_ATTRIBUTES
+ value: service.name=$(OTEL_SERVICE_NAME),service.namespace=opentelemetry-demo,deployment.environment=development
+ resources:
+ limits:
+ memory: 120Mi
+ securityContext:
+ runAsGroup: 1000
+ runAsNonRoot: true
+ runAsUser: 1000
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: opentelemetry-demo-productcatalogservice
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-productcatalogservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: productcatalogservice
+ app.kubernetes.io/name: opentelemetry-demo-productcatalogservice
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ opentelemetry.io/name: opentelemetry-demo-productcatalogservice
+ template:
+ metadata:
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-productcatalogservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: productcatalogservice
+ app.kubernetes.io/name: opentelemetry-demo-productcatalogservice
+ spec:
+ serviceAccountName: opentelemetry-demo
+ containers:
+ - name: productcatalogservice
+ image: 'ghcr.io/open-telemetry/demo:1.6.0-productcatalogservice'
+ imagePullPolicy: IfNotPresent
+ ports:
+ - containerPort: 8080
+ name: service
+ env:
+ - name: OTEL_SERVICE_NAME
+ valueFrom:
+ fieldRef:
+ apiVersion: v1
+ fieldPath: metadata.labels['app.kubernetes.io/component']
+ - name: NODE_IP
+ valueFrom:
+ fieldRef:
+ fieldPath: status.hostIP
+ - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
+ value: cumulative
+ - name: PRODUCT_CATALOG_SERVICE_PORT
+ value: "8080"
+ - name: FEATURE_FLAG_GRPC_SERVICE_ADDR
+ value: 'opentelemetry-demo-featureflagservice:50053'
+ - name: OTEL_EXPORTER_OTLP_ENDPOINT
+ value: http://$(NODE_IP):4317
+ - name: OTEL_RESOURCE_ATTRIBUTES
+ value: service.name=$(OTEL_SERVICE_NAME),service.namespace=opentelemetry-demo,deployment.environment=development
+ resources:
+ limits:
+ memory: 20Mi
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: opentelemetry-demo-quoteservice
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-quoteservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: quoteservice
+ app.kubernetes.io/name: opentelemetry-demo-quoteservice
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ opentelemetry.io/name: opentelemetry-demo-quoteservice
+ template:
+ metadata:
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-quoteservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: quoteservice
+ app.kubernetes.io/name: opentelemetry-demo-quoteservice
+ spec:
+ serviceAccountName: opentelemetry-demo
+ containers:
+ - name: quoteservice
+ image: 'ghcr.io/open-telemetry/demo:1.6.0-quoteservice'
+ imagePullPolicy: IfNotPresent
+ ports:
+ - containerPort: 8080
+ name: service
+ env:
+ - name: OTEL_SERVICE_NAME
+ valueFrom:
+ fieldRef:
+ apiVersion: v1
+ fieldPath: metadata.labels['app.kubernetes.io/component']
+ - name: NODE_IP
+ valueFrom:
+ fieldRef:
+ fieldPath: status.hostIP
+ - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
+ value: cumulative
+ - name: QUOTE_SERVICE_PORT
+ value: "8080"
+ - name: OTEL_PHP_AUTOLOAD_ENABLED
+ value: "true"
+ - name: OTEL_EXPORTER_OTLP_ENDPOINT
+ value: http://$(NODE_IP):4318
+ - name: OTEL_RESOURCE_ATTRIBUTES
+ value: service.name=$(OTEL_SERVICE_NAME),service.namespace=opentelemetry-demo,deployment.environment=development
+ resources:
+ limits:
+ memory: 40Mi
+ securityContext:
+ runAsGroup: 33
+ runAsNonRoot: true
+ runAsUser: 33
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: opentelemetry-demo-recommendationservice
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-recommendationservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: recommendationservice
+ app.kubernetes.io/name: opentelemetry-demo-recommendationservice
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ opentelemetry.io/name: opentelemetry-demo-recommendationservice
+ template:
+ metadata:
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-recommendationservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: recommendationservice
+ app.kubernetes.io/name: opentelemetry-demo-recommendationservice
+ spec:
+ serviceAccountName: opentelemetry-demo
+ containers:
+ - name: recommendationservice
+ image: 'ghcr.io/open-telemetry/demo:1.6.0-recommendationservice'
+ imagePullPolicy: IfNotPresent
+ ports:
+ - containerPort: 8080
+ name: service
+ env:
+ - name: OTEL_SERVICE_NAME
+ valueFrom:
+ fieldRef:
+ apiVersion: v1
+ fieldPath: metadata.labels['app.kubernetes.io/component']
+ - name: NODE_IP
+ valueFrom:
+ fieldRef:
+ fieldPath: status.hostIP
+ - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
+ value: cumulative
+ - name: RECOMMENDATION_SERVICE_PORT
+ value: "8080"
+ - name: PRODUCT_CATALOG_SERVICE_ADDR
+ value: 'opentelemetry-demo-productcatalogservice:8080'
+ - name: FEATURE_FLAG_GRPC_SERVICE_ADDR
+ value: 'opentelemetry-demo-featureflagservice:50053'
+ - name: OTEL_PYTHON_LOG_CORRELATION
+ value: "true"
+ - name: PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION
+ value: python
+ - name: OTEL_EXPORTER_OTLP_ENDPOINT
+ value: http://$(NODE_IP):4317
+ - name: OTEL_RESOURCE_ATTRIBUTES
+ value: service.name=$(OTEL_SERVICE_NAME),service.namespace=opentelemetry-demo,deployment.environment=development
+ resources:
+ limits:
+ memory: 500Mi
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: opentelemetry-demo-redis
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-redis
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: redis
+ app.kubernetes.io/name: opentelemetry-demo-redis
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ opentelemetry.io/name: opentelemetry-demo-redis
+ template:
+ metadata:
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-redis
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: redis
+ app.kubernetes.io/name: opentelemetry-demo-redis
+ spec:
+ serviceAccountName: opentelemetry-demo
+ containers:
+ - name: redis
+ image: 'redis:alpine'
+ imagePullPolicy: IfNotPresent
+ ports:
+ - containerPort: 6379
+ name: redis
+ env:
+ - name: OTEL_SERVICE_NAME
+ valueFrom:
+ fieldRef:
+ apiVersion: v1
+ fieldPath: metadata.labels['app.kubernetes.io/component']
+ - name: NODE_IP
+ valueFrom:
+ fieldRef:
+ fieldPath: status.hostIP
+ - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
+ value: cumulative
+ - name: OTEL_RESOURCE_ATTRIBUTES
+ value: service.name=$(OTEL_SERVICE_NAME),service.namespace=opentelemetry-demo,deployment.environment=development
+ resources:
+ limits:
+ memory: 20Mi
+ securityContext:
+ runAsGroup: 1000
+ runAsNonRoot: true
+ runAsUser: 999
+---
+# Source: opentelemetry-demo/templates/component.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: opentelemetry-demo-shippingservice
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-shippingservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: shippingservice
+ app.kubernetes.io/name: opentelemetry-demo-shippingservice
+ app.kubernetes.io/version: "1.6.0"
+ app.kubernetes.io/part-of: opentelemetry-demo
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ opentelemetry.io/name: opentelemetry-demo-shippingservice
+ template:
+ metadata:
+ labels:
+ opentelemetry.io/name: opentelemetry-demo-shippingservice
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/component: shippingservice
+ app.kubernetes.io/name: opentelemetry-demo-shippingservice
+ spec:
+ serviceAccountName: opentelemetry-demo
+ containers:
+ - name: shippingservice
+ image: 'ghcr.io/open-telemetry/demo:1.6.0-shippingservice'
+ imagePullPolicy: IfNotPresent
+ ports:
+ - containerPort: 8080
+ name: service
+ env:
+ - name: OTEL_SERVICE_NAME
+ valueFrom:
+ fieldRef:
+ apiVersion: v1
+ fieldPath: metadata.labels['app.kubernetes.io/component']
+ - name: NODE_IP
+ valueFrom:
+ fieldRef:
+ fieldPath: status.hostIP
+ - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
+ value: cumulative
+ - name: SHIPPING_SERVICE_PORT
+ value: "8080"
+ - name: QUOTE_SERVICE_ADDR
+ value: http://opentelemetry-demo-quoteservice:8080
+ - name: OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
+ value: http://$(NODE_IP):4317/v1/traces
+ - name: OTEL_RESOURCE_ATTRIBUTES
+ value: service.name=$(OTEL_SERVICE_NAME),service.namespace=opentelemetry-demo,deployment.environment=development
+ resources:
+ limits:
+ memory: 20Mi
+---
+# Source: opentelemetry-demo/charts/grafana/templates/tests/test-serviceaccount.yaml
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ labels:
+ app.kubernetes.io/name: grafana
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/version: "10.1.5"
+ name: opentelemetry-demo-grafana-test
+ namespace: otel-demo
+ annotations:
+---
+# Source: opentelemetry-demo/charts/grafana/templates/tests/test-configmap.yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: opentelemetry-demo-grafana-test
+ namespace: otel-demo
+ annotations:
+ labels:
+ app.kubernetes.io/name: grafana
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/version: "10.1.5"
+data:
+ run.sh: |-
+ @test "Test Health" {
+ url="http://opentelemetry-demo-grafana/api/health"
+
+ code=$(wget --server-response --spider --timeout 90 --tries 10 ${url} 2>&1 | awk '/^ HTTP/{print $2}')
+ [ "$code" == "200" ]
+ }
+---
+# Source: opentelemetry-demo/charts/grafana/templates/tests/test.yaml
+apiVersion: v1
+kind: Pod
+metadata:
+ name: opentelemetry-demo-grafana-test
+ labels:
+ app.kubernetes.io/name: grafana
+ app.kubernetes.io/instance: opentelemetry-demo
+ app.kubernetes.io/version: "10.1.5"
+ annotations:
+ namespace: otel-demo
+spec:
+ serviceAccountName: opentelemetry-demo-grafana-test
+ containers:
+ - name: opentelemetry-demo-test
+ image: "docker.io/bats/bats:v1.4.1"
+ imagePullPolicy: "IfNotPresent"
+ command: ["/opt/bats/bin/bats", "-t", "/tests/run.sh"]
+ volumeMounts:
+ - mountPath: /tests
+ name: tests
+ readOnly: true
+ volumes:
+ - name: tests
+ configMap:
+ name: opentelemetry-demo-grafana-test
+ restartPolicy: Never
diff --git a/splunk/otelcol-config-filelog.yml b/splunk/otelcol-config-filelog.yml
new file mode 100644
index 0000000000..fbbc57a73a
--- /dev/null
+++ b/splunk/otelcol-config-filelog.yml
@@ -0,0 +1,189 @@
+extensions:
+ health_check:
+ endpoint: 0.0.0.0:13133
+ http_forwarder:
+ ingress:
+ endpoint: 0.0.0.0:6060
+ egress:
+ # TODO: Ensure this is set properly
+ endpoint: "https://api.${SPLUNK_REALM}.signalfx.com"
+ zpages:
+ memory_ballast:
+ # In general, the ballast should be set to 1/3 of the collector's memory, the limit
+ # should be 90% of the collector's memory.
+ # The simplest way to specify the ballast size is set the value of SPLUNK_BALLAST_SIZE_MIB env variable.
+ # TODO: Ensure this is set properly
+ size_mib: ${SPLUNK_BALLAST_SIZE_MIB}
+receivers:
+ filelog:
+ include:
+ - /var/lib/docker/containers/*/*-json.log
+ encoding: utf-8
+ fingerprint_size: 1kb
+ force_flush_period: "0"
+ include_file_name: false
+ include_file_path: true
+ max_concurrent_files: 1024
+ max_log_size: 1MiB
+ operators:
+ - id: parser-docker
+ timestamp:
+ layout: '%Y-%m-%dT%H:%M:%S.%LZ'
+ parse_from: attributes.time
+ type: json_parser
+ - id: extract_metadata_from_docker_tag
+ parse_from: attributes.attrs.tag
+ regex: ^(?P[^\|]+)\|(?P[^\|]+)\|(?P[^$]+)$
+ type: regex_parser
+ if: 'attributes?.attrs?.tag != nil'
+ - from: attributes.name
+ to: resource["com.splunk.sourcetype"]
+ type: copy
+ if: 'attributes?.name != nil'
+ - from: attributes.name
+ to: resource["docker.container.name"]
+ type: move
+ if: 'attributes?.name != nil'
+ - from: attributes.image_name
+ to: resource["docker.image.name"]
+ type: move
+ if: 'attributes?.image_name != nil'
+ - from: attributes.id
+ to: resource["docker.container.id"]
+ type: move
+ if: 'attributes?.id != nil'
+ - from: attributes.stream
+ to: resource["log.io.stream"]
+ type: move
+ - field: attributes.attrs.tag
+ type: remove
+ if: 'attributes?.attrs?.tag != nil'
+ - from: attributes.log
+ to: body
+ type: move
+ poll_interval: 200ms
+ start_at: beginning
+
+ hostmetrics:
+ collection_interval: 10s
+ scrapers:
+ cpu:
+ disk:
+ filesystem:
+ memory:
+ network:
+ # System load average metrics https://en.wikipedia.org/wiki/Load_(computing)
+ load:
+ # Paging/Swap space utilization and I/O metrics
+ paging:
+ # Aggregated system process count metrics
+ processes:
+ # System processes metrics, disabled by default
+ # process:
+ jaeger:
+ protocols:
+ grpc:
+ endpoint: 0.0.0.0:14250
+ thrift_binary:
+ endpoint: 0.0.0.0:6832
+ thrift_compact:
+ endpoint: 0.0.0.0:6831
+ thrift_http:
+ endpoint: 0.0.0.0:14268
+ otlp:
+ protocols:
+ grpc:
+ endpoint: 0.0.0.0:4317
+ http:
+ endpoint: 0.0.0.0:4318
+
+ sapm:
+ endpoint: 0.0.0.0:7276
+ signalfx:
+ endpoint: 0.0.0.0:9943
+ # This section is used to collect OpenTelemetry metrics
+ # Even if just a SignalFx µAPM customer, these metrics are included
+ prometheus:
+ config:
+ scrape_configs:
+ - job_name: 'otel-collector'
+ scrape_interval: 10s
+ static_configs:
+ - targets: ['localhost:8888']
+ # If you want to use the environment filter
+ # In the SignalFx dashboard
+ #labels:
+ #environment: demo
+ metric_relabel_configs:
+ - source_labels: [ __name__ ]
+ regex: '.*grpc_io.*'
+ action: drop
+ # Enable Zipkin to support Istio Mixer Adapter
+ # https://github.com/signalfx/signalfx-istio-adapter
+ zipkin:
+ endpoint: 0.0.0.0:9411
+processors:
+ batch:
+ # Optional: If you have a different environment tag name
+ # If this option is enabled it must be added to the pipeline section below
+ #attributes/copyfromexistingkey:
+ #actions:
+ #- key: environment
+ #from_attribute: YOUR_EXISTING_TAG_NAME
+ #action: upsert
+ # Optional: If you want to add an environment tag
+ # If this option is enabled it must be added to the pipeline section below
+ #attributes/newenvironment:
+ #actions:
+ #- key: environment
+ #value: "YOUR_ENVIRONMENT_NAME"
+ #action: insert
+ resourcedetection:
+ detectors:
+ - env
+ - system
+ timeout: 10s
+ override: true
+
+exporters:
+ # Traces
+ sapm:
+ # TODO: Ensure this is set properly
+ access_token: "${SPLUNK_ACCESS_TOKEN}"
+ # TODO: Ensure this is set properly
+ endpoint: "https://ingest.${SPLUNK_REALM}.signalfx.com/v2/trace"
+ # Metrics
+ signalfx:
+ # TODO: Ensure this is set properly
+ access_token: "${SPLUNK_ACCESS_TOKEN}"
+ # TODO: Ensure this is set properly
+ realm: "${SPLUNK_REALM}"
+ sync_host_metadata: true
+ # Logs (can also be used to send traces)
+ splunk_hec:
+ token: "${SPLUNK_HEC_TOKEN}"
+ endpoint: "${SPLUNK_HEC_URL}/services/collector"
+ source: "otel"
+ sourcetype: "otel"
+ index: "astronomyshop"
+ profiling_data_enabled: false
+
+service:
+ extensions: [health_check, http_forwarder, zpages]
+ # telemetry:
+ # logs:
+ # level: "debug"
+
+ pipelines:
+ traces:
+ receivers: [jaeger, otlp, sapm, zipkin]
+ processors: [batch, resourcedetection]
+ exporters: [ sapm, signalfx ]
+ metrics:
+ receivers: [otlp, signalfx, prometheus, hostmetrics]
+ processors: [batch, resourcedetection]
+ exporters: [signalfx]
+ logs:
+ receivers: [otlp, signalfx, filelog]
+ processors: [batch, resourcedetection]
+ exporters: [splunk_hec]
diff --git a/splunk/otelcol-config-fluentd.yml b/splunk/otelcol-config-fluentd.yml
new file mode 100644
index 0000000000..286acc24db
--- /dev/null
+++ b/splunk/otelcol-config-fluentd.yml
@@ -0,0 +1,142 @@
+extensions:
+ health_check:
+ endpoint: 0.0.0.0:13133
+ http_forwarder:
+ ingress:
+ endpoint: 0.0.0.0:6060
+ egress:
+ # TODO: Ensure this is set properly
+ endpoint: "https://api.${SPLUNK_REALM}.signalfx.com"
+ zpages:
+ memory_ballast:
+ # In general, the ballast should be set to 1/3 of the collector's memory, the limit
+ # should be 90% of the collector's memory.
+ # The simplest way to specify the ballast size is set the value of SPLUNK_BALLAST_SIZE_MIB env variable.
+ # TODO: Ensure this is set properly
+ size_mib: ${SPLUNK_BALLAST_SIZE_MIB}
+receivers:
+ fluentforward:
+ endpoint: 0.0.0.0:24224
+ hostmetrics:
+ collection_interval: 10s
+ scrapers:
+ cpu:
+ disk:
+ filesystem:
+ memory:
+ network:
+ # System load average metrics https://en.wikipedia.org/wiki/Load_(computing)
+ load:
+ # Paging/Swap space utilization and I/O metrics
+ paging:
+ # Aggregated system process count metrics
+ processes:
+ # System processes metrics, disabled by default
+ # process:
+ jaeger:
+ protocols:
+ grpc:
+ endpoint: 0.0.0.0:14250
+ thrift_binary:
+ endpoint: 0.0.0.0:6832
+ thrift_compact:
+ endpoint: 0.0.0.0:6831
+ thrift_http:
+ endpoint: 0.0.0.0:14268
+ otlp:
+ protocols:
+ grpc:
+ endpoint: 0.0.0.0:4317
+ http:
+ endpoint: 0.0.0.0:4318
+
+ sapm:
+ endpoint: 0.0.0.0:7276
+ signalfx:
+ endpoint: 0.0.0.0:9943
+ # This section is used to collect OpenTelemetry metrics
+ # Even if just a SignalFx µAPM customer, these metrics are included
+ prometheus:
+ config:
+ scrape_configs:
+ - job_name: 'otel-collector'
+ scrape_interval: 10s
+ static_configs:
+ - targets: ['localhost:8888']
+ # If you want to use the environment filter
+ # In the SignalFx dashboard
+ #labels:
+ #environment: demo
+ metric_relabel_configs:
+ - source_labels: [ __name__ ]
+ regex: '.*grpc_io.*'
+ action: drop
+ # Enable Zipkin to support Istio Mixer Adapter
+ # https://github.com/signalfx/signalfx-istio-adapter
+ zipkin:
+ endpoint: 0.0.0.0:9411
+processors:
+ batch:
+ # Optional: If you have a different environment tag name
+ # If this option is enabled it must be added to the pipeline section below
+ #attributes/copyfromexistingkey:
+ #actions:
+ #- key: environment
+ #from_attribute: YOUR_EXISTING_TAG_NAME
+ #action: upsert
+ # Optional: If you want to add an environment tag
+ # If this option is enabled it must be added to the pipeline section below
+ #attributes/newenvironment:
+ #actions:
+ #- key: environment
+ #value: "YOUR_ENVIRONMENT_NAME"
+ #action: insert
+ resourcedetection:
+ detectors:
+ - env
+ - system
+ timeout: 10s
+ override: true
+
+exporters:
+ # Traces
+ sapm:
+ # TODO: Ensure this is set properly
+ access_token: "${SPLUNK_ACCESS_TOKEN}"
+ # TODO: Ensure this is set properly
+ endpoint: "https://ingest.${SPLUNK_REALM}.signalfx.com/v2/trace"
+ # Metrics
+ signalfx:
+ # TODO: Ensure this is set properly
+ access_token: "${SPLUNK_ACCESS_TOKEN}"
+ # TODO: Ensure this is set properly
+ realm: "${SPLUNK_REALM}"
+ sync_host_metadata: true
+ # Logs (can also be used to send traces)
+ splunk_hec:
+ token: "${SPLUNK_HEC_TOKEN}"
+ endpoint: "${SPLUNK_HEC_URL}/services/collector"
+ source: "otel"
+ sourcetype: "otel"
+ index: "astronomyshop"
+ profiling_data_enabled: false
+
+service:
+ extensions: [health_check, http_forwarder, zpages]
+ # telemetry:
+ # logs:
+ # level: "debug"
+
+ pipelines:
+ traces:
+ receivers: [jaeger, otlp, sapm, zipkin]
+ processors: [batch, resourcedetection]
+ exporters: [ sapm, signalfx ]
+ metrics:
+ receivers: [otlp, signalfx, prometheus, hostmetrics]
+ processors: [batch, resourcedetection]
+ exporters: [signalfx]
+ logs:
+ receivers: [otlp, signalfx, fluentforward]
+ processors: [batch, resourcedetection]
+ exporters: [splunk_hec]
diff --git a/splunk/otelcol-config.yml b/splunk/otelcol-config.yml
new file mode 100644
index 0000000000..3ed6c143ba
--- /dev/null
+++ b/splunk/otelcol-config.yml
@@ -0,0 +1,142 @@
+extensions:
+ health_check:
+ endpoint: 0.0.0.0:13133
+ http_forwarder:
+ ingress:
+ endpoint: 0.0.0.0:6060
+ egress:
+ # TODO: Ensure this is set properly
+ endpoint: "https://api.${SPLUNK_REALM}.signalfx.com"
+ zpages:
+ memory_ballast:
+ # In general, the ballast should be set to 1/3 of the collector's memory, the limit
+ # should be 90% of the collector's memory.
+ # The simplest way to specify the ballast size is set the value of SPLUNK_BALLAST_SIZE_MIB env variable.
+ # TODO: Ensure this is set properly
+ size_mib: ${SPLUNK_BALLAST_SIZE_MIB}
+receivers:
+ fluentforward:
+ endpoint: 0.0.0.0:24224
+ hostmetrics:
+ collection_interval: 10s
+ scrapers:
+ cpu:
+ disk:
+ filesystem:
+ memory:
+ network:
+ # System load average metrics https://en.wikipedia.org/wiki/Load_(computing)
+ load:
+ # Paging/Swap space utilization and I/O metrics
+ paging:
+ # Aggregated system process count metrics
+ processes:
+ # System processes metrics, disabled by default
+ # process:
+ jaeger:
+ protocols:
+ grpc:
+ endpoint: 0.0.0.0:14250
+ thrift_binary:
+ endpoint: 0.0.0.0:6832
+ thrift_compact:
+ endpoint: 0.0.0.0:6831
+ thrift_http:
+ endpoint: 0.0.0.0:14268
+ otlp:
+ protocols:
+ grpc:
+ endpoint: 0.0.0.0:4317
+ http:
+ endpoint: 0.0.0.0:4318
+
+ sapm:
+ endpoint: 0.0.0.0:7276
+ signalfx:
+ endpoint: 0.0.0.0:9943
+ # This section is used to collect OpenTelemetry metrics
+ # Even if just a SignalFx µAPM customer, these metrics are included
+ prometheus:
+ config:
+ scrape_configs:
+ - job_name: 'otel-collector'
+ scrape_interval: 10s
+ static_configs:
+ - targets: ['localhost:8888']
+ # If you want to use the environment filter
+ # In the SignalFx dashboard
+ #labels:
+ #environment: demo
+ metric_relabel_configs:
+ - source_labels: [ __name__ ]
+ regex: '.*grpc_io.*'
+ action: drop
+ # Enable Zipkin to support Istio Mixer Adapter
+ # https://github.com/signalfx/signalfx-istio-adapter
+ zipkin:
+ endpoint: 0.0.0.0:9411
+processors:
+ batch:
+ # Optional: If you have a different environment tag name
+ # If this option is enabled it must be added to the pipeline section below
+ #attributes/copyfromexistingkey:
+ #actions:
+ #- key: environment
+ #from_attribute: YOUR_EXISTING_TAG_NAME
+ #action: upsert
+ # Optional: If you want to add an environment tag
+ # If this option is enabled it must be added to the pipeline section below
+ #attributes/newenvironment:
+ #actions:
+ #- key: environment
+ #value: "YOUR_ENVIRONMENT_NAME"
+ #action: insert
+ resourcedetection:
+ detectors:
+ - env
+ - system
+ timeout: 10s
+ override: true
+
+exporters:
+ # Traces
+ sapm:
+ # TODO: Ensure this is set properly
+ access_token: "${SPLUNK_ACCESS_TOKEN}"
+ # TODO: Ensure this is set properly
+ endpoint: "https://ingest.${SPLUNK_REALM}.signalfx.com/v2/trace"
+ # Metrics
+ signalfx:
+ # TODO: Ensure this is set properly
+ access_token: "${SPLUNK_ACCESS_TOKEN}"
+ # TODO: Ensure this is set properly
+ realm: "${SPLUNK_REALM}"
+ sync_host_metadata: true
+ # Logs (can also be used to send traces)
+ splunk_hec:
+ token: "${SPLUNK_HEC_TOKEN}"
+ endpoint: "${SPLUNK_HEC_URL}/services/collector"
+ source: "otel"
+ sourcetype: "otel"
+ index: "astronomyshop"
+ profiling_data_enabled: false
+
+service:
+ extensions: [health_check, http_forwarder, zpages]
+# telemetry:
+# logs:
+# level: "debug"
+
+ pipelines:
+ traces:
+ receivers: [jaeger, otlp, sapm, zipkin]
+ processors: [batch, resourcedetection]
+ exporters: [ sapm, signalfx ]
+ metrics:
+ receivers: [otlp, signalfx, prometheus, hostmetrics]
+ processors: [batch, resourcedetection]
+ exporters: [signalfx]
+ logs:
+ receivers: [otlp, signalfx, fluentforward]
+ processors: [batch, resourcedetection]
+ exporters: [splunk_hec]
diff --git a/splunk/update-demos.sh b/splunk/update-demos.sh
new file mode 100755
index 0000000000..0d0ae3bd0d
--- /dev/null
+++ b/splunk/update-demos.sh
@@ -0,0 +1,129 @@
+#!/usr/bin/env bash
+set -euo pipefail
+# Purpose: Update demo applications with the latest upstream changes.
+# Notes:
+# This script performs updates for the OpenTelemetry Demo.
+# Requirements:
+# - yq: A portable command-line YAML processor.
+# Both can be installed using brew:
+# brew install yq
+#
+# Example Usage:
+# ./update_demos.sh
+
+# Set default paths if environment variables are not set
+SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &> /dev/null && pwd)
+
+function update_root_readme {
+ ROOT_README_PATH=${ROOT_README_PATH:-"$SCRIPT_DIR/../README.md"}
+
+ # Download the latest README file from upstream
+ curl -L https://raw.githubusercontent.com/open-telemetry/opentelemetry-demo/main/README.md \
+ > "$ROOT_README_PATH"
+
+ # add a section to the root README file with a pointer to Splunk customizations
+ SEARCH_VAL="## Quick start"
+ REPLACE_VAL='## Splunk customizations \
+\
+A number of customizations have been made to use the demo application with Splunk Observability Cloud, which can be found in the \[\/splunk\](\.\/splunk) folder. See \[this document\](\.\/splunk\/README.md) for details. \
+\
+## Quick start'
+
+ sed -i '' "s/${SEARCH_VAL}/${REPLACE_VAL}/g" "$ROOT_README_PATH"
+
+ echo "Completed updating the root README.md file for the OpenTelemetry demo app!"
+}
+
+function update_otel_demo_docker {
+ DOCKER_COMPOSE_PATH=${DOCKER_COMPOSE_PATH:-"$SCRIPT_DIR/../docker-compose.yml"}
+ SPLUNK_DOCKER_COMPOSE_PATH=${SPLUNK_DOCKER_COMPOSE_PATH:-"$SCRIPT_DIR/../splunk/docker-compose.yml"}
+
+ # delete any older versions of the Splunk Docker Compose file
+ [ -e "$SPLUNK_DOCKER_COMPOSE_PATH" ] && rm "$SPLUNK_DOCKER_COMPOSE_PATH"
+
+ # Download the YAML file
+ curl -L https://raw.githubusercontent.com/open-telemetry/opentelemetry-demo/main/docker-compose.yml \
+ > "$DOCKER_COMPOSE_PATH"
+
+ cp "$DOCKER_COMPOSE_PATH" "$SPLUNK_DOCKER_COMPOSE_PATH"
+
+ # replace the OpenTelemetry collector image with the Splunk distribution
+ yq eval -i '.services.otelcol.image = "quay.io/signalfx/splunk-otel-collector:latest"' "$SPLUNK_DOCKER_COMPOSE_PATH"
+
+ # add environment variables required by the Splunk distro of the OpenTelemetry collector
+ yq eval -i '.services.otelcol.environment += [ "SPLUNK_ACCESS_TOKEN=${SPLUNK_ACCESS_TOKEN}" ]' "$SPLUNK_DOCKER_COMPOSE_PATH"
+ yq eval -i '.services.otelcol.environment += [ "SPLUNK_REALM=${SPLUNK_REALM}" ]' "$SPLUNK_DOCKER_COMPOSE_PATH"
+ yq eval -i '.services.otelcol.environment += [ "SPLUNK_HEC_TOKEN=${SPLUNK_HEC_TOKEN}" ]' "$SPLUNK_DOCKER_COMPOSE_PATH"
+ yq eval -i '.services.otelcol.environment += [ "SPLUNK_HEC_URL=${SPLUNK_HEC_URL}" ]' "$SPLUNK_DOCKER_COMPOSE_PATH"
+ yq eval -i '.services.otelcol.environment += [ "SPLUNK_MEMORY_TOTAL_MIB=${SPLUNK_MEMORY_TOTAL_MIB}" ]' "$SPLUNK_DOCKER_COMPOSE_PATH"
+
+ # update the command used to launch the collector to point to the Splunk-specific config
+ yq eval -i '.services.otelcol.command[0] = "--config=/etc/otelcol-config.yml" ' "$SPLUNK_DOCKER_COMPOSE_PATH"
+ yq eval -i 'del(.services.otelcol.command[1])' "$SPLUNK_DOCKER_COMPOSE_PATH"
+
+ yq eval -i '.services.otelcol.volumes = [ "./splunk/otelcol-config.yml:/etc/otelcol-config.yml", "./logs:/logs", "./checkpoint:/checkpoint" ]' "$SPLUNK_DOCKER_COMPOSE_PATH"
+
+ # add ports used by the Splunk distro of the OpenTelemetry collector
+ yq eval -i '.services.otelcol.ports += [ "9464" ]' "$SPLUNK_DOCKER_COMPOSE_PATH"
+ yq eval -i '.services.otelcol.ports += [ "8888" ]' "$SPLUNK_DOCKER_COMPOSE_PATH"
+ yq eval -i '.services.otelcol.ports += [ "13133" ]' "$SPLUNK_DOCKER_COMPOSE_PATH"
+ yq eval -i '.services.otelcol.ports += [ "14250" ]' "$SPLUNK_DOCKER_COMPOSE_PATH"
+ yq eval -i '.services.otelcol.ports += [ "14268" ]' "$SPLUNK_DOCKER_COMPOSE_PATH"
+ yq eval -i '.services.otelcol.ports += [ "6060" ]' "$SPLUNK_DOCKER_COMPOSE_PATH"
+ yq eval -i '.services.otelcol.ports += [ "9080" ]' "$SPLUNK_DOCKER_COMPOSE_PATH"
+ yq eval -i '.services.otelcol.ports += [ "9411" ]' "$SPLUNK_DOCKER_COMPOSE_PATH"
+ yq eval -i '.services.otelcol.ports += [ "9943" ]' "$SPLUNK_DOCKER_COMPOSE_PATH"
+
+ echo "Completed updating docker-compose.yml for the OpenTelemetry demo app!"
+}
+
+function update_otel_demo_k8s {
+ K8S_PATH=${K8S_PATH:-"$SCRIPT_DIR/../kubernetes/opentelemetry-demo.yaml"}
+ SPLUNK_K8S_PATH=${SPLUNK_K8S_PATH:-"$SCRIPT_DIR/../splunk/opentelemetry-demo.yaml"}
+
+ # delete any older versions of the Splunk K8s file
+ [ -e "$SPLUNK_K8S_PATH" ] && rm "$SPLUNK_K8S_PATH"
+
+ # Download the YAML file
+ curl -L https://raw.githubusercontent.com/open-telemetry/opentelemetry-demo/main/kubernetes/opentelemetry-demo.yaml \
+ > "$K8S_PATH"
+
+ cp "$K8S_PATH" "$SPLUNK_K8S_PATH"
+
+ # delete the opentelemetry-demo-otelcol ServiceAccount, ConfigMap, Service, and Deployment objects
+ yq eval -i 'select(.kind != "ServiceAccount" or .metadata.name != "opentelemetry-demo-otelcol")' "$SPLUNK_K8S_PATH"
+ yq eval -i 'select(.kind != "ConfigMap" or .metadata.name != "opentelemetry-demo-otelcol")' "$SPLUNK_K8S_PATH"
+ yq eval -i 'select(.kind != "Service" or .metadata.name != "opentelemetry-demo-otelcol")' "$SPLUNK_K8S_PATH"
+ yq eval -i 'select(.kind != "Deployment" or .metadata.name != "opentelemetry-demo-otelcol")' "$SPLUNK_K8S_PATH"
+
+ # replace the OTEL_COLLECTOR_NAME environment variable
+ # with a NODE_IP environment variable for all containers
+ # - name: NODE_IP
+ # valueFrom:
+ # fieldRef:
+ # fieldPath: status.hostIP
+
+ # start by replacing the environment variable name
+ yq eval -i ' (.. | select(tag == "!!str")) |= sub("OTEL_COLLECTOR_NAME", "NODE_IP")' "$SPLUNK_K8S_PATH"
+
+ # then use sed to replace the value
+ # (yq was not used due to an issue that added extraneous elements to the file)
+ SEARCH_VAL="value: 'opentelemetry-demo-otelcol'"
+ REPLACE_VAL='valueFrom: \
+ fieldRef: \
+ fieldPath: status.hostIP'
+
+ sed -i '' "s/${SEARCH_VAL}/${REPLACE_VAL}/g" "$SPLUNK_K8S_PATH"
+
+ # append the deployment.environment resource attribute
+ # - name: OTEL_RESOURCE_ATTRIBUTES
+ # value: service.name=$(OTEL_SERVICE_NAME),service.namespace=opentelemetry-demo,deployment.environment=development
+ yq eval -i ' (.. | select(tag == "!!str")) |= sub("service.namespace=opentelemetry-demo", "service.namespace=opentelemetry-demo,deployment.environment=development")' "$SPLUNK_K8S_PATH"
+
+ echo "Completed updating the kubernetes/opentelemetry-demo.yaml for the OpenTelemetry demo app!"
+}
+
+# ---- OpenTelemetry Demo Update ----
+update_root_readme
+update_otel_demo_docker
+update_otel_demo_k8s