Architecture diagram: current main, timeline histogram

- Title without the commit hash (the hand-drawn font turned "32593b9" into
  "3259369"); the subtitle dates the diagram instead.
- New Histogram (histogram.go) box: API -> histogram -> VictoriaLogs (stats).
- Query mentions the from/to range (zoom); the web UI mentions the
  timeline, columns and live view.
- Multi-segment arrows drawn straight, routed between the containers.
- PNG regenerated from the .excalidraw source (Excalidraw 0.18 renderer).
- README: histogram.go in the Search flow.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
cedricandClaude Opus 5.5 committed 2026-10-02 09:17:52 +02:00
1 parent b3b7041ee9
commit 459d5cb79b
3 files changed
+287 -37

No files matched your search

+2 -1
View File
@@ -18,7 +18,8 @@ devices ──514 udp/tcp──▶ logstream (Go) ──HTTP batches──▶ Vi
on IP hosts), then the `Store` queue, which sends them in batches to VictoriaLogs. on IP hosts), then the `Store` queue, which sends them in batches to VictoriaLogs.
- **Live view**: `sink()` also publishes each message to the `Hub`, which streams it to the - **Live view**: `sink()` also publishes each message to the `Hub`, which streams it to the
browsers over SSE. browsers over SSE.
- **Search**: the HTTP API turns the UI filters into LogsQL queries sent to VictoriaLogs. - **Search**: the HTTP API turns the UI filters into LogsQL queries sent to VictoriaLogs;
`histogram.go` computes the timeline intervals (division, time zone, count per severity).
- **State**: tags and source settings live in `/data` (`logstream-data` volume); the logs - **State**: tags and source settings live in `/data` (`logstream-data` volume); the logs
themselves in the `vlogs-data` volume. themselves in the `vlogs-data` volume.
+285 -36
View File
@@ -8,7 +8,7 @@
"type": "text", "type": "text",
"x": 380, "x": 380,
"y": -40, "y": -40,
"width": 638, "width": 403.0,
"height": 35.0, "height": 35.0,
"angle": 0, "angle": 0,
"strokeColor": "#1e1e1e", "strokeColor": "#1e1e1e",
@@ -29,8 +29,8 @@
"updated": 1759385400000, "updated": 1759385400000,
"link": null, "link": null,
"locked": false, "locked": false,
"text": "LogStream : schéma logique (commit 32593b9)", "text": "LogStream : schéma logique",
"originalText": "LogStream : schéma logique (commit 32593b9)", "originalText": "LogStream : schéma logique",
"fontSize": 28, "fontSize": 28,
"fontFamily": 1, "fontFamily": 1,
"textAlign": "left", "textAlign": "left",
@@ -44,7 +44,7 @@
"type": "text", "type": "text",
"x": 380, "x": 380,
"y": 0, "y": 0,
"width": 836, "width": 991.6,
"height": 20.0, "height": 20.0,
"angle": 0, "angle": 0,
"strokeColor": "#757575", "strokeColor": "#757575",
@@ -65,8 +65,8 @@
"updated": 1759385400000, "updated": 1759385400000,
"link": null, "link": null,
"locked": false, "locked": false,
"text": "Go stdlib, binaire unique, UI embarquée ; stockage VictoriaLogs ; déploiement docker compose (3 services)", "text": "État de main au 02/10/2026 · Go stdlib, binaire unique, UI embarquée ; stockage VictoriaLogs ; déploiement docker compose (3 services)",
"originalText": "Go stdlib, binaire unique, UI embarquée ; stockage VictoriaLogs ; déploiement docker compose (3 services)", "originalText": "État de main au 02/10/2026 · Go stdlib, binaire unique, UI embarquée ; stockage VictoriaLogs ; déploiement docker compose (3 services)",
"fontSize": 16, "fontSize": 16,
"fontFamily": 1, "fontFamily": 1,
"textAlign": "left", "textAlign": "left",
@@ -955,6 +955,10 @@
{ {
"type": "arrow", "type": "arrow",
"id": "a_nav" "id": "a_nav"
},
{
"type": "arrow",
"id": "a_ah"
} }
], ],
"updated": 1759385400000, "updated": 1759385400000,
@@ -1001,9 +1005,9 @@
"id": "query", "id": "query",
"type": "rectangle", "type": "rectangle",
"x": 900, "x": 900,
"y": 520, "y": 515,
"width": 240, "width": 240,
"height": 90, "height": 100,
"angle": 0, "angle": 0,
"strokeColor": "#8b5cf6", "strokeColor": "#8b5cf6",
"backgroundColor": "#d0bfff", "backgroundColor": "#d0bfff",
@@ -1042,10 +1046,10 @@
{ {
"id": "query_lbl", "id": "query_lbl",
"type": "text", "type": "text",
"x": 937.5, "x": 937.05,
"y": 535.0, "y": 525.0,
"width": 165, "width": 165.9,
"height": 60.0, "height": 80.0,
"angle": 0, "angle": 0,
"strokeColor": "#1e1e1e", "strokeColor": "#1e1e1e",
"backgroundColor": "transparent", "backgroundColor": "transparent",
@@ -1065,8 +1069,8 @@
"updated": 1759385400000, "updated": 1759385400000,
"link": null, "link": null,
"locked": false, "locked": false,
"text": "Query\nfiltres UI → LogsQL\nMatcher (filtre live)", "text": "Query\nfiltres UI → LogsQL\nMatcher (filtre live)\nplage from/to (zoom)",
"originalText": "Query\nfiltres UI → LogsQL\nMatcher (filtre live)", "originalText": "Query\nfiltres UI → LogsQL\nMatcher (filtre live)\nplage from/to (zoom)",
"fontSize": 16, "fontSize": 16,
"fontFamily": 1, "fontFamily": 1,
"textAlign": "center", "textAlign": "center",
@@ -1075,6 +1079,253 @@
"lineHeight": 1.25, "lineHeight": 1.25,
"autoResize": true "autoResize": true
}, },
{
"id": "hist",
"type": "rectangle",
"x": 900,
"y": 650,
"width": 250,
"height": 90,
"angle": 0,
"strokeColor": "#8b5cf6",
"backgroundColor": "#d0bfff",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"roundness": {
"type": 3
},
"seed": 771234567,
"version": 1,
"versionNonce": 1234987,
"isDeleted": false,
"boundElements": [
{
"type": "text",
"id": "hist_lbl"
},
{
"type": "arrow",
"id": "a_ah"
},
{
"type": "arrow",
"id": "a_hv"
}
],
"updated": 1759385400000,
"link": null,
"locked": false
},
{
"id": "hist_lbl",
"type": "text",
"x": 918.35,
"y": 665.0,
"width": 213.3,
"height": 60.0,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"roundness": null,
"seed": 771234568,
"version": 1,
"versionNonce": 1234988,
"isDeleted": false,
"boundElements": [],
"updated": 1759385400000,
"link": null,
"locked": false,
"text": "Histogram (histogram.go)\npas auto/fixe ≤ 300 interv.\nfuseau, détail par sévérité",
"originalText": "Histogram (histogram.go)\npas auto/fixe ≤ 300 interv.\nfuseau, détail par sévérité",
"fontSize": 16,
"fontFamily": 1,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "hist",
"lineHeight": 1.25,
"autoResize": true
},
{
"id": "a_ah",
"type": "arrow",
"x": 860,
"y": 695,
"width": 40,
"height": 0,
"angle": 0,
"strokeColor": "#22c55e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"roundness": {
"type": 2
},
"seed": 771234569,
"version": 1,
"versionNonce": 1234989,
"isDeleted": false,
"boundElements": [],
"updated": 1759385400000,
"link": null,
"locked": false,
"points": [
[
0,
0
],
[
40,
0
]
],
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": "arrow",
"elbowed": false,
"startBinding": {
"elementId": "api",
"focus": 0,
"gap": 4,
"fixedPoint": [
1,
0.875
]
},
"endBinding": {
"elementId": "hist",
"focus": 0,
"gap": 4,
"fixedPoint": [
0,
0.5
]
}
},
{
"id": "a_hv",
"type": "arrow",
"x": 1150,
"y": 695,
"width": 110,
"height": 360,
"angle": 0,
"strokeColor": "#0f9f8f",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"roundness": null,
"seed": 771234570,
"version": 1,
"versionNonce": 1234990,
"isDeleted": false,
"boundElements": [
{
"type": "text",
"id": "a_hv_lbl"
}
],
"updated": 1759385400000,
"link": null,
"locked": false,
"points": [
[
0,
0
],
[
72,
0
],
[
72,
-360
],
[
110,
-360
]
],
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": "arrow",
"elbowed": false,
"startBinding": {
"elementId": "hist",
"focus": 0,
"gap": 4,
"fixedPoint": [
1,
0.5
]
},
"endBinding": {
"elementId": "vl",
"focus": 0,
"gap": 4,
"fixedPoint": [
0,
0.97
]
}
},
{
"id": "a_hv_lbl",
"type": "text",
"x": 1204.7,
"y": 551.25,
"width": 34.6,
"height": 17.5,
"angle": 0,
"strokeColor": "#0f9f8f",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"roundness": null,
"seed": 771234571,
"version": 1,
"versionNonce": 1234991,
"isDeleted": false,
"boundElements": [],
"updated": 1759385400000,
"link": null,
"locked": false,
"text": "stats",
"originalText": "stats",
"fontSize": 14,
"fontFamily": 1,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "a_hv",
"lineHeight": 1.25,
"autoResize": true
},
{ {
"id": "tags", "id": "tags",
"type": "rectangle", "type": "rectangle",
@@ -1157,9 +1408,9 @@
"id": "ui", "id": "ui",
"type": "rectangle", "type": "rectangle",
"x": 340, "x": 340,
"y": 660, "y": 655,
"width": 230, "width": 230,
"height": 80, "height": 95,
"angle": 0, "angle": 0,
"strokeColor": "#22c55e", "strokeColor": "#22c55e",
"backgroundColor": "#b2f2bb", "backgroundColor": "#b2f2bb",
@@ -1194,10 +1445,10 @@
{ {
"id": "ui_lbl", "id": "ui_lbl",
"type": "text", "type": "text",
"x": 372.0, "x": 372.05,
"y": 670.0, "y": 662.5,
"width": 166, "width": 165.9,
"height": 60.0, "height": 80.0,
"angle": 0, "angle": 0,
"strokeColor": "#1e1e1e", "strokeColor": "#1e1e1e",
"backgroundColor": "transparent", "backgroundColor": "transparent",
@@ -1217,8 +1468,8 @@
"updated": 1759385400000, "updated": 1759385400000,
"link": null, "link": null,
"locked": false, "locked": false,
"text": "UI web embarquée\ngo:embed web/\nHTML/CSS/JS vanilla", "text": "UI web embarquée\ngo:embed web/\nHTML/CSS/JS vanilla\nfrise, colonnes, live",
"originalText": "UI web embarquée\ngo:embed web/\nHTML/CSS/JS vanilla", "originalText": "UI web embarquée\ngo:embed web/\nHTML/CSS/JS vanilla\nfrise, colonnes, live",
"fontSize": 16, "fontSize": 16,
"fontFamily": 1, "fontFamily": 1,
"textAlign": "center", "textAlign": "center",
@@ -1332,6 +1583,10 @@
{ {
"type": "arrow", "type": "arrow",
"id": "a_vd" "id": "a_vd"
},
{
"type": "arrow",
"id": "a_hv"
} }
], ],
"updated": 1759385400000, "updated": 1759385400000,
@@ -2490,9 +2745,7 @@
"opacity": 100, "opacity": 100,
"groupIds": [], "groupIds": [],
"frameId": null, "frameId": null,
"roundness": { "roundness": null,
"type": 2
},
"seed": 656439678, "seed": 656439678,
"version": 1, "version": 1,
"versionNonce": 1605947757, "versionNonce": 1605947757,
@@ -2512,12 +2765,12 @@
0 0
], ],
[ [
60, 55,
0.0 0
], ],
[ [
60, 55,
-250.0 -250
], ],
[ [
120, 120,
@@ -2550,7 +2803,7 @@
{ {
"id": "a_q_lbl", "id": "a_q_lbl",
"type": "text", "type": "text",
"x": 1175.5, "x": 1170.5,
"y": 431.25, "y": 431.25,
"width": 49, "width": 49,
"height": 17.5, "height": 17.5,
@@ -2661,9 +2914,7 @@
"opacity": 100, "opacity": 100,
"groupIds": [], "groupIds": [],
"frameId": null, "frameId": null,
"roundness": { "roundness": null,
"type": 2
},
"seed": 83651971, "seed": 83651971,
"version": 1, "version": 1,
"versionNonce": 480468220, "versionNonce": 480468220,
@@ -3097,9 +3348,7 @@
"opacity": 100, "opacity": 100,
"groupIds": [], "groupIds": [],
"frameId": null, "frameId": null,
"roundness": { "roundness": null,
"type": 2
},
"seed": 1817363616, "seed": 1817363616,
"version": 1, "version": 1,
"versionNonce": 909666338, "versionNonce": 909666338,
Binary file not shown.

Before

Width:  |  Height:  |  Size: 597 KiB

After

Width:  |  Height:  |  Size: 711 KiB