Instalación de SC4S (ansible+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 cambie el fichero env_file
---
- 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