Some checks failed
CI Pipeline / Build and Test (push) Successful in 4s
Security Scanning / Trivy — Filesystem & Dependency Scan (push) Failing after 7s
Security Scanning / Gitleaks — Secret Scan (push) Failing after 7s
Security Scanning / Security Summary (push) Failing after 3s
Build and Publish TechDocs / build-and-publish (push) Successful in 1m2s
Change-Id: I8e318861a258686ddc53dda08858f74c573a6520
1224 lines
34 KiB
YAML
1224 lines
34 KiB
YAML
# yaml-language-server: $schema=./values.schema.json
|
|
default:
|
|
# List of environment variables applied to all components
|
|
env:
|
|
- name: OTEL_SERVICE_NAME
|
|
valueFrom:
|
|
fieldRef:
|
|
apiVersion: v1
|
|
fieldPath: "metadata.labels['app.kubernetes.io/component']"
|
|
- name: OTEL_COLLECTOR_NAME
|
|
value: otel-collector
|
|
- name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
|
|
value: cumulative
|
|
# Allows overriding and additions to .Values.default.env
|
|
envOverrides: []
|
|
# - name: OTEL_K8S_NODE_NAME
|
|
# value: "someConstantValue"
|
|
image:
|
|
repository: ghcr.io/open-telemetry/demo
|
|
# Overrides the image tag whose default is the chart appVersion.
|
|
# The service's name will be applied to the end of this value.
|
|
tag: ""
|
|
pullPolicy: IfNotPresent
|
|
pullSecrets: []
|
|
# Default # of replicas for all components
|
|
replicas: 1
|
|
# default revisionHistoryLimit for all components (number of old ReplicaSets to retain)
|
|
revisionHistoryLimit: 10
|
|
# Default schedulingRules for all components
|
|
schedulingRules:
|
|
nodeSelector: {}
|
|
affinity: {}
|
|
tolerations: []
|
|
# Default securityContext for all components
|
|
securityContext: {}
|
|
|
|
serviceAccount:
|
|
# Specifies whether a service account should be created
|
|
create: true
|
|
# Annotations to add to the service account
|
|
annotations: {}
|
|
# The name of the service account to use.
|
|
# If not set and create is true, a name is generated using the fullname template
|
|
name: ""
|
|
|
|
components:
|
|
## Demo Components are named objects (services) with several properties
|
|
# demoService:
|
|
## Enable the component (service)
|
|
# enabled: true
|
|
# useDefault:
|
|
## Use default environment variables
|
|
# env: true
|
|
## Override Image repository and Tag. Tag will use appVersion as default.
|
|
## Component's name will be applied to end of this value.
|
|
# imageOverride: {}
|
|
## Optional service definitions to apply
|
|
# service:
|
|
## Service Type to use for this component. Default is ClusterIP.
|
|
# type: ClusterIP
|
|
## Service Port to use to expose this component. Default is nil
|
|
# port: 8080
|
|
## Service Node Port to use to expose this component on a NodePort service. Default is nil
|
|
# nodePort: 30080
|
|
## Service Annotations to add to this component
|
|
# annotations: {}
|
|
## Additional service ports to use to expose this component
|
|
# ports:
|
|
# - name: extraServicePort
|
|
# value: 8081
|
|
## Environment variables to add to the component's pod
|
|
# env:
|
|
## Environment variables that upsert (append + merge) into the `env` specification for this component.
|
|
## A variable named OTEL_RESOURCE_ATTRIBUTES_EXTRA will have its value appended to the OTEL_RESOURCE_ATTRIBUTES value.
|
|
# envOverrides:
|
|
## Pod Scheduling rules for nodeSelector, affinity, or tolerations.
|
|
# schedulingRules:
|
|
# nodeSelector: {}
|
|
# affinity: {}
|
|
# tolerations: []
|
|
## Pod labels to add to this component
|
|
# podLabels: {}
|
|
## Pod Annotations to add to this component
|
|
# podAnnotations: {}
|
|
## Resources for this component
|
|
# resources: {}
|
|
## Container security context for setting user ID (UID), group ID (GID) and other security policies
|
|
# securityContext:
|
|
## Ingresses rules to add for the to the component
|
|
# ingress:
|
|
## Enable the creation of Ingress rules. Default is false
|
|
# enabled: false
|
|
## Annotations to add to the ingress rule
|
|
# annotations: {}
|
|
## Which Ingress class (controller) to use. Default is unspecified.
|
|
# ingressClassName: nginx
|
|
## Hosts definitions for the Ingress rule
|
|
# hosts:
|
|
# - host: demo.example.com
|
|
## Each host can have multiple paths/routes
|
|
# paths:
|
|
# - path: /
|
|
# pathType: Prefix
|
|
# port: 8080
|
|
## Optional TLS specifications for the Ingress rule
|
|
# tls:
|
|
# - secretName: demo-tls
|
|
# hosts:
|
|
# - demo.example.com
|
|
## Additional ingresses - only created if ingress.enabled is true
|
|
## Useful for when differently annotated ingress services are required
|
|
## Each additional ingress needs key "name" set to something unique
|
|
# additionalIngresses: []
|
|
# - name: extra-demo-ingress
|
|
# ingressClassName: nginx
|
|
# annotations: {}
|
|
# hosts:
|
|
# - host: demo.example.com
|
|
# paths:
|
|
# - path: /
|
|
# pathType: Prefix
|
|
# port: 8080
|
|
# tls:
|
|
# - secretName: demo-tls
|
|
# hosts:
|
|
# - demo.example.com
|
|
## Command to use in the container spec, in case you don't want to go with the default command from the image.
|
|
# command: []
|
|
## Configuration to for this component; will create a Volume, and Mount backed by an optionally created ConfigMap.
|
|
## The name, mountPath are required, and one of existingConfigMap or data is required.
|
|
## If an existing ConfigMap is not provided, the contents under data will be used for the created ConfigMap.
|
|
# mountedConfigMaps: []
|
|
# - name: my-config
|
|
# mountPath: /etc/config
|
|
# subPath:
|
|
# existingConfigMap: my-configmap
|
|
# data:
|
|
# my-config.yaml: |
|
|
# key: value
|
|
## Configuration to create an custom Volume
|
|
# additionalVolumes:
|
|
# - name: nginx-logs
|
|
# hostPath:
|
|
# path: /var/log/nginx
|
|
# type: ""
|
|
## Configuration to mount the custom Volume to the container
|
|
# additionalVolumeMounts:
|
|
# - name: nginx-logs
|
|
# mountPath: /var/log/nginx
|
|
# # Kubernetes container health check options
|
|
# livenessProbe: {}
|
|
# readinessProbe: {}
|
|
# # Optional init container to run before the pod starts.
|
|
# initContainers:
|
|
# - name: <init-container-name>
|
|
# image: <init-container-image>
|
|
# command: [list of commands for the init container to run]
|
|
# # Replicas for the component
|
|
# replicas: 1
|
|
# # Number of old ReplicaSets to retain
|
|
# revisionHistoryLimit: 10
|
|
# # Optional pod security context for setting user ID (UID), group ID (GID) and other security policies
|
|
# # This will be applied at pod level, can be applied globally for all pods: .Values.default.podSecurityContext
|
|
# # Or it can be applied to a specific component: .Values.components.<component-name>.podSecurityContext
|
|
# podSecurityContext:
|
|
# runAsGroup: 65534
|
|
# runAsNonRoot: true
|
|
# runAsUser: 65534
|
|
|
|
accounting:
|
|
enabled: true
|
|
useDefault:
|
|
env: true
|
|
podAnnotations:
|
|
resource.opentelemetry.io/service.namespace: otel-demo
|
|
env:
|
|
- name: KAFKA_ADDR
|
|
value: kafka:9092
|
|
- name: OTEL_EXPORTER_OTLP_ENDPOINT
|
|
value: http://$(OTEL_COLLECTOR_NAME):4318
|
|
- name: DB_CONNECTION_STRING
|
|
value: Host=postgresql;Username=otelu;Password=otelp;Database=otel
|
|
- name: OTEL_DOTNET_AUTO_TRACES_ENTITYFRAMEWORKCORE_INSTRUMENTATION_ENABLED
|
|
value: "false"
|
|
resources:
|
|
limits:
|
|
memory: 120Mi
|
|
initContainers:
|
|
- name: wait-for-kafka
|
|
image: busybox:latest
|
|
command: ["sh", "-c", "until nc -z -v -w30 kafka 9092; do echo waiting for kafka; sleep 2; done;"]
|
|
|
|
ad:
|
|
enabled: true
|
|
useDefault:
|
|
env: true
|
|
service:
|
|
port: 8080
|
|
podAnnotations:
|
|
resource.opentelemetry.io/service.namespace: otel-demo
|
|
env:
|
|
- name: AD_PORT
|
|
value: "8080"
|
|
- name: FLAGD_HOST
|
|
value: flagd
|
|
- name: FLAGD_PORT
|
|
value: "8013"
|
|
- name: OTEL_EXPORTER_OTLP_ENDPOINT
|
|
value: http://$(OTEL_COLLECTOR_NAME):4318
|
|
- name: OTEL_LOGS_EXPORTER
|
|
value: otlp
|
|
resources:
|
|
limits:
|
|
memory: 300Mi
|
|
|
|
cart:
|
|
enabled: true
|
|
useDefault:
|
|
env: true
|
|
service:
|
|
port: 8080
|
|
podAnnotations:
|
|
resource.opentelemetry.io/service.namespace: otel-demo
|
|
env:
|
|
- name: CART_PORT
|
|
value: "8080"
|
|
- name: ASPNETCORE_URLS
|
|
value: http://*:$(CART_PORT)
|
|
- name: VALKEY_ADDR
|
|
value: valkey-cart:6379
|
|
- name: FLAGD_HOST
|
|
value: flagd
|
|
- name: FLAGD_PORT
|
|
value: "8013"
|
|
- name: OTEL_EXPORTER_OTLP_ENDPOINT
|
|
value: http://$(OTEL_COLLECTOR_NAME):4317
|
|
resources:
|
|
limits:
|
|
memory: 160Mi
|
|
initContainers:
|
|
- name: wait-for-valkey-cart
|
|
image: busybox:latest
|
|
command: ["sh", "-c", "until nc -z -v -w30 valkey-cart 6379; do echo waiting for valkey-cart; sleep 2; done;"]
|
|
|
|
checkout:
|
|
enabled: true
|
|
useDefault:
|
|
env: true
|
|
service:
|
|
port: 8080
|
|
podAnnotations:
|
|
resource.opentelemetry.io/service.namespace: otel-demo
|
|
env:
|
|
- name: CHECKOUT_PORT
|
|
value: "8080"
|
|
- name: CART_ADDR
|
|
value: cart:8080
|
|
- name: CURRENCY_ADDR
|
|
value: currency:8080
|
|
- name: EMAIL_ADDR
|
|
value: http://email:8080
|
|
- name: PAYMENT_ADDR
|
|
value: payment:8080
|
|
- name: PRODUCT_CATALOG_ADDR
|
|
value: product-catalog:8080
|
|
- name: SHIPPING_ADDR
|
|
value: http://shipping:8080
|
|
- name: KAFKA_ADDR
|
|
value: kafka:9092
|
|
- name: FLAGD_HOST
|
|
value: flagd
|
|
- name: FLAGD_PORT
|
|
value: "8013"
|
|
- name: OTEL_EXPORTER_OTLP_ENDPOINT
|
|
value: http://$(OTEL_COLLECTOR_NAME):4317
|
|
- name: GOMEMLIMIT
|
|
value: 16MiB
|
|
resources:
|
|
limits:
|
|
memory: 20Mi
|
|
initContainers:
|
|
- name: wait-for-kafka
|
|
image: busybox:latest
|
|
command: ["sh", "-c", "until nc -z -v -w30 kafka 9092; do echo waiting for kafka; sleep 2; done;"]
|
|
|
|
currency:
|
|
enabled: true
|
|
useDefault:
|
|
env: true
|
|
service:
|
|
port: 8080
|
|
podAnnotations:
|
|
resource.opentelemetry.io/service.namespace: otel-demo
|
|
env:
|
|
- name: CURRENCY_PORT
|
|
value: "8080"
|
|
- name: OTEL_EXPORTER_OTLP_ENDPOINT
|
|
value: http://$(OTEL_COLLECTOR_NAME):4317
|
|
- name: VERSION
|
|
value: "{{ .Chart.AppVersion }}"
|
|
- name: IPV6_ENABLED
|
|
value: "false"
|
|
resources:
|
|
limits:
|
|
memory: 20Mi
|
|
|
|
email:
|
|
enabled: true
|
|
useDefault:
|
|
env: true
|
|
service:
|
|
port: 8080
|
|
podAnnotations:
|
|
resource.opentelemetry.io/service.namespace: otel-demo
|
|
env:
|
|
- name: EMAIL_PORT
|
|
value: "8080"
|
|
- name: APP_ENV
|
|
value: production
|
|
- name: OTEL_EXPORTER_OTLP_ENDPOINT
|
|
value: http://$(OTEL_COLLECTOR_NAME):4318
|
|
- name: FLAGD_HOST
|
|
value: flagd
|
|
- name: FLAGD_PORT
|
|
value: "8013"
|
|
resources:
|
|
limits:
|
|
memory: 100Mi
|
|
|
|
fraud-detection:
|
|
enabled: true
|
|
useDefault:
|
|
env: true
|
|
podAnnotations:
|
|
resource.opentelemetry.io/service.namespace: otel-demo
|
|
env:
|
|
- name: KAFKA_ADDR
|
|
value: kafka:9092
|
|
- name: FLAGD_HOST
|
|
value: flagd
|
|
- name: FLAGD_PORT
|
|
value: "8013"
|
|
- name: OTEL_EXPORTER_OTLP_ENDPOINT
|
|
value: http://$(OTEL_COLLECTOR_NAME):4318
|
|
- name: OTEL_INSTRUMENTATION_KAFKA_EXPERIMENTAL_SPAN_ATTRIBUTES
|
|
value: "true"
|
|
- name: OTEL_INSTRUMENTATION_MESSAGING_EXPERIMENTAL_RECEIVE_TELEMETRY_ENABLED
|
|
value: "true"
|
|
resources:
|
|
limits:
|
|
memory: 300Mi
|
|
initContainers:
|
|
- name: wait-for-kafka
|
|
image: busybox:latest
|
|
command: ["sh", "-c", "until nc -z -v -w30 kafka 9092; do echo waiting for kafka; sleep 2; done;"]
|
|
|
|
frontend:
|
|
enabled: true
|
|
useDefault:
|
|
env: true
|
|
service:
|
|
port: 8080
|
|
podAnnotations:
|
|
resource.opentelemetry.io/service.namespace: otel-demo
|
|
env:
|
|
- name: FRONTEND_PORT
|
|
value: "8080"
|
|
- name: PORT
|
|
value: $(FRONTEND_PORT)
|
|
- name: FRONTEND_ADDR
|
|
value: :8080
|
|
- name: AD_ADDR
|
|
value: ad:8080
|
|
- name: CART_ADDR
|
|
value: cart:8080
|
|
- name: CHECKOUT_ADDR
|
|
value: checkout:8080
|
|
- name: CURRENCY_ADDR
|
|
value: currency:8080
|
|
- name: PRODUCT_CATALOG_ADDR
|
|
value: product-catalog:8080
|
|
- name: PRODUCT_REVIEWS_ADDR
|
|
value: product-reviews:3551
|
|
- name: RECOMMENDATION_ADDR
|
|
value: recommendation:8080
|
|
- name: SHIPPING_ADDR
|
|
value: http://shipping:8080
|
|
- name: FLAGD_HOST
|
|
value: flagd
|
|
- name: FLAGD_PORT
|
|
value: "8013"
|
|
- name: ENV_PLATFORM
|
|
value: kubernetes
|
|
- name: OTEL_COLLECTOR_HOST
|
|
value: $(OTEL_COLLECTOR_NAME)
|
|
- name: OTEL_EXPORTER_OTLP_ENDPOINT
|
|
value: http://$(OTEL_COLLECTOR_NAME):4317
|
|
- name: WEB_OTEL_SERVICE_NAME
|
|
value: frontend-web
|
|
- name: PUBLIC_OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
|
|
value: http://localhost:8080/otlp-http/v1/traces # This expects users to use `kubectl port-forward ...`
|
|
resources:
|
|
limits:
|
|
memory: 250Mi
|
|
securityContext:
|
|
runAsUser: 1001 # nextjs
|
|
runAsGroup: 1001
|
|
runAsNonRoot: true
|
|
|
|
frontend-proxy:
|
|
enabled: true
|
|
useDefault:
|
|
env: true
|
|
service:
|
|
port: 8080
|
|
podAnnotations:
|
|
resource.opentelemetry.io/service.namespace: otel-demo
|
|
io.opentelemetry.discovery.metrics/enabled: 'true'
|
|
io.opentelemetry.discovery.metrics/scraper: httpcheck
|
|
io.opentelemetry.discovery.metrics/config: |
|
|
targets:
|
|
- endpoint: "http://`endpoint`"
|
|
env:
|
|
- name: ENVOY_PORT
|
|
value: "8080"
|
|
- name: ENVOY_ADDR
|
|
value: "0.0.0.0"
|
|
- name: ENVOY_ADMIN_PORT
|
|
value: "10000"
|
|
- name: FLAGD_HOST
|
|
value: flagd
|
|
- name: FLAGD_PORT
|
|
value: "8013"
|
|
- name: FLAGD_UI_HOST
|
|
value: flagd
|
|
- name: FLAGD_UI_PORT
|
|
value: "4000"
|
|
- name: FRONTEND_HOST
|
|
value: frontend
|
|
- name: FRONTEND_PORT
|
|
value: "8080"
|
|
- name: GRAFANA_HOST
|
|
value: grafana
|
|
- name: GRAFANA_PORT
|
|
value: "80"
|
|
- name: IMAGE_PROVIDER_HOST
|
|
value: image-provider
|
|
- name: IMAGE_PROVIDER_PORT
|
|
value: "8081"
|
|
- name: JAEGER_HOST
|
|
value: jaeger
|
|
- name: JAEGER_UI_PORT
|
|
value: "16686"
|
|
- name: LOCUST_WEB_HOST
|
|
value: load-generator
|
|
- name: LOCUST_WEB_PORT
|
|
value: "8089"
|
|
- name: OTEL_COLLECTOR_HOST
|
|
value: $(OTEL_COLLECTOR_NAME)
|
|
- name: OTEL_COLLECTOR_PORT_GRPC
|
|
value: "4317"
|
|
- name: OTEL_COLLECTOR_PORT_HTTP
|
|
value: "4318"
|
|
resources:
|
|
limits:
|
|
memory: 65Mi
|
|
securityContext:
|
|
runAsUser: 101 # envoy
|
|
runAsGroup: 101
|
|
runAsNonRoot: true
|
|
|
|
image-provider:
|
|
enabled: true
|
|
useDefault:
|
|
env: true
|
|
service:
|
|
port: 8081
|
|
podAnnotations:
|
|
resource.opentelemetry.io/service.namespace: otel-demo
|
|
io.opentelemetry.discovery.metrics/enabled: 'true'
|
|
io.opentelemetry.discovery.metrics/scraper: nginx
|
|
io.opentelemetry.discovery.metrics/config: |
|
|
endpoint: "http://`endpoint`/status"
|
|
collection_interval: "10s"
|
|
timeout: "20s"
|
|
env:
|
|
- name: IMAGE_PROVIDER_PORT
|
|
value: "8081"
|
|
- name: OTEL_COLLECTOR_PORT_GRPC
|
|
value: "4317"
|
|
- name: OTEL_COLLECTOR_HOST
|
|
value: $(OTEL_COLLECTOR_NAME)
|
|
resources:
|
|
limits:
|
|
memory: 50Mi
|
|
|
|
load-generator:
|
|
enabled: true
|
|
useDefault:
|
|
env: true
|
|
service:
|
|
port: 8089
|
|
podAnnotations:
|
|
resource.opentelemetry.io/service.namespace: otel-demo
|
|
env:
|
|
- name: LOCUST_WEB_HOST
|
|
value: "0.0.0.0"
|
|
- name: LOCUST_WEB_PORT
|
|
value: "8089"
|
|
- name: LOCUST_USERS
|
|
value: "10"
|
|
- name: LOCUST_SPAWN_RATE
|
|
value: "1"
|
|
- name: LOCUST_HOST
|
|
value: http://frontend-proxy:8080
|
|
- name: LOCUST_HEADLESS
|
|
value: "false"
|
|
- name: LOCUST_AUTOSTART
|
|
value: "true"
|
|
- name: LOCUST_BROWSER_TRAFFIC_ENABLED
|
|
value: "true"
|
|
- name: PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION
|
|
value: python
|
|
- name: FLAGD_HOST
|
|
value: flagd
|
|
- name: FLAGD_PORT
|
|
value: "8013"
|
|
- name: FLAGD_OFREP_PORT
|
|
value: "8016"
|
|
- name: OTEL_EXPORTER_OTLP_ENDPOINT
|
|
value: http://$(OTEL_COLLECTOR_NAME):4317
|
|
resources:
|
|
limits:
|
|
memory: 1500Mi
|
|
|
|
payment:
|
|
enabled: true
|
|
useDefault:
|
|
env: true
|
|
service:
|
|
port: 8080
|
|
podAnnotations:
|
|
resource.opentelemetry.io/service.namespace: otel-demo
|
|
env:
|
|
- name: PAYMENT_PORT
|
|
value: "8080"
|
|
- name: FLAGD_HOST
|
|
value: flagd
|
|
- name: FLAGD_PORT
|
|
value: "8013"
|
|
- name: OTEL_EXPORTER_OTLP_ENDPOINT
|
|
value: http://$(OTEL_COLLECTOR_NAME):4317
|
|
- name: IPV6_ENABLED
|
|
value: "false"
|
|
resources:
|
|
limits:
|
|
memory: 140Mi
|
|
securityContext:
|
|
runAsUser: 1000 # node
|
|
runAsGroup: 1000
|
|
runAsNonRoot: true
|
|
|
|
product-catalog:
|
|
enabled: true
|
|
useDefault:
|
|
env: true
|
|
service:
|
|
port: 8080
|
|
podAnnotations:
|
|
resource.opentelemetry.io/service.namespace: otel-demo
|
|
env:
|
|
- name: PRODUCT_CATALOG_PORT
|
|
value: "8080"
|
|
- name: FLAGD_HOST
|
|
value: flagd
|
|
- name: FLAGD_PORT
|
|
value: "8013"
|
|
- name: GOMEMLIMIT
|
|
value: 16MiB
|
|
- name: DB_CONNECTION_STRING
|
|
value: postgres://otelu:otelp@postgresql/otel?sslmode=disable
|
|
- name: OTEL_SEMCONV_STABILITY_OPT_IN
|
|
value: database
|
|
- name: OTEL_EXPORTER_OTLP_ENDPOINT
|
|
value: http://$(OTEL_COLLECTOR_NAME):4317
|
|
resources:
|
|
limits:
|
|
memory: 20Mi
|
|
|
|
product-reviews:
|
|
enabled: true
|
|
useDefault:
|
|
env: true
|
|
service:
|
|
port: 3551
|
|
podAnnotations:
|
|
resource.opentelemetry.io/service.namespace: otel-demo
|
|
env:
|
|
- name: OPENAI_API_KEY
|
|
value: dummy
|
|
- name: LLM_MODEL
|
|
value: astronomy-llm
|
|
- name: LLM_HOST
|
|
value: llm
|
|
- name: LLM_PORT
|
|
value: "8000"
|
|
- name: LLM_BASE_URL
|
|
value: http://$(LLM_HOST):$(LLM_PORT)/v1
|
|
- name: PRODUCT_REVIEWS_PORT
|
|
value: "3551"
|
|
- name: PRODUCT_CATALOG_ADDR
|
|
value: product-catalog:8080
|
|
- name: FLAGD_HOST
|
|
value: flagd
|
|
- name: FLAGD_PORT
|
|
value: "8013"
|
|
- name: DB_CONNECTION_STRING
|
|
value: host=postgresql user=otelu password=otelp dbname=otel
|
|
- name: PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION
|
|
value: python
|
|
- name: OTEL_PYTHON_LOG_CORRELATION
|
|
value: "true"
|
|
- name: OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT
|
|
value: "true"
|
|
- name: OTEL_EXPORTER_OTLP_ENDPOINT
|
|
value: http://$(OTEL_COLLECTOR_NAME):4317
|
|
resources:
|
|
limits:
|
|
memory: 100Mi
|
|
|
|
quote:
|
|
enabled: true
|
|
useDefault:
|
|
env: true
|
|
service:
|
|
port: 8080
|
|
podAnnotations:
|
|
resource.opentelemetry.io/service.namespace: otel-demo
|
|
env:
|
|
- name: QUOTE_PORT
|
|
value: "8080"
|
|
- name: OTEL_PHP_AUTOLOAD_ENABLED
|
|
value: "true"
|
|
- name: OTEL_PHP_INTERNAL_METRICS_ENABLED
|
|
value: "true"
|
|
- name: OTEL_EXPORTER_OTLP_ENDPOINT
|
|
value: http://$(OTEL_COLLECTOR_NAME):4318
|
|
- name: IPV6_ENABLED
|
|
value: "false"
|
|
resources:
|
|
limits:
|
|
memory: 40Mi
|
|
securityContext:
|
|
runAsUser: 33 # www-data
|
|
runAsGroup: 33
|
|
runAsNonRoot: true
|
|
|
|
recommendation:
|
|
enabled: true
|
|
useDefault:
|
|
env: true
|
|
service:
|
|
port: 8080
|
|
podAnnotations:
|
|
resource.opentelemetry.io/service.namespace: otel-demo
|
|
env:
|
|
- name: RECOMMENDATION_PORT
|
|
value: "8080"
|
|
- name: PRODUCT_CATALOG_ADDR
|
|
value: product-catalog:8080
|
|
- name: OTEL_PYTHON_LOG_CORRELATION
|
|
value: "true"
|
|
- name: PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION
|
|
value: python
|
|
- name: FLAGD_HOST
|
|
value: flagd
|
|
- name: FLAGD_PORT
|
|
value: "8013"
|
|
- name: OTEL_EXPORTER_OTLP_ENDPOINT
|
|
value: http://$(OTEL_COLLECTOR_NAME):4317
|
|
resources:
|
|
limits:
|
|
memory: 500Mi # This is high to enable supporting the recommendationCache feature flag use case
|
|
|
|
shipping:
|
|
enabled: true
|
|
useDefault:
|
|
env: true
|
|
service:
|
|
port: 8080
|
|
podAnnotations:
|
|
resource.opentelemetry.io/service.namespace: otel-demo
|
|
env:
|
|
- name: SHIPPING_PORT
|
|
value: "8080"
|
|
- name: QUOTE_ADDR
|
|
value: http://quote:8080
|
|
- name: OTEL_EXPORTER_OTLP_ENDPOINT
|
|
value: http://$(OTEL_COLLECTOR_NAME):4317
|
|
- name: IPV6_ENABLED
|
|
value: "false"
|
|
resources:
|
|
limits:
|
|
memory: 20Mi
|
|
|
|
flagd:
|
|
enabled: true
|
|
imageOverride:
|
|
repository: "ghcr.io/open-feature/flagd"
|
|
tag: "v0.12.9"
|
|
useDefault:
|
|
env: true
|
|
replicas: 1
|
|
ports:
|
|
- name: rpc
|
|
value: 8013
|
|
- name: ofrep
|
|
value: 8016
|
|
podAnnotations:
|
|
resource.opentelemetry.io/service.namespace: otel-demo
|
|
env:
|
|
- name: FLAGD_METRICS_EXPORTER
|
|
value: otel
|
|
- name: FLAGD_OTEL_COLLECTOR_URI
|
|
value: $(OTEL_COLLECTOR_NAME):4317
|
|
- name: GOMEMLIMIT
|
|
value: 60MiB
|
|
resources:
|
|
limits:
|
|
memory: 75Mi
|
|
command:
|
|
- "/flagd-build"
|
|
- "start"
|
|
- "--port"
|
|
- "8013"
|
|
- "--ofrep-port"
|
|
- "8016"
|
|
- "--uri"
|
|
- "file:./etc/flagd/demo.flagd.json"
|
|
mountedEmptyDirs:
|
|
- name: config-rw
|
|
mountPath: /etc/flagd
|
|
# flagd-ui as a sidecar container in the same pod so the flag json file can be shared
|
|
sidecarContainers:
|
|
- name: flagd-ui
|
|
useDefault:
|
|
env: true
|
|
service:
|
|
port: 4000
|
|
env:
|
|
- name: FLAGD_METRICS_EXPORTER
|
|
value: otel
|
|
- name: OTEL_EXPORTER_OTLP_ENDPOINT
|
|
value: http://$(OTEL_COLLECTOR_NAME):4318
|
|
- name: FLAGD_UI_PORT
|
|
value: "4000"
|
|
- name: SECRET_KEY_BASE
|
|
value: yYrECL4qbNwleYInGJYvVnSkwJuSQJ4ijPTx5tirGUXrbznFIBFVJdPl5t6O9ASw
|
|
- name: PHX_HOST
|
|
value: localhost
|
|
resources:
|
|
limits:
|
|
memory: 250Mi
|
|
volumeMounts:
|
|
- name: config-rw
|
|
mountPath: /app/data
|
|
initContainers:
|
|
- name: init-config
|
|
image: busybox
|
|
command: ["sh", "-c", "cp /config-ro/demo.flagd.json /config-rw/demo.flagd.json && cat /config-rw/demo.flagd.json"]
|
|
volumeMounts:
|
|
- mountPath: /config-ro
|
|
name: config-ro
|
|
- mountPath: /config-rw
|
|
name: config-rw
|
|
additionalVolumes:
|
|
- name: config-ro
|
|
configMap:
|
|
name: flagd-config
|
|
|
|
kafka:
|
|
enabled: true
|
|
useDefault:
|
|
env: true
|
|
replicas: 1
|
|
ports:
|
|
- name: plaintext
|
|
value: 9092
|
|
- name: controller
|
|
value: 9093
|
|
podAnnotations:
|
|
resource.opentelemetry.io/service.namespace: otel-demo
|
|
env:
|
|
- name: KAFKA_ADVERTISED_LISTENERS
|
|
value: PLAINTEXT://kafka:9092
|
|
- name: OTEL_EXPORTER_OTLP_ENDPOINT
|
|
value: http://$(OTEL_COLLECTOR_NAME):4318
|
|
- name: KAFKA_HEAP_OPTS
|
|
value: "-Xmx400M -Xms400M"
|
|
- name: KAFKA_LISTENERS
|
|
value: PLAINTEXT://:9092,CONTROLLER://:9093
|
|
- name: KAFKA_CONTROLLER_LISTENER_NAMES
|
|
value: CONTROLLER
|
|
- name: KAFKA_CONTROLLER_QUORUM_VOTERS
|
|
value: 1@kafka:9093
|
|
resources:
|
|
limits:
|
|
memory: 700Mi
|
|
securityContext:
|
|
runAsUser: 1000 # appuser
|
|
runAsGroup: 1000
|
|
runAsNonRoot: true
|
|
|
|
llm:
|
|
enabled: true
|
|
useDefault:
|
|
env: true
|
|
service:
|
|
port: 8000
|
|
podAnnotations:
|
|
resource.opentelemetry.io/service.namespace: otel-demo
|
|
env:
|
|
- name: FLAGD_HOST
|
|
value: flagd
|
|
- name: FLAGD_PORT
|
|
value: "8013"
|
|
|
|
postgresql:
|
|
enabled: true
|
|
useDefault:
|
|
env: false
|
|
imageOverride:
|
|
repository: "postgres"
|
|
tag: "17.6"
|
|
replicas: 1
|
|
service:
|
|
port: 5432
|
|
podAnnotations:
|
|
resource.opentelemetry.io/service.namespace: otel-demo
|
|
io.opentelemetry.discovery.metrics/enabled: 'true'
|
|
io.opentelemetry.discovery.metrics/scraper: postgresql
|
|
io.opentelemetry.discovery.metrics/config: |
|
|
username: root
|
|
password: otel
|
|
metrics:
|
|
postgresql.blks_hit:
|
|
enabled: true
|
|
postgresql.blks_read:
|
|
enabled: true
|
|
postgresql.tup_fetched:
|
|
enabled: true
|
|
postgresql.tup_returned:
|
|
enabled: true
|
|
postgresql.tup_inserted:
|
|
enabled: true
|
|
postgresql.tup_updated:
|
|
enabled: true
|
|
postgresql.tup_deleted:
|
|
enabled: true
|
|
postgresql.deadlocks:
|
|
enabled: true
|
|
tls:
|
|
insecure: true
|
|
env:
|
|
- name: POSTGRES_USER
|
|
value: root
|
|
- name: POSTGRES_PASSWORD
|
|
value: otel
|
|
- name: POSTGRES_DB
|
|
value: otel
|
|
mountedConfigMaps:
|
|
- name: postgresql-init
|
|
mountPath: /docker-entrypoint-initdb.d
|
|
existingConfigMap: postgresql-init
|
|
resources:
|
|
limits:
|
|
memory: 100Mi
|
|
|
|
valkey-cart:
|
|
enabled: true
|
|
useDefault:
|
|
env: false
|
|
imageOverride:
|
|
repository: "valkey/valkey"
|
|
tag: "9.0.1-alpine3.23"
|
|
replicas: 1
|
|
ports:
|
|
- name: valkey-cart
|
|
value: 6379
|
|
podAnnotations:
|
|
resource.opentelemetry.io/service.namespace: otel-demo
|
|
io.opentelemetry.discovery.metrics/enabled: 'true'
|
|
io.opentelemetry.discovery.metrics/scraper: redis
|
|
io.opentelemetry.discovery.metrics/config: |
|
|
username: valkey
|
|
collection_interval: 10s
|
|
resources:
|
|
limits:
|
|
memory: 20Mi
|
|
securityContext:
|
|
runAsUser: 999 # valkey
|
|
runAsGroup: 1000
|
|
runAsNonRoot: true
|
|
|
|
opentelemetry-collector:
|
|
enabled: true
|
|
image:
|
|
repository: "otel/opentelemetry-collector-contrib"
|
|
fullnameOverride: otel-collector
|
|
mode: daemonset
|
|
presets:
|
|
hostMetrics:
|
|
enabled: true
|
|
kubernetesAttributes:
|
|
enabled: true
|
|
kubeletMetrics:
|
|
enabled: true
|
|
clusterMetrics:
|
|
enabled: true
|
|
annotationDiscovery:
|
|
metrics:
|
|
enabled: true
|
|
resources:
|
|
limits:
|
|
memory: 200Mi
|
|
service:
|
|
enabled: true
|
|
ports:
|
|
metrics:
|
|
enabled: true
|
|
config:
|
|
receivers:
|
|
otlp:
|
|
protocols:
|
|
http:
|
|
# Since this collector needs to receive data from the web, enable cors for all origins
|
|
# `allowed_origins` can be refined for your deployment domain
|
|
cors:
|
|
allowed_origins:
|
|
- "http://*"
|
|
- "https://*"
|
|
|
|
exporters:
|
|
otlp/jaeger:
|
|
endpoint: jaeger:4317
|
|
tls:
|
|
insecure: true
|
|
sending_queue:
|
|
batch:
|
|
otlphttp/prometheus:
|
|
endpoint: http://prometheus:9090/api/v1/otlp
|
|
tls:
|
|
insecure: true
|
|
sending_queue:
|
|
batch:
|
|
opensearch:
|
|
logs_index: otel-logs
|
|
logs_index_time_format: "yyyy-MM-dd"
|
|
http:
|
|
endpoint: http://opensearch:9200
|
|
tls:
|
|
insecure: true
|
|
|
|
processors:
|
|
memory_limiter:
|
|
check_interval: 5s
|
|
limit_percentage: 80
|
|
spike_limit_percentage: 25
|
|
resourcedetection:
|
|
detectors: [env, system]
|
|
transform:
|
|
error_mode: ignore
|
|
trace_statements:
|
|
# Sanitize spans to prevent span metrics cardinality explosion
|
|
# caused by non-compliant high cardinality span names:
|
|
# 1. Define missing http.route on key HTTP operations for meaningful operation names
|
|
# 2. Then normalize span names; http server spans lacking http.route default to operations "GET", "POST", etc.
|
|
- context: span
|
|
# FRONTEND SERVICE
|
|
conditions:
|
|
- span.kind == SPAN_KIND_SERVER and resource.attributes["service.name"] == "frontend" and span.attributes["http.route"] == nil
|
|
statements:
|
|
# Workaround for Next.js high cardinality span name issue: https://github.com/vercel/next.js/issues/54694
|
|
- set(span.attributes["http.route"], "/api/cart") where IsMatch(span.attributes["http.target"], "\\/api\\/cart") # e.g. # /api/cart
|
|
- set(span.attributes["http.route"], "/api/checkout") where IsMatch(span.attributes["http.target"], "\\/api\\/checkout") # e.g. # /api/checkout
|
|
- set(span.attributes["http.route"], "/api/products/{productId}") where IsMatch(span.attributes["http.target"], "\\/api\\/products\\/.*") # e.g. /api/products/1YMWWN1N4O
|
|
- set(span.attributes["http.route"], "/api/recommendations") where IsMatch(span.attributes["http.target"], "\\/api\\/recommendations") # e.g. # /api/recommendations?productIds=...
|
|
- set(span.attributes["http.route"], "/api/data") where IsMatch(span.attributes["http.target"], "\\/api\\/data.*") # e.g. # " /api/data?contextKeys=telescopes" or /api/data/?contextKeys=cameras
|
|
- context: span
|
|
statements:
|
|
# SANITIZE ALL SPAN NAMES TO PREVENT CARDINALITY EXPLOSION
|
|
- set_semconv_span_name("1.37.0", "unsanitized_span_name")
|
|
resource:
|
|
attributes:
|
|
- key: service.instance.id
|
|
from_attribute: k8s.pod.uid
|
|
action: insert
|
|
|
|
connectors:
|
|
spanmetrics: {}
|
|
|
|
service:
|
|
pipelines:
|
|
traces:
|
|
processors: [memory_limiter, resourcedetection, resource, transform, batch]
|
|
exporters: [otlp/jaeger, debug, spanmetrics]
|
|
metrics:
|
|
receivers: [otlp, spanmetrics]
|
|
processors: [memory_limiter, resourcedetection, resource, batch]
|
|
exporters: [otlphttp/prometheus, debug]
|
|
logs:
|
|
processors: [memory_limiter, resourcedetection, resource, batch]
|
|
exporters: [opensearch, debug]
|
|
telemetry:
|
|
metrics:
|
|
level: detailed
|
|
readers:
|
|
- periodic:
|
|
interval: 10000
|
|
timeout: 5000
|
|
exporter:
|
|
otlp:
|
|
protocol: http/protobuf
|
|
endpoint: http://otel-collector:4318
|
|
insecure: true
|
|
|
|
jaeger:
|
|
enabled: true
|
|
fullnameOverride: jaeger
|
|
jaeger:
|
|
storage:
|
|
type: memory
|
|
extraEnv:
|
|
- name: MEMORY_MAX_TRACES
|
|
value: "25000"
|
|
- name: PROMETHEUS_ADDR
|
|
value: prometheus:9090
|
|
- name: OTEL_COLLECTOR_HOST
|
|
value: otel-collector
|
|
- name: OTEL_COLLECTOR_PORT_HTTP
|
|
value: "4318"
|
|
- name: JAEGER_HOST
|
|
value: "0.0.0.0"
|
|
- name: JAEGER_GRPC_PORT
|
|
value: "4317"
|
|
resources:
|
|
limits:
|
|
memory: 600Mi
|
|
userconfig: |
|
|
service:
|
|
extensions: [jaeger_storage, jaeger_query, healthcheckv2]
|
|
pipelines:
|
|
traces:
|
|
receivers: [otlp]
|
|
processors: [batch]
|
|
exporters: [jaeger_storage_exporter]
|
|
telemetry:
|
|
resource:
|
|
service.name: jaeger
|
|
metrics:
|
|
level: detailed
|
|
readers:
|
|
- periodic:
|
|
interval: 10000
|
|
timeout: 5000
|
|
exporter:
|
|
otlp:
|
|
protocol: http/protobuf
|
|
endpoint: http://${env:OTEL_COLLECTOR_HOST}:${env:OTEL_COLLECTOR_PORT_HTTP}
|
|
insecure: true
|
|
logs:
|
|
level: info
|
|
extensions:
|
|
healthcheckv2:
|
|
use_v2: true
|
|
http:
|
|
endpoint: 0.0.0.0:13133
|
|
jaeger_query:
|
|
storage:
|
|
traces: memory_backend
|
|
metrics: metrics_backend
|
|
base_path: /jaeger/ui
|
|
jaeger_storage:
|
|
backends:
|
|
memory_backend:
|
|
memory:
|
|
max_traces: ${env:MEMORY_MAX_TRACES}
|
|
metric_backends:
|
|
metrics_backend:
|
|
prometheus:
|
|
endpoint: "http://${env:PROMETHEUS_ADDR}"
|
|
normalize_calls: true
|
|
normalize_duration: true
|
|
|
|
receivers:
|
|
otlp:
|
|
protocols:
|
|
grpc:
|
|
endpoint: ${env:JAEGER_HOST}:${env:JAEGER_GRPC_PORT}
|
|
|
|
processors:
|
|
batch:
|
|
|
|
exporters:
|
|
jaeger_storage_exporter:
|
|
trace_storage: memory_backend
|
|
|
|
prometheus:
|
|
enabled: true
|
|
alertmanager:
|
|
enabled: false
|
|
configmapReload:
|
|
prometheus:
|
|
enabled: false
|
|
kube-state-metrics:
|
|
enabled: false
|
|
prometheus-node-exporter:
|
|
enabled: false
|
|
prometheus-pushgateway:
|
|
enabled: false
|
|
server:
|
|
fullnameOverride: prometheus
|
|
extraFlags:
|
|
- "enable-feature=exemplar-storage"
|
|
- "web.enable-otlp-receiver"
|
|
retention: 7d
|
|
tsdb:
|
|
out_of_order_time_window: 30m
|
|
otlp:
|
|
keep_identifying_resource_attributes: true
|
|
# Recommended attributes to be promoted to labels.
|
|
promote_resource_attributes:
|
|
- service.instance.id
|
|
- service.name
|
|
- service.namespace
|
|
- service.version
|
|
- cloud.availability_zone
|
|
- cloud.region
|
|
- deployment.environment.name
|
|
# When deploying on Kubernetes, resource attributes used to identify the
|
|
# kubernetes resources in dashboards and alerts.
|
|
- k8s.cluster.name
|
|
- k8s.container.name
|
|
- k8s.cronjob.name
|
|
- k8s.daemonset.name
|
|
- k8s.deployment.name
|
|
- k8s.job.name
|
|
- k8s.namespace.name
|
|
- k8s.node.name
|
|
- k8s.pod.name
|
|
- k8s.replicaset.name
|
|
- k8s.statefulset.name
|
|
- container.name
|
|
# When deploying on VMs, resource attributes used to identify
|
|
# the host in dashboards and alerts.
|
|
- host.name
|
|
# PostgreSQL resource attributes produced by the OTel Collector PostgreSQL receiver
|
|
# and used in dashboards and alerts.
|
|
# See https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/postgresqlreceiver/metadata.yaml
|
|
- postgresql.database.name
|
|
- postgresql.schema.name
|
|
- postgresql.table.name
|
|
- postgresql.index.name
|
|
persistentVolume:
|
|
enabled: false
|
|
service:
|
|
servicePort: 9090
|
|
resources:
|
|
limits:
|
|
memory: 400Mi
|
|
|
|
grafana:
|
|
enabled: true
|
|
fullnameOverride: grafana
|
|
testFramework:
|
|
enabled: false
|
|
grafana.ini:
|
|
auth:
|
|
disable_login_form: true
|
|
auth.anonymous:
|
|
enabled: true
|
|
org_name: Main Org.
|
|
org_role: Admin
|
|
server:
|
|
root_url: "%(protocol)s://%(domain)s:%(http_port)s/grafana"
|
|
serve_from_sub_path: true
|
|
adminPassword: admin
|
|
plugins:
|
|
- grafana-opensearch-datasource
|
|
sidecar:
|
|
alerts:
|
|
enabled: true
|
|
dashboards:
|
|
enabled: true
|
|
datasources:
|
|
enabled: true
|
|
resources:
|
|
limits:
|
|
cpu: 100m
|
|
memory: 100Mi
|
|
resources:
|
|
limits:
|
|
memory: 175Mi
|
|
|
|
opensearch:
|
|
enabled: true
|
|
fullnameOverride: opensearch
|
|
clusterName: demo-cluster
|
|
nodeGroup: otel-demo
|
|
singleNode: true
|
|
opensearchJavaOpts: "-Xms400m -Xmx400m"
|
|
persistence:
|
|
enabled: false
|
|
extraEnvs:
|
|
- name: "bootstrap.memory_lock"
|
|
value: "true"
|
|
- name: "DISABLE_INSTALL_DEMO_CONFIG"
|
|
value: "true"
|
|
- name: "DISABLE_SECURITY_PLUGIN"
|
|
value: "true"
|
|
resources:
|
|
limits:
|
|
memory: 1100Mi
|