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.

fix: use raw stream counter for events/sec dashboard panel

switch from events_received_counter (post-rate-limiting) to
indigo_repo_stream_events_received_total (raw WebSocket frames)
so the metric matches zlay's relay_frames_received_total and
both dashboards show comparable numbers.

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

zzstoatzz 8d63698f a9061036

+249 -58
+249 -58
deploy/relay-dashboard.json
··· 10 10 { 11 11 "title": "events/sec", 12 12 "type": "timeseries", 13 - "gridPos": { "h": 8, "w": 8, "x": 0, "y": 0 }, 14 - "datasource": { "type": "prometheus", "uid": "prometheus" }, 13 + "gridPos": { 14 + "h": 8, 15 + "w": 8, 16 + "x": 0, 17 + "y": 0 18 + }, 19 + "datasource": { 20 + "type": "prometheus", 21 + "uid": "prometheus" 22 + }, 15 23 "fieldConfig": { 16 24 "defaults": { 17 25 "unit": "ops", 18 - "color": { "mode": "palette-classic" }, 26 + "color": { 27 + "mode": "palette-classic" 28 + }, 19 29 "custom": { 20 30 "fillOpacity": 15, 21 31 "lineWidth": 2, ··· 26 36 }, 27 37 "targets": [ 28 38 { 29 - "expr": "sum(rate(events_received_counter[5m]))", 39 + "expr": "sum(rate(indigo_repo_stream_events_received_total[5m]))", 30 40 "legendFormat": "events received", 31 41 "refId": "A" 32 42 } ··· 35 45 { 36 46 "title": "connected PDS hosts", 37 47 "type": "stat", 38 - "gridPos": { "h": 8, "w": 8, "x": 8, "y": 0 }, 39 - "datasource": { "type": "prometheus", "uid": "prometheus" }, 48 + "gridPos": { 49 + "h": 8, 50 + "w": 8, 51 + "x": 8, 52 + "y": 0 53 + }, 54 + "datasource": { 55 + "type": "prometheus", 56 + "uid": "prometheus" 57 + }, 40 58 "fieldConfig": { 41 59 "defaults": { 42 - "color": { "mode": "thresholds" }, 60 + "color": { 61 + "mode": "thresholds" 62 + }, 43 63 "thresholds": { 44 64 "steps": [ 45 - { "color": "red", "value": null }, 46 - { "color": "yellow", "value": 500 }, 47 - { "color": "green", "value": 1000 } 65 + { 66 + "color": "red", 67 + "value": null 68 + }, 69 + { 70 + "color": "yellow", 71 + "value": 500 72 + }, 73 + { 74 + "color": "green", 75 + "value": 1000 76 + } 48 77 ] 49 78 } 50 79 }, ··· 53 82 "options": { 54 83 "colorMode": "value", 55 84 "graphMode": "area", 56 - "reduceOptions": { "calcs": ["lastNotNull"] } 85 + "reduceOptions": { 86 + "calcs": [ 87 + "lastNotNull" 88 + ] 89 + } 57 90 }, 58 91 "targets": [ 59 92 { ··· 66 99 { 67 100 "title": "downstream consumers", 68 101 "type": "timeseries", 69 - "gridPos": { "h": 8, "w": 8, "x": 16, "y": 0 }, 70 - "datasource": { "type": "prometheus", "uid": "prometheus" }, 102 + "gridPos": { 103 + "h": 8, 104 + "w": 8, 105 + "x": 16, 106 + "y": 0 107 + }, 108 + "datasource": { 109 + "type": "prometheus", 110 + "uid": "prometheus" 111 + }, 71 112 "fieldConfig": { 72 113 "defaults": { 73 114 "unit": "ops", 74 - "color": { "mode": "palette-classic" }, 115 + "color": { 116 + "mode": "palette-classic" 117 + }, 75 118 "custom": { 76 119 "fillOpacity": 15, 77 120 "lineWidth": 2, ··· 91 134 { 92 135 "title": "event handle latency p99", 93 136 "type": "timeseries", 94 - "gridPos": { "h": 8, "w": 8, "x": 0, "y": 8 }, 95 - "datasource": { "type": "prometheus", "uid": "prometheus" }, 137 + "gridPos": { 138 + "h": 8, 139 + "w": 8, 140 + "x": 0, 141 + "y": 8 142 + }, 143 + "datasource": { 144 + "type": "prometheus", 145 + "uid": "prometheus" 146 + }, 96 147 "fieldConfig": { 97 148 "defaults": { 98 149 "unit": "s", 99 - "color": { "mode": "palette-classic" }, 150 + "color": { 151 + "mode": "palette-classic" 152 + }, 100 153 "custom": { 101 154 "fillOpacity": 10, 102 155 "lineWidth": 2, ··· 116 169 { 117 170 "title": "go memory", 118 171 "type": "timeseries", 119 - "gridPos": { "h": 8, "w": 8, "x": 8, "y": 8 }, 120 - "datasource": { "type": "prometheus", "uid": "prometheus" }, 172 + "gridPos": { 173 + "h": 8, 174 + "w": 8, 175 + "x": 8, 176 + "y": 8 177 + }, 178 + "datasource": { 179 + "type": "prometheus", 180 + "uid": "prometheus" 181 + }, 121 182 "fieldConfig": { 122 183 "defaults": { 123 184 "unit": "bytes", 124 - "color": { "mode": "palette-classic" }, 185 + "color": { 186 + "mode": "palette-classic" 187 + }, 125 188 "custom": { 126 189 "fillOpacity": 15, 127 190 "lineWidth": 2, ··· 146 209 { 147 210 "title": "goroutines", 148 211 "type": "timeseries", 149 - "gridPos": { "h": 8, "w": 8, "x": 16, "y": 8 }, 150 - "datasource": { "type": "prometheus", "uid": "prometheus" }, 212 + "gridPos": { 213 + "h": 8, 214 + "w": 8, 215 + "x": 16, 216 + "y": 8 217 + }, 218 + "datasource": { 219 + "type": "prometheus", 220 + "uid": "prometheus" 221 + }, 151 222 "fieldConfig": { 152 223 "defaults": { 153 - "color": { "mode": "palette-classic" }, 224 + "color": { 225 + "mode": "palette-classic" 226 + }, 154 227 "custom": { 155 228 "fillOpacity": 15, 156 229 "lineWidth": 2, ··· 170 243 { 171 244 "title": "http request rate", 172 245 "type": "timeseries", 173 - "gridPos": { "h": 8, "w": 24, "x": 0, "y": 16 }, 174 - "datasource": { "type": "prometheus", "uid": "prometheus" }, 246 + "gridPos": { 247 + "h": 8, 248 + "w": 24, 249 + "x": 0, 250 + "y": 16 251 + }, 252 + "datasource": { 253 + "type": "prometheus", 254 + "uid": "prometheus" 255 + }, 175 256 "fieldConfig": { 176 257 "defaults": { 177 258 "unit": "reqps", 178 - "color": { "mode": "palette-classic" }, 259 + "color": { 260 + "mode": "palette-classic" 261 + }, 179 262 "custom": { 180 263 "fillOpacity": 15, 181 264 "lineWidth": 2, ··· 195 278 { 196 279 "title": "jetstream", 197 280 "type": "row", 198 - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 24 }, 281 + "gridPos": { 282 + "h": 1, 283 + "w": 24, 284 + "x": 0, 285 + "y": 24 286 + }, 199 287 "collapsed": false, 200 288 "panels": [] 201 289 }, 202 290 { 203 291 "title": "jetstream subscribers", 204 292 "type": "stat", 205 - "gridPos": { "h": 8, "w": 6, "x": 0, "y": 25 }, 206 - "datasource": { "type": "prometheus", "uid": "prometheus" }, 293 + "gridPos": { 294 + "h": 8, 295 + "w": 6, 296 + "x": 0, 297 + "y": 25 298 + }, 299 + "datasource": { 300 + "type": "prometheus", 301 + "uid": "prometheus" 302 + }, 207 303 "fieldConfig": { 208 304 "defaults": { 209 - "color": { "mode": "thresholds" }, 305 + "color": { 306 + "mode": "thresholds" 307 + }, 210 308 "thresholds": { 211 309 "steps": [ 212 - { "color": "red", "value": null }, 213 - { "color": "green", "value": 1 } 310 + { 311 + "color": "red", 312 + "value": null 313 + }, 314 + { 315 + "color": "green", 316 + "value": 1 317 + } 214 318 ] 215 319 } 216 320 }, ··· 219 323 "options": { 220 324 "colorMode": "value", 221 325 "graphMode": "area", 222 - "reduceOptions": { "calcs": ["lastNotNull"] } 326 + "reduceOptions": { 327 + "calcs": [ 328 + "lastNotNull" 329 + ] 330 + } 223 331 }, 224 332 "targets": [ 225 333 { ··· 232 340 { 233 341 "title": "jetstream events/sec", 234 342 "type": "timeseries", 235 - "gridPos": { "h": 8, "w": 9, "x": 6, "y": 25 }, 236 - "datasource": { "type": "prometheus", "uid": "prometheus" }, 343 + "gridPos": { 344 + "h": 8, 345 + "w": 9, 346 + "x": 6, 347 + "y": 25 348 + }, 349 + "datasource": { 350 + "type": "prometheus", 351 + "uid": "prometheus" 352 + }, 237 353 "fieldConfig": { 238 354 "defaults": { 239 355 "unit": "ops", 240 - "color": { "mode": "palette-classic" }, 356 + "color": { 357 + "mode": "palette-classic" 358 + }, 241 359 "custom": { 242 360 "fillOpacity": 15, 243 361 "lineWidth": 2, ··· 262 380 { 263 381 "title": "jetstream bytes delivered/sec", 264 382 "type": "timeseries", 265 - "gridPos": { "h": 8, "w": 9, "x": 15, "y": 25 }, 266 - "datasource": { "type": "prometheus", "uid": "prometheus" }, 383 + "gridPos": { 384 + "h": 8, 385 + "w": 9, 386 + "x": 15, 387 + "y": 25 388 + }, 389 + "datasource": { 390 + "type": "prometheus", 391 + "uid": "prometheus" 392 + }, 267 393 "fieldConfig": { 268 394 "defaults": { 269 395 "unit": "Bps", 270 - "color": { "mode": "palette-classic" }, 396 + "color": { 397 + "mode": "palette-classic" 398 + }, 271 399 "custom": { 272 400 "fillOpacity": 15, 273 401 "lineWidth": 2, ··· 292 420 { 293 421 "title": "collectiondir", 294 422 "type": "row", 295 - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 33 }, 423 + "gridPos": { 424 + "h": 1, 425 + "w": 24, 426 + "x": 0, 427 + "y": 33 428 + }, 296 429 "collapsed": false, 297 430 "panels": [] 298 431 }, 299 432 { 300 433 "title": "collectiondir firehose events/sec", 301 434 "type": "timeseries", 302 - "gridPos": { "h": 8, "w": 8, "x": 0, "y": 34 }, 303 - "datasource": { "type": "prometheus", "uid": "prometheus" }, 435 + "gridPos": { 436 + "h": 8, 437 + "w": 8, 438 + "x": 0, 439 + "y": 34 440 + }, 441 + "datasource": { 442 + "type": "prometheus", 443 + "uid": "prometheus" 444 + }, 304 445 "fieldConfig": { 305 446 "defaults": { 306 447 "unit": "ops", 307 - "color": { "mode": "palette-classic" }, 448 + "color": { 449 + "mode": "palette-classic" 450 + }, 308 451 "custom": { 309 452 "fillOpacity": 15, 310 453 "lineWidth": 2, ··· 324 467 { 325 468 "title": "collectiondir commits/sec", 326 469 "type": "timeseries", 327 - "gridPos": { "h": 8, "w": 8, "x": 8, "y": 34 }, 328 - "datasource": { "type": "prometheus", "uid": "prometheus" }, 470 + "gridPos": { 471 + "h": 8, 472 + "w": 8, 473 + "x": 8, 474 + "y": 34 475 + }, 476 + "datasource": { 477 + "type": "prometheus", 478 + "uid": "prometheus" 479 + }, 329 480 "fieldConfig": { 330 481 "defaults": { 331 482 "unit": "ops", 332 - "color": { "mode": "palette-classic" }, 483 + "color": { 484 + "mode": "palette-classic" 485 + }, 333 486 "custom": { 334 487 "fillOpacity": 15, 335 488 "lineWidth": 2, ··· 349 502 { 350 503 "title": "collectiondir new pairs indexed/sec", 351 504 "type": "timeseries", 352 - "gridPos": { "h": 8, "w": 8, "x": 16, "y": 34 }, 353 - "datasource": { "type": "prometheus", "uid": "prometheus" }, 505 + "gridPos": { 506 + "h": 8, 507 + "w": 8, 508 + "x": 16, 509 + "y": 34 510 + }, 511 + "datasource": { 512 + "type": "prometheus", 513 + "uid": "prometheus" 514 + }, 354 515 "fieldConfig": { 355 516 "defaults": { 356 517 "unit": "ops", 357 - "color": { "mode": "palette-classic" }, 518 + "color": { 519 + "mode": "palette-classic" 520 + }, 358 521 "custom": { 359 522 "fillOpacity": 15, 360 523 "lineWidth": 2, ··· 374 537 { 375 538 "title": "collectiondir disk i/o", 376 539 "type": "timeseries", 377 - "gridPos": { "h": 8, "w": 8, "x": 0, "y": 42 }, 378 - "datasource": { "type": "prometheus", "uid": "prometheus" }, 540 + "gridPos": { 541 + "h": 8, 542 + "w": 8, 543 + "x": 0, 544 + "y": 42 545 + }, 546 + "datasource": { 547 + "type": "prometheus", 548 + "uid": "prometheus" 549 + }, 379 550 "fieldConfig": { 380 551 "defaults": { 381 552 "unit": "Bps", 382 - "color": { "mode": "palette-classic" }, 553 + "color": { 554 + "mode": "palette-classic" 555 + }, 383 556 "custom": { 384 557 "fillOpacity": 15, 385 558 "lineWidth": 2, ··· 404 577 { 405 578 "title": "collectiondir memory", 406 579 "type": "timeseries", 407 - "gridPos": { "h": 8, "w": 8, "x": 8, "y": 42 }, 408 - "datasource": { "type": "prometheus", "uid": "prometheus" }, 580 + "gridPos": { 581 + "h": 8, 582 + "w": 8, 583 + "x": 8, 584 + "y": 42 585 + }, 586 + "datasource": { 587 + "type": "prometheus", 588 + "uid": "prometheus" 589 + }, 409 590 "fieldConfig": { 410 591 "defaults": { 411 592 "unit": "bytes", 412 - "color": { "mode": "palette-classic" }, 593 + "color": { 594 + "mode": "palette-classic" 595 + }, 413 596 "custom": { 414 597 "fillOpacity": 15, 415 598 "lineWidth": 2, ··· 433 616 } 434 617 ], 435 618 "schemaVersion": 39, 436 - "tags": ["relay", "atproto"], 437 - "templating": { "list": [] }, 438 - "time": { "from": "now-1h", "to": "now" }, 619 + "tags": [ 620 + "relay", 621 + "atproto" 622 + ], 623 + "templating": { 624 + "list": [] 625 + }, 626 + "time": { 627 + "from": "now-1h", 628 + "to": "now" 629 + }, 439 630 "timepicker": {}, 440 631 "timezone": "browser", 441 632 "title": "relay.waow.tech",