Splunk Observability OTel Collector Setup
Prerequisites
| Tool or access |
Purpose |
Verify |
| Bash and Python 3 |
Run bundled setup and validation helpers |
bash --version && python3 --version |
| Required product/platform access |
Inspect or configure the selected target |
Complete the documented preflight |
| Credential files for live modes |
Keep secrets out of chat |
Verify paths only |
Workflow Overview
┌───────────┐ ┌───────────────┐ ┌───────────────┐ ┌─────────────────┐
│ Preflight │ → │ Render/review │ → │ Apply/handoff │ → │ Validate evidence │
└───────────┘ └───────────────┘ └───────────────┘ └─────────────────┘
When to Activate
- Rendering, preflighting, applying, validating, diagnosing, and removing the Splunk Distribution of OpenTelemetry
Collector for Kubernetes and Linux; audit and stage Splunkbase apps 7125, 8698, and 8699 through deployment
servers, Linux.
- Preview and review the splunk observability otel collector setup workflow before any live apply phase.
- Diagnose failed prerequisites, generated assets, configuration, or validation evidence.
Scope
Follow the documented read-only or render-first path whenever it is available.
This skill does not imply permission to mutate live systems. Require explicit
apply flags, protected credentials, and operator review for state changes.
Examples
Inspect the supported setup modes before selecting one:
bash skills/splunk-observability-otel-collector-setup/scripts/setup.sh --help
Expected output: usage, supported modes, and required arguments are displayed
without changing the target environment.
Inspect validation modes before running completion checks:
bash skills/splunk-observability-otel-collector-setup/scripts/validate.sh --help
Expected output: offline, live, and completion options are displayed when the
skill supports them; help exits without mutation.
Troubleshooting
| Issue |
Cause |
Resolution |
| Preflight fails |
A required tool or access path is missing |
Resolve it before rendering or applying |
| Rendered assets are incomplete |
Required non-secret inputs are absent |
Complete intake and render again |
| Apply is blocked |
Review, credentials, or explicit acceptance is missing |
Use the documented handoff |
| Validation is incomplete |
Live evidence is unavailable |
Record the gap and keep completion open |
Audited baseline
This workflow is pinned and tested against:
- Linux Collector and auto-instrumentation packages
0.158.0.
splunk-otel-collector Helm chart 0.158.0, fetched as the exact GitHub
release archive with SHA-256
088a93ebbcfbecf8e6f7ef3651747b65bbad443f0823489768bd4901cce0a274.
- Chart-selected Collector and auxiliary images are rewritten to the audited
manifest digests recorded in
references/sources.md; unknown custom images
are accepted only when already pinned with @sha256:<64 lowercase hex>.
- Splunkbase apps
7125, 8698, and 8699, version 0.158.0, published
August 7, 2026 and inspected August 20, 2026. App 7125 is the multi-OS/root
artifact; 8698 and 8699 are the Linux and Windows x86_64 split artifacts.
These Splunkbase pins are a separate artifact chain from the Linux collector,
auto-instrumentation, and Helm chart pins above and do not move together.
- Splunk Platform versions explicitly listed for this TA release:
9.0
through 10.5, so --splunk-version 10.5 is accepted. A value outside the
listed trains is still rejected. Omitting --splunk-version skips that
optional compatibility assertion entirely; package audit/rendering on its own
does not certify the package for any specific train.
Treat a newer release as unaudited until --check-upstream, the regression
suite, and the source ledger in references/sources.md have been updated.
Linux rendering always emits executable apply packets, so Collector,
auto-instrumentation, and OBI versions other than these reviewed pins fail
closed rather than producing an unaudited installer.
The workstation or automation host running setup.sh/render_assets.py
requires Python 3.9+. Set PYTHON to an appropriate executable when the system
default is older. Generated Linux target packets have a separate Python 3.6+
minimum and preflight it before token verification or network access. Generated
Kubernetes packets require Helm 3.9+ or Helm 4 and Python 3.8+; Helm 4 uses
the rendered local postrenderer/v1 subprocess plugin.
What this skill owns
The implemented paths are:
- Official Kubernetes Helm deployments, including agent, cluster receiver,
gateway, Windows releases, FIPS image selection, Operator
auto-instrumentation, OBI, Target Allocator, Kubernetes entities/events,
container and Linux-node journald collection, Platform HEC or Splunk Connect
for OTLP log routing, TLS/mTLS file handoff, preflight, rollout checks, and
uninstall.
- Official Linux package-repository installer deployments in agent or gateway
mode, with a pinned installer checksum, local or SSH execution, loopback-safe
agent defaults, stdin token transport, health checks, doctor output, support
bundle, and confirmation-gated uninstall.
- Splunk Add-On for OpenTelemetry Collector (
7125, 8698, 8699) package
audit and staging for deployment servers, Linux heavy forwarders, or Linux
Universal Forwarders, with per-artifact digest pinning, archive hardening,
no-follow local/ preservation, atomic replacement, a private
out-of-app-tree backup, confirmation-gated backup retention, ownership
preservation, and dashboard/no-dashboard evidence. Windows-only 8699
uses deployment-server and Agent Management delivery because local apply
assets are Bash/Python.
- Collector-side custom configuration through a reviewed Linux
--collector-config or guarded Helm --extra-values-file. The skill does not
pretend that an opaque overlay is a fully typed pipeline authoring model.
Native Splunk Observability Metrics Pipeline Management is owned by
splunk-observability-metrics-pipeline-setup; it is downstream aggregation and
routing, not collector pre-ingest processing.
Product routing
Installing a Collector is not the same as proving a product is ready. Route and
validate each requested product explicitly:
| Product or signal |
Base-skill responsibility |
Required completion evidence |
| Infrastructure Monitoring |
Host/Kubernetes metrics, metadata, internal health |
Collector healthy and host/cluster visible in Observability |
| APM |
OTLP trace receiver/export, optional gateway |
Instrumented workload plus a trace visible in APM |
| AlwaysOn Profiling |
Explicit opt-in and supported language agent |
Profile data visible for the intended service |
| Secure Application |
Chart destination only; workload instrumentation still required |
Supported workload annotated/instrumented and security trace visible |
| Kubernetes container/journald/extra-file logs |
Separate typed Platform pipeline plus HEC /services/collector/event or Splunk Connect for OTLP |
Target index receives expected source types and fields; source scope is reviewed |
| Kubernetes events/entities |
Explicit experimental gates |
Event/entity visible; maturity warning recorded |
| Fleet Management / OpAMP |
TA feature-gate handoff only |
Account entitlement and managed Collector visible in Fleet Management |
| Kubernetes zero-code instrumentation |
Delegate to splunk-observability-k8s-auto-instrumentation-setup |
Child-skill workload rollout and trace evidence |
| Database Monitoring |
Delegate to splunk-observability-database-monitoring-setup |
DBMon receiver and UI evidence |
| AI Agent / AI Infrastructure Monitoring |
Delegate to splunk-observability-ai-agent-monitoring-setup |
Instrumented AI workload, evaluation/metric evidence |
| AI Security Monitoring |
Delegate Cisco AI Defense instrumentation to splunk-observability-ai-agent-monitoring-setup |
Security span correlation, licensed integration, and risk UI evidence |
| Browser RUM / Session Replay |
Delegate general setup to splunk-observability-browser-rum-setup; use splunk-observability-k8s-frontend-rum-setup only for Kubernetes frontend injection |
Browser beacon and UI evidence |
| Mobile RUM |
Delegate to splunk-observability-mobile-rum-setup; mobile beacons bypass this Collector |
Mobile session/beacon and UI evidence |
| Synthetics |
Delegate to splunk-observability-synthetics-setup |
Test run, result, and detector evidence |
| SLOs |
Delegate to splunk-observability-slo-setup |
SLI data, SLO calculation, and alert evidence |
| Dashboards and detectors |
Delegate to splunk-observability-dashboard-builder and splunk-observability-native-ops |
Dashboard population and detector state |
| DXA, AI Assistant, Observability Mobile, Related Content, and deep product UI |
Delegate to splunk-observability-deep-native-workflows |
Product-specific navigation and populated UI evidence |
| SignalFlow and data tools |
Delegate native operations to splunk-observability-native-ops / splunk-observability-deep-native-workflows |
Executed analytics or metadata workflow evidence |
| ITSI / ITE Work / App for Content Packs |
Separate Splunk Platform workflows: splunk-itsi-setup and splunk-itsi-config |
Platform app/content-pack and ITSI object evidence |
| Metrics Pipeline Management |
Delegate to splunk-observability-metrics-pipeline-setup |
Rule-set and post-rule metric evidence |
| AWS Lambda APM |
Delegate to splunk-observability-aws-lambda-apm-setup |
Instrumented invocation and trace evidence |
| Coding agents |
Delegate to splunk-observability-coding-agent-instrumentation-setup |
Agent telemetry at every requested destination |
| ThousandEyes |
Delegate to splunk-observability-thousandeyes-integration |
Linked test/metric and dashboard evidence |
| Splunk Connect for OTLP |
Delegate receiver-side setup to splunk-connect-for-otlp-setup |
OTLP receiver health and target-index evidence |
| Network Explorer |
--enable-network-explorer enforces the supported one-replica gateway profile and renders the separate upstream eBPF-chart handoff |
eBPF DaemonSet, representative tcp.*/udp.*/dns.*/http.* metrics, and populated Network Explorer UI evidence |
See references/coverage.md for deployment-method and feature classification.
Non-negotiable safety rules
- Never request or render a token value. Accept only paths to token files.
- Reject direct and
--flag=value token arguments without echoing their value.
- Token and private-key files must be single-link, non-symlink regular files,
nonempty, mode
600, and contain no NUL, newline, or whitespace. Tokens are
capped at 16 KiB and use only the environment/config-safe
A-Za-z0-9._~+/=- alphabet, which includes the documented base64 token
characters. Linux reads one no-follow descriptor into memory and never
rereads the source path or creates a temporary token file.
- Rendered base values and copied overlays are integrity-bound. The only mutable
values overlay is a schema-constrained Secret revision annotation.
- Generated files, including root
metadata.json, are published through
same-directory atomic replacement and refuse an existing final-component
symlink. A render never follows that symlink into an arbitrary target.
- Existing Kubernetes Secrets and PriorityClasses are mutated or deleted only
when exact skill/release/namespace ownership annotations match. Create uses
an atomic create, updates use UID/resourceVersion-bound replace, and deletes
use UID/resourceVersion preconditions so a concurrent replacement cannot be
adopted or removed. Secret and PriorityClass cleanup each require a separate
confirmation variable.
- Keep
secret.create=false; create the Kubernetes Secret from files. Guarded
extra values may not override secret creation or contain inline secret keys.
- Pin the chart, Collector, Linux installer URL, and Linux installer SHA-256.
A Linux installer mirror may change the HTTPS URL, but executable packets
still require the exact audited digest; no arbitrary digest override exists.
- Download the chart archive once into the packet cache, verify it before every
use, and pass that same local archive to preflight and install. The
integrity-bound post-renderer must replace every audited mutable image with
its digest, reject unknown tags/digests in audited repositories, and reject
any unpinned custom image. Status rechecks live workload, Instrumentation,
and pod specs so an admission-time image rewrite fails validation.
- Before Helm preflight, install, status, or uninstall, inspect the exact-name
release across all common Helm 3/4 statuses and require the rendered
namespace plus a
splunk-otel-collector-* chart identity. Installation
accepts only an absent or deployed owned release; uninstall accepts only an
owned deployed/failed release. Never replace or delete a foreign same-name
chart.
- When the chart installation Job owns the Instrumentation CR, refuse foreign
ownership, snapshot an existing owned CR and Helm revision before mutation,
and require the post-install revision to be exactly the expected successor.
If ownership validation fails, roll an existing release back to the captured
revision or uninstall a new release, then restore the CR. A concurrent Helm
revision refuses automatic rollback and retains the recovery snapshot.
Repeat ownership checks before status or post-Helm-uninstall cleanup.
- The audited installation Job uses kubectl
v1.35.1, so its executable
compatibility gate covers Kubernetes server minors 1.34 through 1.36.
Outside that range, audit and pin a matching image in a future skill update.
Disabling the Job selects upstream resource mode; Helm 4 first install is
rejected and must use the upstream two-step operator/webhook-ready handoff.
- The Linux agent binds to
127.0.0.1 unless the operator explicitly chooses a
broader interface. Gateway mode uses the upstream 0.0.0.0 default.
- Do not generate removed
--trace-url or deprecated --hec-url installer
flags. The tagged installer exposes native-host Platform flags, but its token
option is argv-based; this workflow refuses to put a HEC token on argv and
routes native-host Platform data through a reviewed custom config or UF/TA
handoff.
- SSH install streams the token over stdin and never copies it to a remote file.
- Linux local/SSH preflight requires Bash, curl, Python 3.6+, tar, a SHA-256
tool, active systemd, the pinned installer's system-account utilities, the
matching
apt-get, yum/dnf, or zypper package tools, and root or
passwordless noninteractive sudo. It enforces the tagged installer's exact
distro/version and amd64/arm64 matrix. OBI additionally requires
sha256sum and gzip to already exist so preflight never installs a package.
It rejects an existing install and proves custom-config
traversal/readability before package mutation.
- Linux OBI install and status re-hash the extracted
v0.6.0 executable
against the independently audited amd64 or arm64 binary digest after the
upstream release-archive checksum succeeds.
- Linux status, doctor, and support-bundle helpers hash-verify the generated
redactor and fail closed when privileged collection or redaction fails.
Doctor results distinguish complete/healthy (
0), complete/unhealthy (1),
and diagnostics-incomplete (2) with a matching final completion marker.
Support bundles publish complete evidence for both healthy and unhealthy
results, but refuse incomplete or marker-mismatched diagnostics. Bundles
record diagnostic-state.txt, use a private staging directory, mode 600,
atomic no-replace publication, and reject existing or symlink output paths.
- Linux uninstall requires a second explicit confirmation before allowing the
upstream uninstaller to remove detected auto-instrumentation, deletes only the
installer-generated token-bearing environment files, and still requires token
revocation as a separate operating step.
--apply-ta must not use placeholder secret mode. Placeholder templates are
disabled and render-only.
- TA preflight, staging, local-overlay apply, and backup management require an
external Python
3.6 or newer interpreter with os.O_NOFOLLOW and
os.O_DIRECTORY; preflight proves this before package work begins.
- Splunkbase marks the audited TA artifacts FIPS-incompatible. FedRAMP status
is not a Splunkbase metadata field; report it as not documented, not as a
validated false claim.
--fips-enabled selects and verifies the audited Kubernetes FIPS image; it
does not certify a FedRAMP deployment. Splunk's previously indexed FedRAMP
draft included hosting, agent, instrumentation, and integration limits, but
its dedicated public Help URL currently returns 404 and contained
contradictory authorization wording. Verify the live FedRAMP Marketplace
package, order/contract, hosting boundary, and supported-feature list with
Splunk and the compliance owner instead of treating this packet as evidence.
- Do not enable Splunk Platform traces without
--accept-experimental-platform-traces; chart capability and product support
documentation currently conflict.
Workflow
- Determine the target and requested products/signals. Do not use
--all-signals as a substitute for product discovery.
- Collect only non-secret inputs: realm, topology, cluster/host identity,
destination endpoints/indexes, and secret-file paths.
- Render first.
- Review
metadata.json, warnings, values/config, package audit, and exact
apply commands.
- Run static validation. Use
--check-upstream when network access is
available.
- Apply only after explicit authorization.
- Run the rendered status/doctor workflow and prove backend telemetry for each
enabled product. Record
configured, instrumented, telemetry observed,
and product UI verified separately.
Safe defaults
- Kubernetes: metrics and traces on; container logs, journald, profiling, events, discovery,
Operator auto-instrumentation, OBI, Secure Application, entities, and Target
Allocator off. Agent and cluster receiver on. Gateway off; when enabled, three
replicas.
- Linux: agent mode,
512 MiB, loopback bind, no discovery, no
auto-instrumentation, no profiling, no SDK metric/log exporter overrides, and
no OBI.
- TA: render only, deployment-server target, agent mode, placeholder secret
mode, official digest required for actionable output, and a no-match
server-class whitelist until the operator supplies a reviewed client filter.
Render examples
Kubernetes:
bash skills/splunk-observability-otel-collector-setup/scripts/setup.sh \
--render-k8s \
--realm us0 \
--cluster-name production-cluster \
--chart-version 0.158.0 \
--o11y-token-file /secure/splunk_o11y_token
Kubernetes logs through HEC:
bash skills/splunk-observability-otel-collector-setup/scripts/setup.sh \
--render-k8s \
--realm us0 \
--cluster-name production-cluster \
--enable-logs \
--platform-hec-url https://splunk.example.com:8088/services/collector/event \
--platform-hec-index k8s_logs \
--platform-hec-token-file /secure/splunk_hec_token \
--o11y-token-file /secure/splunk_o11y_token
Platform-only Kubernetes logs through Splunk Connect for OTLP:
bash skills/splunk-observability-otel-collector-setup/scripts/setup.sh \
--render-k8s \
--cluster-name production-cluster \
--disable-metrics --disable-traces \
--enable-logs \
--platform-otlp-endpoint splunk-otlp.example.com:4317
Linux:
bash skills/splunk-observability-otel-collector-setup/scripts/setup.sh \
--render-linux \
--realm us0 \
--o11y-token-file /secure/splunk_o11y_token
TA package audit (use the matching 7125/8698/8699 filename):
bash skills/splunk-observability-otel-collector-setup/scripts/setup.sh \
--render-ta \
--realm us0 \
--ta-package-path ./splunk-add-on-for-opentelemetry-collector_01542.tgz \
--ta-target deployment-server \
--ta-serverclass-whitelist 'otel-uf-*'
template.example is a manual intake worksheet, not an executable spec. Map
reviewed values to CLI flags; never assume the setup script reads
template.local.
Validation
bash skills/splunk-observability-otel-collector-setup/scripts/validate.sh \
--check-k8s --check-linux --output-dir splunk-observability-otel-rendered
bash skills/splunk-observability-otel-collector-setup/scripts/validate.sh \
--check-k8s --check-linux --check-upstream \
--output-dir splunk-observability-otel-rendered
# Live controller, pod-readiness, and audited-image checks without reading
# Helm release Secrets:
bash skills/splunk-observability-otel-collector-setup/scripts/validate.sh \
--output-dir splunk-observability-otel-rendered \
--k8s-workloads-only --kube-context CONTEXT
Full live status additionally enforces supported kubectl/API-server version
skew and scans both primary Collector pods and auxiliary chart pods. Confirmed
SignalFx conversion drops caused by the 36-dimension limit fail the gate as
telemetry loss. Log-retrieval failures and matched log bodies are suppressed;
only rule counts are reported. Both live paths require rendered core container
names/controllers to retain their exact audited image pins while allowing
unrelated auxiliary containers only when their images are digest-pinned. The
workload-only path unions both label inventories by Pod identity, then fetches
each Pod once for a coherent readiness/image snapshot. It intentionally does
not read logs and therefore cannot provide log-loss evidence.
The repository-wide AWS/EKS/O11y staging gate composes this secret-free mode
with AWS identity, EKS endpoint, auto-instrumentation, APM, and AWS integration
checks. See ../../scripts/staging/README.md.
TA Completion Gate
For TA/add-on work, also follow
../shared/ta_completion_gate.md. The
data ingest path must be configured and validated. Discover any
pre-built/package-shipped dashboards, then prove they are visible,
macro-aligned, and returning data. If the package ships no dashboards, record
that explicit package evidence. The currently audited TA source/package family
records no shipped data/ui/views; completion therefore depends on _internal
diagnostics and Observability/Platform telemetry rather than a nonexistent
packaged dashboard.
Read reference.md for the option contract, lifecycle behavior, known product
documentation conflicts, and explicit handoffs.
1---2name: splunk-observability-otel-collector-setup3description: Use when rendering, preflighting, applying, validating, diagnosing, and removing the Splunk Distribution of OpenTelemetry Collector for Kubernetes and Linux; audit and stage Splunkbase apps 7125, 8698, and 8699 through deployment servers, Linux heavy forwarders, or Linux Universal Forwarders; configure guarded Splunk Platform HEC or Splunk Connect for OTLP destinations; and route specialized Observability products to their owning skills.4---56# Splunk Observability OTel Collector Setup78## Prerequisites910| Tool or access | Purpose | Verify |11|---|---|---|12| Bash and Python 3 | Run bundled setup and validation helpers | `bash --version && python3 --version` |13| Required product/platform access | Inspect or configure the selected target | Complete the documented preflight |14| Credential files for live modes | Keep secrets out of chat | Verify paths only |1516## Workflow Overview1718```text19┌───────────┐ ┌───────────────┐ ┌───────────────┐ ┌─────────────────┐20│ Preflight │ → │ Render/review │ → │ Apply/handoff │ → │ Validate evidence │21└───────────┘ └───────────────┘ └───────────────┘ └─────────────────┘22```2324## When to Activate2526- Rendering, preflighting, applying, validating, diagnosing, and removing the Splunk Distribution of OpenTelemetry27 Collector for Kubernetes and Linux; audit and stage Splunkbase apps 7125, 8698, and 8699 through deployment28 servers, Linux.29- Preview and review the splunk observability otel collector setup workflow before any live apply phase.30- Diagnose failed prerequisites, generated assets, configuration, or validation evidence.3132## Scope3334Follow the documented read-only or render-first path whenever it is available.35This skill does not imply permission to mutate live systems. Require explicit36apply flags, protected credentials, and operator review for state changes.3738## Examples3940Inspect the supported setup modes before selecting one:4142```bash43bash skills/splunk-observability-otel-collector-setup/scripts/setup.sh --help44```4546Expected output: usage, supported modes, and required arguments are displayed47without changing the target environment.4849Inspect validation modes before running completion checks:5051```bash52bash skills/splunk-observability-otel-collector-setup/scripts/validate.sh --help53```5455Expected output: offline, live, and completion options are displayed when the56skill supports them; help exits without mutation.5758## Troubleshooting5960| Issue | Cause | Resolution |61|---|---|---|62| Preflight fails | A required tool or access path is missing | Resolve it before rendering or applying |63| Rendered assets are incomplete | Required non-secret inputs are absent | Complete intake and render again |64| Apply is blocked | Review, credentials, or explicit acceptance is missing | Use the documented handoff |65| Validation is incomplete | Live evidence is unavailable | Record the gap and keep completion open |6667## Audited baseline6869This workflow is pinned and tested against:7071- Linux Collector and auto-instrumentation packages `0.158.0`.72- `splunk-otel-collector` Helm chart `0.158.0`, fetched as the exact GitHub73 release archive with SHA-25674 `088a93ebbcfbecf8e6f7ef3651747b65bbad443f0823489768bd4901cce0a274`.75- Chart-selected Collector and auxiliary images are rewritten to the audited76 manifest digests recorded in `references/sources.md`; unknown custom images77 are accepted only when already pinned with `@sha256:<64 lowercase hex>`.78- Splunkbase apps `7125`, `8698`, and `8699`, version `0.158.0`, published79 August 7, 2026 and inspected August 20, 2026. App `7125` is the multi-OS/root80 artifact; `8698` and `8699` are the Linux and Windows x86_64 split artifacts.81 These Splunkbase pins are a separate artifact chain from the Linux collector,82 auto-instrumentation, and Helm chart pins above and do not move together.83- Splunk Platform versions explicitly listed for this TA release: `9.0`84 through `10.5`, so `--splunk-version 10.5` is accepted. A value outside the85 listed trains is still rejected. Omitting `--splunk-version` skips that86 optional compatibility assertion entirely; package audit/rendering on its own87 does not certify the package for any specific train.8889Treat a newer release as unaudited until `--check-upstream`, the regression90suite, and the source ledger in `references/sources.md` have been updated.91Linux rendering always emits executable apply packets, so Collector,92auto-instrumentation, and OBI versions other than these reviewed pins fail93closed rather than producing an unaudited installer.9495The workstation or automation host running `setup.sh`/`render_assets.py`96requires Python 3.9+. Set `PYTHON` to an appropriate executable when the system97default is older. Generated Linux target packets have a separate Python 3.6+98minimum and preflight it before token verification or network access. Generated99Kubernetes packets require Helm `3.9+` or Helm `4` and Python `3.8+`; Helm 4 uses100the rendered local `postrenderer/v1` subprocess plugin.101102## What this skill owns103104The implemented paths are:1051061. Official Kubernetes Helm deployments, including agent, cluster receiver,107 gateway, Windows releases, FIPS image selection, Operator108 auto-instrumentation, OBI, Target Allocator, Kubernetes entities/events,109 container and Linux-node journald collection, Platform HEC or Splunk Connect110 for OTLP log routing, TLS/mTLS file handoff, preflight, rollout checks, and111 uninstall.1122. Official Linux package-repository installer deployments in agent or gateway113 mode, with a pinned installer checksum, local or SSH execution, loopback-safe114 agent defaults, stdin token transport, health checks, doctor output, support115 bundle, and confirmation-gated uninstall.1163. Splunk Add-On for OpenTelemetry Collector (`7125`, `8698`, `8699`) package117 audit and staging for deployment servers, Linux heavy forwarders, or Linux118 Universal Forwarders, with per-artifact digest pinning, archive hardening,119 no-follow `local/` preservation, atomic replacement, a private120 out-of-app-tree backup, confirmation-gated backup retention, ownership121 preservation, and dashboard/no-dashboard evidence. Windows-only `8699`122 uses deployment-server and Agent Management delivery because local apply123 assets are Bash/Python.1244. Collector-side custom configuration through a reviewed Linux125 `--collector-config` or guarded Helm `--extra-values-file`. The skill does not126 pretend that an opaque overlay is a fully typed pipeline authoring model.127128Native Splunk Observability Metrics Pipeline Management is owned by129`splunk-observability-metrics-pipeline-setup`; it is downstream aggregation and130routing, not collector pre-ingest processing.131132## Product routing133134Installing a Collector is not the same as proving a product is ready. Route and135validate each requested product explicitly:136137| Product or signal | Base-skill responsibility | Required completion evidence |138|---|---|---|139| Infrastructure Monitoring | Host/Kubernetes metrics, metadata, internal health | Collector healthy and host/cluster visible in Observability |140| APM | OTLP trace receiver/export, optional gateway | Instrumented workload plus a trace visible in APM |141| AlwaysOn Profiling | Explicit opt-in and supported language agent | Profile data visible for the intended service |142| Secure Application | Chart destination only; workload instrumentation still required | Supported workload annotated/instrumented and security trace visible |143| Kubernetes container/journald/extra-file logs | Separate typed Platform pipeline plus HEC `/services/collector/event` or Splunk Connect for OTLP | Target index receives expected source types and fields; source scope is reviewed |144| Kubernetes events/entities | Explicit experimental gates | Event/entity visible; maturity warning recorded |145| Fleet Management / OpAMP | TA feature-gate handoff only | Account entitlement and managed Collector visible in Fleet Management |146| Kubernetes zero-code instrumentation | Delegate to `splunk-observability-k8s-auto-instrumentation-setup` | Child-skill workload rollout and trace evidence |147| Database Monitoring | Delegate to `splunk-observability-database-monitoring-setup` | DBMon receiver and UI evidence |148| AI Agent / AI Infrastructure Monitoring | Delegate to `splunk-observability-ai-agent-monitoring-setup` | Instrumented AI workload, evaluation/metric evidence |149| AI Security Monitoring | Delegate Cisco AI Defense instrumentation to `splunk-observability-ai-agent-monitoring-setup` | Security span correlation, licensed integration, and risk UI evidence |150| Browser RUM / Session Replay | Delegate general setup to `splunk-observability-browser-rum-setup`; use `splunk-observability-k8s-frontend-rum-setup` only for Kubernetes frontend injection | Browser beacon and UI evidence |151| Mobile RUM | Delegate to `splunk-observability-mobile-rum-setup`; mobile beacons bypass this Collector | Mobile session/beacon and UI evidence |152| Synthetics | Delegate to `splunk-observability-synthetics-setup` | Test run, result, and detector evidence |153| SLOs | Delegate to `splunk-observability-slo-setup` | SLI data, SLO calculation, and alert evidence |154| Dashboards and detectors | Delegate to `splunk-observability-dashboard-builder` and `splunk-observability-native-ops` | Dashboard population and detector state |155| DXA, AI Assistant, Observability Mobile, Related Content, and deep product UI | Delegate to `splunk-observability-deep-native-workflows` | Product-specific navigation and populated UI evidence |156| SignalFlow and data tools | Delegate native operations to `splunk-observability-native-ops` / `splunk-observability-deep-native-workflows` | Executed analytics or metadata workflow evidence |157| ITSI / ITE Work / App for Content Packs | Separate Splunk Platform workflows: `splunk-itsi-setup` and `splunk-itsi-config` | Platform app/content-pack and ITSI object evidence |158| Metrics Pipeline Management | Delegate to `splunk-observability-metrics-pipeline-setup` | Rule-set and post-rule metric evidence |159| AWS Lambda APM | Delegate to `splunk-observability-aws-lambda-apm-setup` | Instrumented invocation and trace evidence |160| Coding agents | Delegate to `splunk-observability-coding-agent-instrumentation-setup` | Agent telemetry at every requested destination |161| ThousandEyes | Delegate to `splunk-observability-thousandeyes-integration` | Linked test/metric and dashboard evidence |162| Splunk Connect for OTLP | Delegate receiver-side setup to `splunk-connect-for-otlp-setup` | OTLP receiver health and target-index evidence |163| Network Explorer | `--enable-network-explorer` enforces the supported one-replica gateway profile and renders the separate upstream eBPF-chart handoff | eBPF DaemonSet, representative `tcp.*`/`udp.*`/`dns.*`/`http.*` metrics, and populated Network Explorer UI evidence |164165See `references/coverage.md` for deployment-method and feature classification.166167## Non-negotiable safety rules168169- Never request or render a token value. Accept only paths to token files.170- Reject direct and `--flag=value` token arguments without echoing their value.171- Token and private-key files must be single-link, non-symlink regular files,172 nonempty, mode `600`, and contain no NUL, newline, or whitespace. Tokens are173 capped at 16 KiB and use only the environment/config-safe174 `A-Za-z0-9._~+/=-` alphabet, which includes the documented base64 token175 characters. Linux reads one no-follow descriptor into memory and never176 rereads the source path or creates a temporary token file.177- Rendered base values and copied overlays are integrity-bound. The only mutable178 values overlay is a schema-constrained Secret revision annotation.179- Generated files, including root `metadata.json`, are published through180 same-directory atomic replacement and refuse an existing final-component181 symlink. A render never follows that symlink into an arbitrary target.182- Existing Kubernetes Secrets and PriorityClasses are mutated or deleted only183 when exact skill/release/namespace ownership annotations match. Create uses184 an atomic create, updates use UID/resourceVersion-bound replace, and deletes185 use UID/resourceVersion preconditions so a concurrent replacement cannot be186 adopted or removed. Secret and PriorityClass cleanup each require a separate187 confirmation variable.188- Keep `secret.create=false`; create the Kubernetes Secret from files. Guarded189 extra values may not override secret creation or contain inline secret keys.190- Pin the chart, Collector, Linux installer URL, and Linux installer SHA-256.191 A Linux installer mirror may change the HTTPS URL, but executable packets192 still require the exact audited digest; no arbitrary digest override exists.193- Download the chart archive once into the packet cache, verify it before every194 use, and pass that same local archive to preflight and install. The195 integrity-bound post-renderer must replace every audited mutable image with196 its digest, reject unknown tags/digests in audited repositories, and reject197 any unpinned custom image. Status rechecks live workload, Instrumentation,198 and pod specs so an admission-time image rewrite fails validation.199- Before Helm preflight, install, status, or uninstall, inspect the exact-name200 release across all common Helm 3/4 statuses and require the rendered201 namespace plus a `splunk-otel-collector-*` chart identity. Installation202 accepts only an absent or deployed owned release; uninstall accepts only an203 owned deployed/failed release. Never replace or delete a foreign same-name204 chart.205- When the chart installation Job owns the Instrumentation CR, refuse foreign206 ownership, snapshot an existing owned CR and Helm revision before mutation,207 and require the post-install revision to be exactly the expected successor.208 If ownership validation fails, roll an existing release back to the captured209 revision or uninstall a new release, then restore the CR. A concurrent Helm210 revision refuses automatic rollback and retains the recovery snapshot.211 Repeat ownership checks before status or post-Helm-uninstall cleanup.212- The audited installation Job uses kubectl `v1.35.1`, so its executable213 compatibility gate covers Kubernetes server minors `1.34` through `1.36`.214 Outside that range, audit and pin a matching image in a future skill update.215 Disabling the Job selects upstream resource mode; Helm 4 first install is216 rejected and must use the upstream two-step operator/webhook-ready handoff.217- The Linux agent binds to `127.0.0.1` unless the operator explicitly chooses a218 broader interface. Gateway mode uses the upstream `0.0.0.0` default.219- Do not generate removed `--trace-url` or deprecated `--hec-url` installer220 flags. The tagged installer exposes native-host Platform flags, but its token221 option is argv-based; this workflow refuses to put a HEC token on argv and222 routes native-host Platform data through a reviewed custom config or UF/TA223 handoff.224- SSH install streams the token over stdin and never copies it to a remote file.225- Linux local/SSH preflight requires Bash, curl, Python 3.6+, tar, a SHA-256226 tool, active systemd, the pinned installer's system-account utilities, the227 matching `apt-get`, `yum`/`dnf`, or `zypper` package tools, and root or228 passwordless noninteractive sudo. It enforces the tagged installer's exact229 distro/version and `amd64`/`arm64` matrix. OBI additionally requires230 `sha256sum` and `gzip` to already exist so preflight never installs a package.231 It rejects an existing install and proves custom-config232 traversal/readability before package mutation.233- Linux OBI install and status re-hash the extracted `v0.6.0` executable234 against the independently audited `amd64` or `arm64` binary digest after the235 upstream release-archive checksum succeeds.236- Linux status, doctor, and support-bundle helpers hash-verify the generated237 redactor and fail closed when privileged collection or redaction fails.238 Doctor results distinguish complete/healthy (`0`), complete/unhealthy (`1`),239 and diagnostics-incomplete (`2`) with a matching final completion marker.240 Support bundles publish complete evidence for both healthy and unhealthy241 results, but refuse incomplete or marker-mismatched diagnostics. Bundles242 record `diagnostic-state.txt`, use a private staging directory, mode `600`,243 atomic no-replace publication, and reject existing or symlink output paths.244- Linux uninstall requires a second explicit confirmation before allowing the245 upstream uninstaller to remove detected auto-instrumentation, deletes only the246 installer-generated token-bearing environment files, and still requires token247 revocation as a separate operating step.248- `--apply-ta` must not use `placeholder` secret mode. Placeholder templates are249 disabled and render-only.250- TA preflight, staging, local-overlay apply, and backup management require an251 external Python `3.6` or newer interpreter with `os.O_NOFOLLOW` and252 `os.O_DIRECTORY`; preflight proves this before package work begins.253- Splunkbase marks the audited TA artifacts FIPS-incompatible. FedRAMP status254 is not a Splunkbase metadata field; report it as not documented, not as a255 validated false claim.256- `--fips-enabled` selects and verifies the audited Kubernetes FIPS image; it257 does not certify a FedRAMP deployment. Splunk's previously indexed FedRAMP258 draft included hosting, agent, instrumentation, and integration limits, but259 its dedicated public Help URL currently returns `404` and contained260 contradictory authorization wording. Verify the live FedRAMP Marketplace261 package, order/contract, hosting boundary, and supported-feature list with262 Splunk and the compliance owner instead of treating this packet as evidence.263- Do not enable Splunk Platform traces without264 `--accept-experimental-platform-traces`; chart capability and product support265 documentation currently conflict.266267## Workflow2682691. Determine the target and requested products/signals. Do not use270 `--all-signals` as a substitute for product discovery.2712. Collect only non-secret inputs: realm, topology, cluster/host identity,272 destination endpoints/indexes, and secret-file paths.2733. Render first.2744. Review `metadata.json`, warnings, values/config, package audit, and exact275 apply commands.2765. Run static validation. Use `--check-upstream` when network access is277 available.2786. Apply only after explicit authorization.2797. Run the rendered status/doctor workflow and prove backend telemetry for each280 enabled product. Record `configured`, `instrumented`, `telemetry observed`,281 and `product UI verified` separately.282283## Safe defaults284285- Kubernetes: metrics and traces on; container logs, journald, profiling, events, discovery,286 Operator auto-instrumentation, OBI, Secure Application, entities, and Target287 Allocator off. Agent and cluster receiver on. Gateway off; when enabled, three288 replicas.289- Linux: agent mode, `512` MiB, loopback bind, no discovery, no290 auto-instrumentation, no profiling, no SDK metric/log exporter overrides, and291 no OBI.292- TA: render only, deployment-server target, agent mode, placeholder secret293 mode, official digest required for actionable output, and a no-match294 server-class whitelist until the operator supplies a reviewed client filter.295296## Render examples297298Kubernetes:299300```bash301bash skills/splunk-observability-otel-collector-setup/scripts/setup.sh \302 --render-k8s \303 --realm us0 \304 --cluster-name production-cluster \305 --chart-version 0.158.0 \306 --o11y-token-file /secure/splunk_o11y_token307```308309Kubernetes logs through HEC:310311```bash312bash skills/splunk-observability-otel-collector-setup/scripts/setup.sh \313 --render-k8s \314 --realm us0 \315 --cluster-name production-cluster \316 --enable-logs \317 --platform-hec-url https://splunk.example.com:8088/services/collector/event \318 --platform-hec-index k8s_logs \319 --platform-hec-token-file /secure/splunk_hec_token \320 --o11y-token-file /secure/splunk_o11y_token321```322323Platform-only Kubernetes logs through Splunk Connect for OTLP:324325```bash326bash skills/splunk-observability-otel-collector-setup/scripts/setup.sh \327 --render-k8s \328 --cluster-name production-cluster \329 --disable-metrics --disable-traces \330 --enable-logs \331 --platform-otlp-endpoint splunk-otlp.example.com:4317332```333334Linux:335336```bash337bash skills/splunk-observability-otel-collector-setup/scripts/setup.sh \338 --render-linux \339 --realm us0 \340 --o11y-token-file /secure/splunk_o11y_token341```342343TA package audit (use the matching 7125/8698/8699 filename):344345```bash346bash skills/splunk-observability-otel-collector-setup/scripts/setup.sh \347 --render-ta \348 --realm us0 \349 --ta-package-path ./splunk-add-on-for-opentelemetry-collector_01542.tgz \350 --ta-target deployment-server \351 --ta-serverclass-whitelist 'otel-uf-*'352```353354`template.example` is a manual intake worksheet, not an executable spec. Map355reviewed values to CLI flags; never assume the setup script reads356`template.local`.357358## Validation359360```bash361bash skills/splunk-observability-otel-collector-setup/scripts/validate.sh \362 --check-k8s --check-linux --output-dir splunk-observability-otel-rendered363364bash skills/splunk-observability-otel-collector-setup/scripts/validate.sh \365 --check-k8s --check-linux --check-upstream \366 --output-dir splunk-observability-otel-rendered367368# Live controller, pod-readiness, and audited-image checks without reading369# Helm release Secrets:370bash skills/splunk-observability-otel-collector-setup/scripts/validate.sh \371 --output-dir splunk-observability-otel-rendered \372 --k8s-workloads-only --kube-context CONTEXT373```374375Full live status additionally enforces supported kubectl/API-server version376skew and scans both primary Collector pods and auxiliary chart pods. Confirmed377SignalFx conversion drops caused by the 36-dimension limit fail the gate as378telemetry loss. Log-retrieval failures and matched log bodies are suppressed;379only rule counts are reported. Both live paths require rendered core container380names/controllers to retain their exact audited image pins while allowing381unrelated auxiliary containers only when their images are digest-pinned. The382workload-only path unions both label inventories by Pod identity, then fetches383each Pod once for a coherent readiness/image snapshot. It intentionally does384not read logs and therefore cannot provide log-loss evidence.385386The repository-wide AWS/EKS/O11y staging gate composes this secret-free mode387with AWS identity, EKS endpoint, auto-instrumentation, APM, and AWS integration388checks. See [`../../scripts/staging/README.md`](../../scripts/staging/README.md).389390## TA Completion Gate391392For TA/add-on work, also follow393[`../shared/ta_completion_gate.md`](../shared/ta_completion_gate.md). The394data ingest path must be configured and validated. Discover any395pre-built/package-shipped dashboards, then prove they are visible,396macro-aligned, and returning data. If the package ships no dashboards, record397that explicit package evidence. The currently audited TA source/package family398records no shipped `data/ui/views`; completion therefore depends on `_internal`399diagnostics and Observability/Platform telemetry rather than a nonexistent400packaged dashboard.401402Read `reference.md` for the option contract, lifecycle behavior, known product403documentation conflicts, and explicit handoffs.