feat: add OTel observability benchmark demo - #2
Draft
Ladas wants to merge 5 commits into
Draft
Conversation
Ladas
force-pushed
the
feat/otel-benchmark-demo
branch
7 times, most recently
from
August 15, 2026 07:52
bf25423 to
c6ac157
Compare
Extend ClusterSpec with a ports field (reusing PortMapping) that renders as extraPortMappings in the KIND cluster config. Required for macOS where MetalLB LoadBalancer IPs are unreachable from the host. Port mappings are applied to the first control-plane node. Validation rejects zero ports and duplicate host port bindings. Signed-off-by: Ladislav Smola <lsmola@redhat.com>
Add composable OTel benchmark example with: - examples/stacks/observability/ (shared OTel Collector + dashboards) - examples/stacks/mock-backends/ (Fortio echo + inference-sim) - examples/otel-benchmark/ (forge.yaml, configs, scripts, README) Deploys Prometheus, Grafana, Tempo, Loki, OTel Collector, MLflow, and Praxis proxy on KIND. Includes A/B/C benchmark scripts for measuring OTel tracing overhead. Signed-off-by: Ladislav Smola <lsmola@redhat.com>
- Add Scenario 2: AI benchmark with inference-sim (POST /v1/chat/completions) - benchmark-ai.sh: A/B/C comparison at 500 RPS (baseline/noop/full) - report-ai.sh: generate markdown report from AI benchmark results - ai-otel-full.yaml: config with /v1/* -> inference, / -> echo routing - Fix OTel collector: remove broken MLflow exporter (protobuf vs JSON mismatch) - Fix MLflow helm: enable databaseMigration, set service.type=NodePort - Fix praxis manifest: correct ENTRYPOINT comment for AI vs core images - Update README with both scenarios, span tree, build instructions Signed-off-by: Ladislav Smola <lsmola@redhat.com>
…orkflow Signed-off-by: Ladislav Smola <lsmola@redhat.com>
- Add access_log filter to baseline and otel-noop configs so all three core benchmark runs use identical filter chains (4 filters, 10 spans) - Create ai-baseline.yaml and ai-otel-noop.yaml for per-run config isolation in the AI benchmark (prevents noop from exporting via hardcoded otlp_endpoint in ai-otel-full.yaml) - Update benchmark-ai.sh to use per-run config files - Fix README dashboard titles to match actual Grafana JSON titles - Fix Known Issues: collector exports to Tempo only, not MLflow - Fix otel-collector stack description (remove "+ MLflow") - Fix praxis.yaml stale comments (setup.sh reference, phantom args) - Add labels to Service metadata so ServiceMonitor selector matches - Pin mock backend images (fortio:1.75.2, inference-sim:v0.10.2) Signed-off-by: Ladislav Smola <lsmola@redhat.com>
Ladas
force-pushed
the
feat/otel-benchmark-demo
branch
from
August 15, 2026 08:48
c6ac157 to
23d5772
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
extraPortMappingssupport toClusterSpecfor macOS KIND port forwardingStack deployed by
forge upPrometheus + Grafana 11.x, Tempo, Loki + Promtail, OTel Collector, MLflow, Fortio echo, inference-sim, Praxis proxy (OTel-enabled)
Quick start
See
examples/otel-benchmark/README.mdfor full instructions.Dashboards
Benchmark Results (2026-08-14)
Scenario 1: Core Praxis OTel Overhead
Platform: KIND (1 node, macOS arm64) | Backend: Fortio echo | Rate: 2000 RPS x 30s x 3 runs
10 spans per request (root + 8 per-filter + upstream_exchange).
praxis:dev)praxis:dev-otel)praxis:dev-otel+ export)Scenario 2: AI Praxis with Inference Sim
Platform: KIND (1 node, macOS arm64) | Backend: inference-sim (mock LLM) | Rate: 500 RPS x 30s x 3 runs
11 spans per request (core spans + response_body phase).
praxis-ai:dev)praxis-ai:dev-otel)praxis-ai:dev-otel+ export)AI Span Tree
Dependencies (unmerged PRs)
Build requires cherry-picking these OTel PRs onto praxis
main: