Skip to main content

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