Skip to content
Back to skills

Splunk Observability Otel Collector Setup

ASecurity

"Use when rendering, preflighting, applying, validating, diagnosing, and removing the Splunk Distribution

  • 39 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 9, 2026
devopspythongobashnoderailskubernetesawsgitapidatabase

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 10 files and shows the line behind each finding

Scanned September 9, 2026

npx -y skills add chambear2809/splunk-cisco-skills --skill splunk-observability-otel-collector-setup --agent claude-code

Installs 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 with every re-scan.

Security grade badge for Splunk Observability Otel Collector Setup
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/chambear2809-splunk-observability-otel-collector-setup/badge)](https://www.skillsdirectory.com/skills/chambear2809-splunk-observability-otel-collector-setup)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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.

Files in this skill

  • SKILL.md23.3 KB
  • agents/openai.yaml633 B
  • k8s-objects.example.yaml329 B
  • reference.md33.3 KB
  • references/coverage.md18.6 KB
  • references/sources.md17.5 KB
  • scripts/setup.sh62.4 KB
  • scripts/validate.sh20.2 KB
  • scripts/validate_k8s_workloads.py13.6 KB
  • template.example6.4 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.