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