Skip to main content

Instalación de SC4S (docker)

El sistema SC4S es un syslog-ng pero potenciado por Splunk, de forma que reconoce ciertos logs automáticamente e identifica la herramienta origen. Desde Splunk se ha creado una versión Docker del SC4S de forma que se pueda configurar en entornos cloud, kubernetes... etc

Requisitos de hardware

Los requisitos oficiales indicados por Splunk para una máquina SC4S dependen de la capacidad de ingesta de logs (por lo tanto de los logs enviados a dicha máquina).

CPU RAM Logs
2 8GB 21109.66 msg/sec
4 16GB 34820.94 msg/sec
8 32GB 71929.91 msg/sec
12 48GB 85419.09 msg/sec

Instalación de dependencias

En una máquina Linux (Debian en este caso) instale Docker.

Instalación de SC4S

Edite el fichero de configuración sysctl

nano /etc/sysctl.conf

Añada el siguiente contenido.

net.core.rmem_default = 17039360
net.core.rmem_max = 17039360

Guarde los cambios y ejecute

sysctl -p

Cree los siguientes directorios y ficheros

mkdir /opt/sc4s/{local,archive,tls} -p
touch /opt/sc4s/env_file

Dentro del fichero env_file introducir el siguiente contenido cambiando los valores por los generados en su servidor Splunk.

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

Cree el fichero de servicio para Linux

nano /lib/systemd/system/sc4s.service

Copie el template para la creación del servicio o bien acceda a https://splunk.github.io/splunk-connect-for-syslog/main/gettingstarted/docker-systemd-general/ para obtener una versión más actualizada.

[Unit]
Description=SC4S Container
Wants=NetworkManager.service network-online.target docker.service
After=NetworkManager.service network-online.target docker.service
Requires=docker.service

[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/docker 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)"
ExecStartPre=/usr/bin/bash -c "docker container rm SC4S || /bin/true"
ExecStart=/usr/bin/docker 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 \
        --network host \
        --name SC4S \
        --rm $SC4S_IMAGE

Restart=on-abnormal

Guarde los cambios en el fichero. A continuación cree el volúmen

docker volume create splunk-sc4s-var

Inicie el servicio.

sudo systemctl daemon-reload
sudo systemctl enable sc4s
sudo systemctl start sc4s

Es normal que la primera vez tarde un poco, puesto que se ha de descargar la imagen de docker de sc4s. Confirme que el servicio ha levantado correctamente con

systemctl status sc4s.service

Visualice los logs para ver si hay errores, mediante el comando

docker logs SC4S

Problemas encontrados

Al visualizar los logs aparece la siguiente información

curl: (3) URL rejected: No host part in the URL
SC4S_ENV_CHECK_HEC: Invalid Splunk HEC URL, invalid token, or other HEC connectivity issue index=main. sourcetype=sc4s:fallback
Startup will continue to prevent data loss if this is a transient failure.

Revise que la URL y TOKEN generados en Splunk cuadren con los que hay puestos en el fichero.