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.