diff --git a/.gitlab/ci/observability-backend.gitlab-ci.yml b/.gitlab/ci/observability-backend.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..108e09491c922da755bc33ea8cf6985ad0227ddd
--- /dev/null
+++ b/.gitlab/ci/observability-backend.gitlab-ci.yml
@@ -0,0 +1,39 @@
+# Triggers downstream e2e tests in gitlab-org/opstrace/opstrace
+# These e2e tests live in gitlab-org/opstrace/opstrace as a result
+# of opstrace being brought in through an acquisition.
+.e2e-observability-backend-base:
+  stage: test
+  needs: []
+  extends:
+    - .observability-backend:rules
+  inherit:
+    variables: false
+  variables:
+    TEST_GITLAB_COMMIT: $CI_COMMIT_SHA
+  trigger:
+    project: gitlab-org/opstrace/opstrace
+    strategy: depend
+
+# e2e:observability-backend uses $CI_COMMIT_REF_NAME to
+# checkout a branch in gitlab-org/opstrace/opstrace with
+# the same name as the branch in this repo. Because opstrace
+# is a different codebase, we match branch names without
+# commit SHA.
+e2e:observability-backend:
+  extends: .e2e-observability-backend-base
+  trigger:
+    project: gitlab-org/opstrace/opstrace
+    branch: $CI_COMMIT_REF_NAME
+
+# e2e:observability-backend-main-branch will trigger
+# an e2e test pipeline that checks out GitLab to
+# $CI_COMMIT_SHA and Opstrace to the latest commit
+# on main branch. Devs run this manually on local
+# installs today periodically during development
+# and this manual job increases dev velocity
+# and testing reliablity.
+e2e:observability-backend-main-branch:
+  extends: .e2e-observability-backend-base
+  trigger:
+    project: gitlab-org/opstrace/opstrace
+    branch: main
diff --git a/.gitlab/ci/rules.gitlab-ci.yml b/.gitlab/ci/rules.gitlab-ci.yml
index bca285d3f143460b33cfd28ce6745b1947b652b7..ce4f8386ca70f3eabd273384cf65f3768705fd2b 100644
--- a/.gitlab/ci/rules.gitlab-ci.yml
+++ b/.gitlab/ci/rules.gitlab-ci.yml
@@ -3013,3 +3013,17 @@
       when: manual
     - <<: *if-merge-request-labels-run-all-rspec
       when: manual
+
+###############################
+# Observability Backend rules #
+###############################
+.observability-backend:rules:
+  rules:
+    - <<: *if-merge-request
+      changes: *code-patterns
+      when: manual
+      allow_failure: true
+    - <<: *if-merge-request
+      changes: *ci-patterns
+      when: manual
+      allow_failure: true