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/siglens

Nous 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/bin

Le 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.status

Et voilà pour la première prise en main de Siglens, a vous de jouer maintenant.