Siglens, Caddy logs,Vector
Nous verrons ici comment installer Siglens sur un cluster kubernetes, et envoyer les logs d'un serveur caddy distant.
Les logs du serveur caddy seront récupérés par un agent Vector local, et transmis au service SigLens du cluster Kubernetes
┌──────────┐ ┌────────────────────┐ ┌───────────────┐
| Caddy | ───logs──> | Log Forwarder | ───> | SigLens |
| Webserver| (JSON) | (Vector/FluentBit) | | (Logs Storage)|
└──────────┘ └────────────────────┘ └───────────────┘
Installation de Siglens sous kubernetes
SigLens fournit une chart Helm, ce qui simplifie l'installation:
helm repo add siglens-repo https://siglens.github.io/charts
helm install siglens siglens-repo/siglensNous ne détaillerons pas ici le fonctionnement de Helm et de la Chart Siglens ici.
Après l'installation, il faudra vérifier la création de l'ingress pour accéder a l'interface web (sur le port 5122). Voir les values.yaml de la charte pour les réglages avancés.
Une fois installé, vous pourrez vous connecter à l'interface web et visualiser les premiers logs/évenements.
Installation de l'agent Vector
$ ssh root@caddyserver
$ uname -a
Linux bifrost 6.6.101-0-lts #1-Alpine SMP PREEMPT_DYNAMIC 2025-08-07 07:12:23 aarch64 GNU/Linux
$ file /bin/busybox
/bin/busybox: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-musl-aarch64.so.1, BuildID[sha1]=0473dd0398a4d4c4f29ebed5a94f63d78096563e, stripped
C'est un serveur alpine, architecture est ARM 64, avec lib-musl.
On téléchargera donc la version du binaire correspondant à la bonne distribution / libc/ libmusl
$ mkdir tmp
$ cd tmp/
$ wget https://packages.timber.io/vector/0.52.0/vector-0.52.0-aarch64-unknown-linux-musl.tar.gz
$ tar xvfz vector-0.52.0-aarch64-unknown-linux-musl.tar.gz
$ # ./vector-aarch64-unknown-linux-musl/bin/vector -V
vector 0.52.0 (aarch64-unknown-linux-musl ca5bf26 2025-12-16 14:56:07.290167996)
# cp ./vector-aarch64-unknown-linux-musl/bin/vector /usr/local/binLe binaire de vector se lance ... good ... on le met dans /usr/local/bin pour la suite
Configuration de l'agent vector
Exemple de configuration vector.toml :
data_dir = "/var/lib/vector-data"
####################################
# Sources
####################################
[sources.caddy_logs]
type = "file"
include = ["/var/log/caddy/caddy.log"] <<<<<<< fichiers de logs json
read_from = "beginning"
ignore_older_secs = 86400
####################################
# Transforms
####################################
[transforms.parse_caddy_json]
type = "remap"
inputs = ["caddy_logs"]
source = '''
. = parse_json!(.message)
'''
[transforms.add_metadata]
type = "remap"
inputs = ["parse_caddy_json"]
source = '''
.app = "caddy" <<<< On ajoute un tag
'''
####################################
# Sinks (SigLens)
####################################
[sinks.siglens]
type = "splunk_hec_logs"
inputs = ["add_metadata"]
endpoint = "http://siglens-server" <<<< Serveur cible siglens
token = "dummy-token"
compression = "none"
# Optional but useful
[sinks.siglens.encoding]
codec = "json"- Configuration des logs Caddy au format json
Vector va lire le ou les fichiers de logs et va extraire les logs au format json pour les envoyer a Siglens.
Il faut donc ajouter 'format json' dans la configuration des logs de caddy:
log {
output file /var/log/caddy/https.www.oflabs.com.access.log
format json
}... Et on pense bien a redémarer Caddy (et remettre à zero le fichier de log)
- Lancement de vector:
# /usr/local/bin/vector --config vector.toml
2025-12-17T00:21:24.059782Z INFO vector::app: Log level is enabled. level="info"
2025-12-17T00:21:24.062028Z INFO vector::app: Loading configs. paths=["vector.toml"]
2025-12-17T00:21:24.330268Z INFO vector::topology::running: Running healthchecks.
....Après les tests, il faudra vous assurer que l'instance de vector soit bien démarée automatiquement via systemctl/init.d.
Creation d'un dashboard
- Pour afficher les logs dans un panel de dashboard, vos pouvez utiliser cette requete:
event.app="caddy" | fields event.request.tls.server_name, event.request.uri, event.request.client_ip, event.status- Pour afficher un chart line basé sur la requête, il faut utiliser timechart:
event.app="caddy" | timechart span=1m count by event.statusEt voilà pour la première prise en main de Siglens, a vous de jouer maintenant.