Splunk SC4S con podman
Con este playbook se crea la instalación de los servicios SC4S en podman (docker) containers.
Dependencias
Para poder ejecutar este playbook es necesario instalar las siguientes galaxies.
ansible-galaxy collection install containers.podman
Templates
Es necesario disponer de dos templates (en la misma carpeta que el playbook).
env_file
Este template se encarga de crear el fichero de configuración, con el endpoint de Splunk, el token y la configuración para el SC4S.
SC4S_DEST_SPLUNK_HEC_DEFAULT_URL=https://yourSplunkTenant.splunkcloud.com/services/collector
SC4S_DEST_SPLUNK_HEC_DEFAULT_TOKEN=uuid-token-string
#SC4S_DEST_SPLUNK_HEC_DEFAULT_TLS_VERIFY=no
y en el mismo directorio que el playbook guardelo como
sc4s_env_file.j2
sc4s.service
Para facilitar el control de podman, desde Splunk recomiendan crear un wrapper como servicio, que actualice el podman cuando se reinicia el servicio y así siempre instale la última versión. Introduzca el siguiente contenido en un fichero
[Unit]
Description=SC4S Container
Wants=NetworkManager.service network-online.target
After=NetworkManager.service network-online.target
[Install]
WantedBy=multi-user.target
[Service]
Environment="SC4S_IMAGE=ghcr.io/splunk/splunk-connect-for-syslog/container3:latest"
# Required mount point for syslog-ng persist data (including disk buffer)
Environment="SC4S_PERSIST_MOUNT=splunk-sc4s-var:/var/lib/syslog-ng"
# Optional mount point for local overrides and configurations; see notes in docs
Environment="SC4S_LOCAL_MOUNT=/opt/sc4s/local:/etc/syslog-ng/conf.d/local:z"
# Optional mount point for local disk archive (EWMM output) files
Environment="SC4S_ARCHIVE_MOUNT=/opt/sc4s/archive:/var/lib/syslog-ng/archive:z"
# Map location of TLS custom TLS
Environment="SC4S_TLS_MOUNT=/opt/sc4s/tls:/etc/syslog-ng/tls:z"
TimeoutStartSec=0
ExecStartPre=/usr/bin/podman pull $SC4S_IMAGE
# Note: /usr/bin/bash will not be valid path for all OS
# when startup fails on running bash check if the path is correct
ExecStartPre=/usr/bin/bash -c "/usr/bin/systemctl set-environment SC4SHOST=$(hostname -s)"
ExecStart=/usr/bin/podman run \
-e "SC4S_CONTAINER_HOST=${SC4SHOST}" \
-v "$SC4S_PERSIST_MOUNT" \
-v "$SC4S_LOCAL_MOUNT" \
-v "$SC4S_ARCHIVE_MOUNT" \
-v "$SC4S_TLS_MOUNT" \
--env-file=/opt/sc4s/env_file \
--health-cmd="/healthcheck.sh" \
--health-interval=10s --health-retries=6 --health-timeout=6s \
--network host \
--name SC4S \
--rm $SC4S_IMAGE
Restart=on-abnormal
y en el mismo directorio que el playbook guardelo como
sc4s_service.j2
Playbook
El playbook ejecutará:
- Instalación de Podman
- Activación del servicio de Podman
- Creación de volumen SC4S
- Creación de subdirectorios SC4S (/opt/sc4s -> tls, archive, local)
- Creación de fichero env_file con el contenido del template sc4s_env_file.js2
- Creación del servicio sc4s con el contenido del template sc4s_service.j2
- Activación y inicio del servicio SC4S
- Reinicio del servicio SC4S en caso de que
---
- name: Configurar SC4S en podman
hosts: localhost
become: yes
tasks:
# Instalación de podman
- name: Instalar podman
apt:
name: podman
state: present
- name: Activar servicio podman
service:
name: podman
state: started
enabled: yes
# Creación del volumen
- name: Crear volumen splunk-sc4s
containers.podman.podman_volume:
name: splunk-sc4s-var
state: present
# Creacion de subdirectorios y ficheros de configuración
- name: Crear directorios de sc4s
ansible.builtin.file:
path: "{{item}}"
state: directory
loop:
- /opt/sc4s
- /opt/sc4s/archive
- /opt/sc4s/local
- /opt/sc4s/tls
- name: Crear fichero configuración env_file
template:
src: sc4s_env_file.j2
dest: /opt/sc4s/env_file
register: env_file_conf
- name: Crear fichero de servicio SC4S
template:
src: sc4s_service.j2
dest: "/lib/systemd/system/sc4s.service"
register: sc4s_service_conf
- name: Ejecutar systemctl daemon-reload
command: systemctl daemon-reload
when: sc4s_service_conf.changed
- name: Reiniciar servicio SC4S
service:
name: sc4s
state: restarted
when: env_file_conf.changed
- name: Activar servicio SC4S
service:
name: sc4s
state: started
enabled: yes