Dynatrace Integration as observability vendors - #1098
Open
oguzhan78 wants to merge 14 commits into
Open
Conversation
Signed-off-by: Rohan R. Arora <rohan@rohanarora.name>
Signed-off-by: Rohan R. Arora <rohan@rohanarora.name>
Introduce shared scaffolding for deploying third-party SaaS observability vendors as SRE tools: - tools_vendors registry (defaults/main/vendors.yaml) and non-secret observability_vendors config (example), wired into tools_configuration.vendors via manage_tools.yaml. - Reusable ownership-safe helpers: ensure_vendor_namespace, assert_vendor_resource_ownership, delete_vendor_namespace_if_safe. - .gitignore for token-bearing onboarding artifacts; allowlist a Jinja-template false positive in .secrets.baseline. Signed-off-by: Rohan R. Arora <rohan@rohanarora.name>
Deploy the Dynatrace operator and consume the user-provided dynakube.yaml (Secret + DynaKube CRs) as authoritative. Includes manifest validation (kinds/apiVersion/namespace, multi-DynaKube), namespace ownership and collision checks, healthy-status readiness waits, OpenShift support via the chart's platform=openshift value, and a staged CSI-aware, credential-independent uninstall. Signed-off-by: Rohan R. Arora <rohan@rohanarora.name>
- AWX credential types (Datadog, Dynatrace) with file/extra-var injectors, reconciled present/absent by the enabled flag; non-secret config forwarded to Deploy/Undeploy-Tools via an allowlist projection; vendor credentials scoped to the tools workflow nodes only (node_tools_credentials). - argument_specs updated in the generator template and the generated file. - Molecule coverage: credential-free vendor_contract (validation, secret rejection, projection allowlist) and opt-in deployment_vendors live test. - docs/observability-vendors.md design and status. Signed-off-by: Rohan R. Arora <rohan@rohanarora.name>
…y but it needs testing with ITBench scenario running
…ipt has been updated to make sure dynatrace is removed last since it has injections on Prometheus and application pods for otel data collection."
changes in main branch are added to the integration branch
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.
feat(sre): observability vendor framework + Dynatrace integration & Grail recorder
Summary
This PR adds a pluggable observability-vendor framework to the SRE scenarios and uses it to onboard Dynatrace (and Datadog) as first-class, toggleable vendors alongside the existing in-cluster stack. On top of agent deployment of Dynatrace, it introduces a Dynatrace Grail recorder that exports telemetry (metrics, spans, logs, events, and Kubernetes metrics) back out at scenario teardown for offline analysis.
Every vendor is disabled by default, so existing scenarios are unaffected unless a vendor is explicitly enabled.
What's included
Vendor framework (tools role)
manage_tools.yamland thetoolsrole, with per-vendor tasks, argument specs, and namespace ownership guards (ensure_vendor_namespace,assert_vendor_resource_ownership,delete_vendor_namespace_if_safe).deployment_vendorsandvendor_contract(with Datadog valid / mismatched-secret / with-secret fixtures).Dynatrace (agent)
install_dynatrace.yaml/uninstall_dynatrace.yaml: deploys the DynaKube CR from an operator-provideddynakube.yaml, pinned viadynakube_api_versionfor consistent readiness/cleanup.install_opentelemetry_demo.yamlandvalues.j2so app + Prometheus telemetry flow to Dynatrace.Datadog (agent)
install_datadog.yaml/uninstall_datadog.yaml, manifest validation, and credential handling via env vars (DATADOG_API_KEY,DATADOG_APP_KEY).Dynatrace Grail recorder (export — new)
[scenario start → now].stamp_dynatrace_start_time.yaml(runs in the pre-fault-injection phase) writes the scenario start into a ConfigMap in thedata-recordersnamespace, so the timestamp survives across separate install/uninstall playbook runs.install_dynatrace_recorder.yamlreads a platform token (prefixdt0s16., Grail read scope) from a gitignored file (platform_token_path, undersecrets/) and injects it into the recorder Job as an env value — mirroring the ClickHouse recorder'sCLICKHOUSE_PASSWORDapproach. No env export or Kubernetes Secret required.gather.pyruns DQL queries and writes JSON/CSV datasets intoobservability_information_from_dynatrace; wired intouninstall.yaml's export step.run_dynatrace_recorder.yaml: a standalone playbook to deploy the recorder Job manually against an already-running scenario (export only — no cronjob suspend, no namespace delete).AWX
datadog_injectors,dynatrace_injectors), credential/job/workflow configuration, and passing thevendorsvar into AWX (withno_log).Config, docs, and secrets hygiene
scenarios/sre/docs/observability-vendors.md(543 lines) documenting the framework and both vendors.observability_vendors.yaml.exampleandrunner/vendors.yaml.exampletemplates..gitignore: ignoreexports/; newscenarios/sre/.gitignoreignoressecrets/and the AWX runnervendors.yaml(must be Ansible-Vault encrypted, never committed in plaintext)..secrets.baselineupdated.Configuration
Enable and configure per vendor in
inventory/group_vars/environment/observability_vendors.yaml(see the example file). For the recorder: