"Use when rendering, preflighting, applying, validating, diagnosing, and removing the Splunk Distribution
Scanned 9/9/2026
Install to Claude Code
npx -y skills add chambear2809/splunk-cisco-skills --skill splunk-observability-otel-collector-setup --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Splunk Observability Otel Collector Setup?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/chambear2809-splunk-observability-otel-collector-setup)More formats (shields.io, HTML) on the badges page.
---
name: splunk-observability-otel-collector-setup
description: "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."
compatibility: "Splunk Cloud Platform 10.5.2605: conditional. Follow documented package, entitlement, topology, and customer-managed runtime guardrails; self-managed paths remain on the public 10.4 baseline."
metadata:
splunk_cloud_10_5: "conditional"
compatibility_verified: "2026-08-20"
---
# 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
```text
┌───────────┐ ┌───────────────┐ ┌───────────────┐ ┌─────────────────┐
│ 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
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
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:
1. 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.
2. 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.
3. 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.
4. 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
1. Determine the target and requested products/signals. Do not use
`--all-signals` as a substitute for product discovery.
2. Collect only non-secret inputs: realm, topology, cluster/host identity,
destination endpoints/indexes, and secret-file paths.
3. Render first.
4. Review `metadata.json`, warnings, values/config, package audit, and exact
apply commands.
5. Run static validation. Use `--check-upstream` when network access is
available.
6. Apply only after explicit authorization.
7. 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
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
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
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
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
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
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`](../../scripts/staging/README.md).
## TA Completion Gate
For TA/add-on work, also follow
[`../shared/ta_completion_gate.md`](../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.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!