changement de nom

This commit is contained in:
cedric committed 2026-09-28 12:43:56 +02:00
1 parent 54dba44ebf
commit a1c53892f0
7 files changed
+24 -24

No files matched your search

+6 -6
View File
@@ -4,16 +4,16 @@ WORKDIR /src
COPY go.mod ./
COPY *.go ./
COPY web ./web
RUN CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o /out/logwell .
RUN CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o /out/logstream .
# ---- Image finale (~15 Mo) ----
FROM alpine:3.20
RUN adduser -D -H -u 10001 logwell \
&& mkdir /data && chown logwell /data
COPY --from=build /out/logwell /usr/local/bin/logwell
USER logwell
RUN adduser -D -H -u 10001 logstream \
&& mkdir /data && chown logstream /data
COPY --from=build /out/logstream /usr/local/bin/logstream
USER logstream
VOLUME /data
# 5514 en interne (port non privilégié), publié sur 514 par docker-compose
EXPOSE 5514/udp 5514/tcp 8080/tcp
HEALTHCHECK --interval=30s --timeout=3s CMD wget -qO- http://127.0.0.1:8080/healthz || exit 1
ENTRYPOINT ["/usr/local/bin/logwell"]
ENTRYPOINT ["/usr/local/bin/logstream"]
+5 -5
View File
@@ -1,11 +1,11 @@
# Logwell
# Logstream
Un puits de logs syslog simple : réception UDP/TCP sur le port 514, stockage dans
[VictoriaLogs](https://docs.victoriametrics.com/victorialogs/), et une interface web
claire (thème clair/sombre, recherche dynamique, direct, tags de couleur).
```
équipements ──514 udp/tcp──▶ logwell (Go) ──lots HTTP──▶ VictoriaLogs
équipements ──514 udp/tcp──▶ logstream (Go) ──lots HTTP──▶ VictoriaLogs
▲ └── SSE (direct) ──▶ navigateur
└──── API / interface ◀──┘
```
@@ -23,7 +23,7 @@ Puis ouvrez <http://localhost:8080>.
## Envoyer ses logs
- **rsyslog** (Linux) : ajoutez `*.* @IP_DU_SERVEUR:514` (UDP) ou `*.* @@IP_DU_SERVEUR:514` (TCP)
dans `/etc/rsyslog.d/90-logwell.conf`, puis exécutez `systemctl restart rsyslog`.
dans `/etc/rsyslog.d/90-logstream.conf`, puis exécutez `systemctl restart rsyslog`.
- **Équipements réseau, NAS, pare-feu** : renseignez l'IP du serveur et le port 514 dans la
configuration « syslog distant ».
- **Test manuel** : `logger -n 127.0.0.1 -P 514 -d "hello error"` (util-linux) ou
@@ -55,7 +55,7 @@ affiche tous ses champs.
L'icône d'étiquette ouvre l'éditeur. Chaque tag a un mot-clé, une couleur de fond (le texte
passe automatiquement en noir ou en blanc pour rester lisible) et des options : mot entier,
respect de la casse, expression régulière, actif. Les tags sont enregistrés dans
`/data/tags.json` (volume `logwell-data`). Tags par défaut : `warning` (orange),
`/data/tags.json` (volume `logstream-data`). Tags par défaut : `warning` (orange),
`error` (rouge), `ok` (vert).
## Configuration
@@ -71,7 +71,7 @@ respect de la casse, expression régulière, actif. Les tags sont enregistrés d
## Débogage
- `docker compose logs -f logwell` : erreurs de réception et d'envoi vers VictoriaLogs.
- `docker compose logs -f logstream` : erreurs de réception et d'envoi vers VictoriaLogs.
- La barre du bas affiche les compteurs reçus / stockés / perdus et la dernière erreur de stockage.
- <http://localhost:9428/select/vmui> : interface native de VictoriaLogs pour tester des requêtes LogsQL.
- API :
+5 -5
View File
@@ -1,7 +1,7 @@
services:
logwell:
logstream:
build: .
container_name: logwell
container_name: logstream
restart: unless-stopped
depends_on:
- victorialogs
@@ -15,12 +15,12 @@ services:
AUTH_USER: ${AUTH_USER:-} # laisser vide pour désactiver l'authentification
AUTH_PASS: ${AUTH_PASS:-}
volumes:
- logwell-data:/data # tags.json
- logstream-data:/data # tags.json
victorialogs:
# Épinglez une version précise en production (voir hub.docker.com/r/victoriametrics/victoria-logs/tags)
image: victoriametrics/victoria-logs:latest
container_name: logwell-victorialogs
container_name: logstream-victorialogs
restart: unless-stopped
command:
- -storageDataPath=/vlogs
@@ -33,5 +33,5 @@ services:
- "127.0.0.1:9428:9428"
volumes:
logwell-data:
logstream-data:
vlogs-data:
+1 -1
View File
@@ -1,3 +1,3 @@
module logwell
module logstream
go 1.23
+2 -2
View File
@@ -1,4 +1,4 @@
// Logwell : puits de logs syslog (UDP/TCP) stocké dans VictoriaLogs,
// Logstream : puits de logs syslog (UDP/TCP) stocké dans VictoriaLogs,
// avec une interface web de consultation.
package main
@@ -131,7 +131,7 @@ func basicAuth(user, pass string, next http.Handler) http.Handler {
if !ok ||
subtle.ConstantTimeCompare([]byte(u), []byte(user)) != 1 ||
subtle.ConstantTimeCompare([]byte(p), []byte(pass)) != 1 {
w.Header().Set("WWW-Authenticate", `Basic realm="logwell"`)
w.Header().Set("WWW-Authenticate", `Basic realm="logstream"`)
http.Error(w, "authentification requise", http.StatusUnauthorized)
return
}
+2 -2
View File
@@ -8,8 +8,8 @@ const MAX_ROWS = 2000; // lignes gardées à l'écran en mode direct
const RANGE_MS = { '5m': 3e5, '15m': 9e5, '1h': 36e5, '6h': 216e5, '24h': 864e5, '7d': 6048e5, '30d': 2592e6 };
const store = {
get(k, def) { try { const v = localStorage.getItem('logwell.' + k); return v === null ? def : v; } catch { return def; } },
set(k, v) { try { localStorage.setItem('logwell.' + k, v); } catch { /* stockage indisponible */ } },
get(k, def) { try { const v = localStorage.getItem('logstream.' + k); return v === null ? def : v; } catch { return def; } },
set(k, v) { try { localStorage.setItem('logstream.' + k, v); } catch { /* stockage indisponible */ } },
};
const ESC = { '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;' };
+3 -3
View File
@@ -3,19 +3,19 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Logwell</title>
<title>Logstream</title>
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' rx='8' fill='%236366f1'/%3E%3Cpath d='M8 10h16M8 16h11M8 22h14' stroke='white' stroke-width='3' stroke-linecap='round'/%3E%3C/svg%3E">
<link rel="stylesheet" href="style.css">
<script>
// Applique le thème mémorisé avant l'affichage, pour éviter un flash.
try { var t = localStorage.getItem('logwell.theme'); if (t) document.documentElement.dataset.theme = t; } catch (e) {}
try { var t = localStorage.getItem('logstream.theme'); if (t) document.documentElement.dataset.theme = t; } catch (e) {}
</script>
</head>
<body>
<header class="topbar">
<div class="brand">
<svg viewBox="0 0 32 32" aria-hidden="true"><rect width="32" height="32" rx="8"/><path d="M8 10h16M8 16h11M8 22h14"/></svg>
<span>Logwell</span>
<span>Logstream</span>
</div>
<div class="search">