Skip to main content

Instalación de SC4S (ansible+podman)

Con este playbook se crea la instalación de los servicios SC4S en podman (docker) containers. El código está disponible también en:

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