declarative relay deployment on hetzner relay-eval.waow.tech
atproto relay
14
fork

Configure Feed

Select the types of activity you want to include in your feed.

align relay dashboards: consistent layout, threads panel for zig

both dashboards now follow the same structure:
row 1: events/sec, connected PDS hosts, downstream consumers
row 2: [processing quality], memory, [concurrency]
row 3: implementation-specific panels

changes:
- zlay: replace uptime stat with threads timeseries (container_threads)
as the goroutines analog — one OS thread per subscriber worker
- go: switch memory from go_memstats to container_memory_working_set_bytes
+ resource limit, matching zlay's memory panel

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

zzstoatzz 5191eadb 8d63698f

+14 -22
+5 -5
deploy/relay-dashboard.json
··· 167 167 ] 168 168 }, 169 169 { 170 - "title": "go memory", 170 + "title": "memory", 171 171 "type": "timeseries", 172 172 "gridPos": { 173 173 "h": 8, ··· 195 195 }, 196 196 "targets": [ 197 197 { 198 - "expr": "go_memstats_alloc_bytes{job=\"relay\"}", 199 - "legendFormat": "alloc", 198 + "expr": "container_memory_working_set_bytes{namespace=\"relay\",pod=~\"relay-[a-z0-9].*\",container=\"main\"}", 199 + "legendFormat": "working set", 200 200 "refId": "A" 201 201 }, 202 202 { 203 - "expr": "go_memstats_sys_bytes{job=\"relay\"}", 204 - "legendFormat": "sys", 203 + "expr": "kube_pod_container_resource_limits{namespace=\"relay\",pod=~\"relay-[a-z0-9].*\",container=\"main\",resource=\"memory\"}", 204 + "legendFormat": "limit", 205 205 "refId": "B" 206 206 } 207 207 ]
+9 -17
deploy/zlay-dashboard.json
··· 154 154 ] 155 155 }, 156 156 { 157 - "title": "uptime", 158 - "type": "stat", 157 + "title": "threads", 158 + "type": "timeseries", 159 159 "gridPos": { "h": 8, "w": 8, "x": 16, "y": 8 }, 160 160 "datasource": { "type": "prometheus", "uid": "prometheus" }, 161 161 "fieldConfig": { 162 162 "defaults": { 163 - "unit": "s", 164 - "color": { "mode": "thresholds" }, 165 - "thresholds": { 166 - "steps": [ 167 - { "color": "red", "value": null }, 168 - { "color": "yellow", "value": 3600 }, 169 - { "color": "green", "value": 86400 } 170 - ] 163 + "color": { "mode": "palette-classic" }, 164 + "custom": { 165 + "fillOpacity": 15, 166 + "lineWidth": 2, 167 + "spanNulls": false 171 168 } 172 169 }, 173 170 "overrides": [] 174 171 }, 175 - "options": { 176 - "colorMode": "value", 177 - "graphMode": "none", 178 - "reduceOptions": { "calcs": ["lastNotNull"] } 179 - }, 180 172 "targets": [ 181 173 { 182 - "expr": "sum(relay_uptime_seconds{job=\"zlay\"})", 183 - "legendFormat": "uptime", 174 + "expr": "container_threads{namespace=\"zlay\",pod=~\"zlay-[a-z0-9].*\",container=\"main\"}", 175 + "legendFormat": "threads", 184 176 "refId": "A" 185 177 } 186 178 ]