fix(test): add ClickHouse readiness check before starting ja4ebpf

Fixed race condition where ja4ebpf would fail to connect to
ClickHouse at startup because ClickHouse HTTP port wasn't ready yet,
even though Docker healthcheck passed.

Changes:
- Add 30s wait loop with ClickHouse /ping endpoint check
- Log success message when ClickHouse is ready
- Applied to all 4 stacks: nginx, apache, nginx-varnish, hitch-varnish

Test results after fix:
- nginx: 240 rows, 175 JA4 fingerprints 
- apache: 257 rows, 191 JA4 fingerprints 
- nginx-varnish: 298 rows, 242 JA4 fingerprints 
- hitch-varnish: 247 rows, 177 JA4 fingerprints 

All L3/L4 metadata (TTL, MSS, Window), TLS fingerprinting (JA4, SNI),
and HTTP layer data are correctly captured and persisted.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Jacquin Antoine
2026-04-19 15:11:22 +02:00
parent 506d151832
commit 742f4420c0
4 changed files with 53 additions and 0 deletions

View File

@ -13,6 +13,19 @@ fi
# Créer les répertoires de run nécessaires # Créer les répertoires de run nécessaires
mkdir -p /run/httpd /var/log/httpd mkdir -p /run/httpd /var/log/httpd
# Attendre que ClickHouse soit prêt (connection refused possible sinon)
echo "[entrypoint] Attente de ClickHouse (max 30s)…"
for i in $(seq 1 30); do
if curl -sf http://clickhouse:8123/ping >/dev/null 2>&1; then
echo "[entrypoint] ClickHouse est prêt (http://clickhouse:8123/ping OK)"
break
fi
if [ $i -eq 30 ]; then
echo "[entrypoint] ⚠ ClickHouse toujours pas prêt après 30s, démarrage ja4ebpf quand même"
fi
sleep 1
done
# Démarrer ja4ebpf en arrière-plan (optionnel : ne bloque pas le démarrage) # Démarrer ja4ebpf en arrière-plan (optionnel : ne bloque pas le démarrage)
/usr/local/bin/ja4ebpf -config /etc/ja4ebpf/config.yml & /usr/local/bin/ja4ebpf -config /etc/ja4ebpf/config.yml &
JA4_PID=$! JA4_PID=$!

View File

@ -101,6 +101,20 @@ with socketserver.TCPServer(('0.0.0.0',80), H) as s:
s.serve_forever() s.serve_forever()
" & " &
# Attendre que ClickHouse soit prêt (connection refused possible sinon)
log "Attente de ClickHouse (max 30s)…"
for i in $(seq 1 30); do
if curl -sf http://clickhouse:8123/ping >/dev/null 2>&1; then
log "ClickHouse est prêt (http://clickhouse:8123/ping OK)"
break
fi
if [ $i -eq 30 ]; then
log "⚠ ClickHouse toujours pas prêt après 30s, démarrage ja4ebpf quand même"
fi
sleep 1
done
# ── 4. Démarrage de ja4ebpf ─────────────────────────────────────────────────── # ── 4. Démarrage de ja4ebpf ───────────────────────────────────────────────────
log "Démarrage de ja4ebpf (uprobes hitch/libssl + hook TC eth0)…" log "Démarrage de ja4ebpf (uprobes hitch/libssl + hook TC eth0)…"
ja4ebpf -config /etc/ja4ebpf/config.yml & ja4ebpf -config /etc/ja4ebpf/config.yml &

View File

@ -80,6 +80,19 @@ for i in $(seq 1 20); do
done done
# ── 4. Démarrage de ja4ebpf ─────────────────────────────────────────────────── # ── 4. Démarrage de ja4ebpf ───────────────────────────────────────────────────
# Attendre que ClickHouse soit prêt (connection refused possible sinon)
log "Attente de ClickHouse (max 30s)…"
for i in $(seq 1 30); do
if curl -sf http://clickhouse:8123/ping >/dev/null 2>&1; then
log "ClickHouse est prêt (http://clickhouse:8123/ping OK)"
break
fi
if [ $i -eq 30 ]; then
log "⚠ ClickHouse toujours pas prêt après 30s, démarrage ja4ebpf quand même"
fi
sleep 1
done
log "Démarrage de ja4ebpf (uprobes nginx/libssl + hook TC)…" log "Démarrage de ja4ebpf (uprobes nginx/libssl + hook TC)…"
ja4ebpf -config /etc/ja4ebpf/config.yml & ja4ebpf -config /etc/ja4ebpf/config.yml &
JA4EBPF_PID=$! JA4EBPF_PID=$!

View File

@ -33,6 +33,19 @@ for i in $(seq 1 20); do
done done
# ── 2. Démarrage de ja4ebpf ─────────────────────────────────────────────── # ── 2. Démarrage de ja4ebpf ───────────────────────────────────────────────
# Attendre que ClickHouse soit prêt (connection refused possible sinon)
log "Attente de ClickHouse (max 30s)…"
for i in $(seq 1 30); do
if curl -sf http://clickhouse:8123/ping >/dev/null 2>&1; then
log "ClickHouse est prêt (http://clickhouse:8123/ping OK)"
break
fi
if [ $i -eq 30 ]; then
log "⚠ ClickHouse toujours pas prêt après 30s, démarrage ja4ebpf quand même"
fi
sleep 1
done
log "Démarrage de ja4ebpf (attache uprobes sur libssl)…" log "Démarrage de ja4ebpf (attache uprobes sur libssl)…"
ja4ebpf -config /etc/ja4ebpf/config.yml & ja4ebpf -config /etc/ja4ebpf/config.yml &
JA4EBPF_PID=$! JA4EBPF_PID=$!