Set up an Edge Processor in a Docker container
Prerequisites
-
Access to a functioning tenant in the Splunk Cloud Platform environment.
-
Docker installed on the host machines where the containers will be spun up.
Architecture overview
Setup and install
Perform the following steps in order to set up and install an Edge Processor on a Docker container.
Create a shared service principal
principal.yaml file, and used to interact with other Splunk Cloud Platform services.
docker run --rm \
-e TENANT=<tenant-id> \
-e TOKEN=<access-token> \
splunk/edge-processor:<image-tag> \
eptools setup > principal.yaml
TOKEN is located in the install script provided in your tenant's web UI. To locate it, navigate to the Edge Processors page, select or create a processor. Select Actions, and then Install/Uninstall from the dropdown menu in the top right-hand corner. Then set the Instance type to Docker. The token is visible in the resulting script.
Running a containerized instance
After provisioning a shared service principal, perform the following tasks to set up a containerized Edge Processor instance.
-
Compile a list of ingress ports your instance will use to receive ingested data. To do so, navigate to the Edge Processors page in your tenant's web UI, and select the Shared Settings button in the top right-hand corner.
-
Use Docker's
-pflag to define your ports for all supported ingestion types. Map each port to the corresponding port on the host machine. -
Mount the
principal.yamlfile to the/opt/splunk-edge/etc/principal.yamlpath within the container, publishing the ports gathered previously, and running the image:CODEdocker run -d \ -e TENANT=<tenant-id> \ -e GROUP_ID=<edge-processor-id> \ -e TOKEN=<access-token> \ -e MACHINE_HOSTNAME=$(hostname) \ -v $(pwd)/principal.yaml:/opt/splunk-edge/etc/principal.yaml \ -p <port-1>:<port-1> ··· -p <port-n>:<port-n> \ splunk/edge-processor:<image-tag>
GROUP_ID is used to associate new instances with a specific Edge Processor. This value can be found by selecting one of the processors listed on the Edge Processors page of your tenant's web UI, then copying its ID field (for example, 431e1ead-fd5b-4af8-ac89-ccae2ae81eda). This value also appears at the end of the page's URL.
Running multiple containerized instances
Because the generated service principal is designed to be shared by multiple Edge Processor instances, spinning up subsequent containers is as simple as rerunning the previous docker run command.
Modifying GROUP_ID between runs will register instances with different Edge Processors within your tenant all under the same service principal. The best practice is to restrict service principals to one per processor, in order to avoid unnecessary confusion and potential rate limiting. A single service principal can be used across different host machines if the same principal.yaml file is mounted in each container, but this is not a best practice.
Avoiding port conflicts on a single host
One complication of spinning up multiple instances on a single host is port availability. When running multiple containers on the same host machine, port conflicts become a bottleneck since each published container port must bind to a unique port on the host.
To prevent conflicts, publish the container port without pinning it to a specific host port (i.e., -p <container_port> instead of -p <host_port>:<container_port>). When the host port is omitted, Docker selects an available, ephemeral port at runtime and publishes the container port accordingly.
docker inspect $(docker ps -q) -f '
{{- $id := slice .Id 0 12 -}}
{{- range $cport, $bindings := .NetworkSettings.Ports -}}
{{- if $bindings -}}
{{- range $b := $bindings -}}
{{ printf "%s: %s -> %s:%s\n" $id $cport $b.HostIp $b.HostPort }}
{{- end -}}
{{- end -}}
{{- end -}}
'
Using statically assigned host ports
docker run -p 9001:8088 {···}
docker run -p 9002:8088 {···}
docker run -p 9003:8088 {···}
Uninstall and cleanup
docker stop <container-id> && docker rm <container-id>
docker run --rm \
-e TENANT=<tenant-id> \
-e TOKEN=<access-token> \
-v $(pwd)/principal.yaml:/opt/splunk-edge/etc/principal.yaml \
splunk/edge-processor:<image-tag> \
eptools cleanup
TOKEN is not the same as before. Instead, it is located in the Settings page of your tenant's Cloud Console UI. More specifically, navigate to https://console.scs.splunk.com/{tenant-id}/settings and copy the provided Access Token
Update the Docker image
docker pull splunk/edge-processor:<image-tag>
Additional considerations
-
Port changes made using the Edge Processor Shared settings page in the UI are not automatically propagated to Docker. When modifying these values, you'll need to manually stop all running containers still bound to the previous ports, recreate them with the new port mappings, then update all affected ingestion flows to target these new ports.
-
Containerizing Edge Processor does not provide any additional control over the deployed binary. The container image version is independent of the Edge Processor binary version, which will continue to follow the standard, non-container lifecycle managed by the Edge Processor team.
-
For
systemd-managed deployments, use Docker's--restart=alwayspolicy when spinning up an Edge Processor container to ensure automatic recovery after failures or host restarts.