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.

zlay dashboard: add validation failure breakdown to errors panel

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

+300 -67
+300 -67
zlay/deploy/zlay-dashboard.json
··· 10 10 { 11 11 "title": "throughput", 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, ··· 40 50 { 41 51 "title": "connected PDS hosts", 42 52 "type": "stat", 43 - "gridPos": { "h": 8, "w": 8, "x": 8, "y": 0 }, 44 - "datasource": { "type": "prometheus", "uid": "prometheus" }, 53 + "gridPos": { 54 + "h": 8, 55 + "w": 8, 56 + "x": 8, 57 + "y": 0 58 + }, 59 + "datasource": { 60 + "type": "prometheus", 61 + "uid": "prometheus" 62 + }, 45 63 "fieldConfig": { 46 64 "defaults": { 47 - "color": { "mode": "thresholds" }, 65 + "color": { 66 + "mode": "thresholds" 67 + }, 48 68 "thresholds": { 49 69 "steps": [ 50 - { "color": "red", "value": null }, 51 - { "color": "yellow", "value": 500 }, 52 - { "color": "green", "value": 1000 } 70 + { 71 + "color": "red", 72 + "value": null 73 + }, 74 + { 75 + "color": "yellow", 76 + "value": 500 77 + }, 78 + { 79 + "color": "green", 80 + "value": 1000 81 + } 53 82 ] 54 83 } 55 84 }, ··· 58 87 "options": { 59 88 "colorMode": "value", 60 89 "graphMode": "area", 61 - "reduceOptions": { "calcs": ["lastNotNull"] } 90 + "reduceOptions": { 91 + "calcs": [ 92 + "lastNotNull" 93 + ] 94 + } 62 95 }, 63 96 "targets": [ 64 97 { ··· 71 104 { 72 105 "title": "validation/sec", 73 106 "type": "timeseries", 74 - "gridPos": { "h": 8, "w": 8, "x": 16, "y": 0 }, 75 - "datasource": { "type": "prometheus", "uid": "prometheus" }, 107 + "gridPos": { 108 + "h": 8, 109 + "w": 8, 110 + "x": 16, 111 + "y": 0 112 + }, 113 + "datasource": { 114 + "type": "prometheus", 115 + "uid": "prometheus" 116 + }, 76 117 "fieldConfig": { 77 118 "defaults": { 78 119 "unit": "ops", 79 - "color": { "mode": "palette-classic" }, 120 + "color": { 121 + "mode": "palette-classic" 122 + }, 80 123 "custom": { 81 124 "fillOpacity": 15, 82 125 "lineWidth": 2, ··· 106 149 { 107 150 "title": "malloc breakdown", 108 151 "type": "timeseries", 109 - "gridPos": { "h": 8, "w": 12, "x": 0, "y": 8 }, 110 - "datasource": { "type": "prometheus", "uid": "prometheus" }, 152 + "gridPos": { 153 + "h": 8, 154 + "w": 12, 155 + "x": 0, 156 + "y": 8 157 + }, 158 + "datasource": { 159 + "type": "prometheus", 160 + "uid": "prometheus" 161 + }, 111 162 "fieldConfig": { 112 163 "defaults": { 113 164 "unit": "bytes", 114 - "color": { "mode": "palette-classic" }, 165 + "color": { 166 + "mode": "palette-classic" 167 + }, 115 168 "custom": { 116 169 "fillOpacity": 15, 117 170 "lineWidth": 2, ··· 146 199 { 147 200 "title": "process memory", 148 201 "type": "timeseries", 149 - "gridPos": { "h": 8, "w": 12, "x": 12, "y": 8 }, 150 - "datasource": { "type": "prometheus", "uid": "prometheus" }, 202 + "gridPos": { 203 + "h": 8, 204 + "w": 12, 205 + "x": 12, 206 + "y": 8 207 + }, 208 + "datasource": { 209 + "type": "prometheus", 210 + "uid": "prometheus" 211 + }, 151 212 "fieldConfig": { 152 213 "defaults": { 153 214 "unit": "bytes", 154 - "color": { "mode": "palette-classic" }, 215 + "color": { 216 + "mode": "palette-classic" 217 + }, 155 218 "custom": { 156 219 "fillOpacity": 15, 157 220 "lineWidth": 2, ··· 160 223 }, 161 224 "overrides": [ 162 225 { 163 - "matcher": { "id": "byName", "options": "limit" }, 226 + "matcher": { 227 + "id": "byName", 228 + "options": "limit" 229 + }, 164 230 "properties": [ 165 - { "id": "custom.lineStyle", "value": { "fill": "dash", "dash": [10, 10] } }, 166 - { "id": "custom.fillOpacity", "value": 0 }, 167 - { "id": "color", "value": { "mode": "fixed", "fixedColor": "red" } } 231 + { 232 + "id": "custom.lineStyle", 233 + "value": { 234 + "fill": "dash", 235 + "dash": [ 236 + 10, 237 + 10 238 + ] 239 + } 240 + }, 241 + { 242 + "id": "custom.fillOpacity", 243 + "value": 0 244 + }, 245 + { 246 + "id": "color", 247 + "value": { 248 + "mode": "fixed", 249 + "fixedColor": "red" 250 + } 251 + } 168 252 ] 169 253 } 170 254 ] ··· 195 279 { 196 280 "title": "memory attribution", 197 281 "type": "timeseries", 198 - "gridPos": { "h": 8, "w": 12, "x": 0, "y": 16 }, 199 - "datasource": { "type": "prometheus", "uid": "prometheus" }, 282 + "gridPos": { 283 + "h": 8, 284 + "w": 12, 285 + "x": 0, 286 + "y": 16 287 + }, 288 + "datasource": { 289 + "type": "prometheus", 290 + "uid": "prometheus" 291 + }, 200 292 "fieldConfig": { 201 293 "defaults": { 202 294 "unit": "bytes", 203 - "color": { "mode": "palette-classic" }, 295 + "color": { 296 + "mode": "palette-classic" 297 + }, 204 298 "custom": { 205 299 "fillOpacity": 15, 206 300 "lineWidth": 2, 207 301 "spanNulls": false, 208 - "stacking": { "mode": "normal" } 302 + "stacking": { 303 + "mode": "normal" 304 + } 209 305 } 210 306 }, 211 307 "overrides": [ 212 308 { 213 - "matcher": { "id": "byName", "options": "RSS" }, 309 + "matcher": { 310 + "id": "byName", 311 + "options": "RSS" 312 + }, 214 313 "properties": [ 215 - { "id": "custom.fillOpacity", "value": 0 }, 216 - { "id": "custom.lineWidth", "value": 3 }, 217 - { "id": "custom.stacking", "value": { "mode": "none" } }, 218 - { "id": "color", "value": { "mode": "fixed", "fixedColor": "white" } } 314 + { 315 + "id": "custom.fillOpacity", 316 + "value": 0 317 + }, 318 + { 319 + "id": "custom.lineWidth", 320 + "value": 3 321 + }, 322 + { 323 + "id": "custom.stacking", 324 + "value": { 325 + "mode": "none" 326 + } 327 + }, 328 + { 329 + "id": "color", 330 + "value": { 331 + "mode": "fixed", 332 + "fixedColor": "white" 333 + } 334 + } 219 335 ] 220 336 }, 221 337 { 222 - "matcher": { "id": "byName", "options": "unaccounted" }, 338 + "matcher": { 339 + "id": "byName", 340 + "options": "unaccounted" 341 + }, 223 342 "properties": [ 224 - { "id": "custom.fillOpacity", "value": 30 }, 225 - { "id": "color", "value": { "mode": "fixed", "fixedColor": "red" } } 343 + { 344 + "id": "custom.fillOpacity", 345 + "value": 30 346 + }, 347 + { 348 + "id": "color", 349 + "value": { 350 + "mode": "fixed", 351 + "fixedColor": "red" 352 + } 353 + } 226 354 ] 227 355 } 228 356 ] ··· 278 406 { 279 407 "title": "leak rate", 280 408 "type": "timeseries", 281 - "gridPos": { "h": 8, "w": 12, "x": 12, "y": 16 }, 282 - "datasource": { "type": "prometheus", "uid": "prometheus" }, 409 + "gridPos": { 410 + "h": 8, 411 + "w": 12, 412 + "x": 12, 413 + "y": 16 414 + }, 415 + "datasource": { 416 + "type": "prometheus", 417 + "uid": "prometheus" 418 + }, 283 419 "fieldConfig": { 284 420 "defaults": { 285 421 "unit": "Bps", 286 - "color": { "mode": "palette-classic" }, 422 + "color": { 423 + "mode": "palette-classic" 424 + }, 287 425 "custom": { 288 426 "fillOpacity": 15, 289 427 "lineWidth": 2, ··· 313 451 { 314 452 "title": "caches", 315 453 "type": "timeseries", 316 - "gridPos": { "h": 8, "w": 12, "x": 0, "y": 24 }, 317 - "datasource": { "type": "prometheus", "uid": "prometheus" }, 454 + "gridPos": { 455 + "h": 8, 456 + "w": 12, 457 + "x": 0, 458 + "y": 24 459 + }, 460 + "datasource": { 461 + "type": "prometheus", 462 + "uid": "prometheus" 463 + }, 318 464 "fieldConfig": { 319 465 "defaults": { 320 - "color": { "mode": "palette-classic" }, 466 + "color": { 467 + "mode": "palette-classic" 468 + }, 321 469 "custom": { 322 470 "fillOpacity": 15, 323 471 "lineWidth": 2, ··· 327 475 }, 328 476 "overrides": [ 329 477 { 330 - "matcher": { "id": "byRegexp", "options": "/(hits|misses|evictions)/" }, 478 + "matcher": { 479 + "id": "byRegexp", 480 + "options": "/(hits|misses|evictions)/" 481 + }, 331 482 "properties": [ 332 - { "id": "custom.axisPlacement", "value": "right" }, 333 - { "id": "unit", "value": "ops" }, 334 - { "id": "custom.fillOpacity", "value": 0 }, 335 - { "id": "custom.lineWidth", "value": 1 } 483 + { 484 + "id": "custom.axisPlacement", 485 + "value": "right" 486 + }, 487 + { 488 + "id": "unit", 489 + "value": "ops" 490 + }, 491 + { 492 + "id": "custom.fillOpacity", 493 + "value": 0 494 + }, 495 + { 496 + "id": "custom.lineWidth", 497 + "value": 1 498 + } 336 499 ] 337 500 } 338 501 ] ··· 368 531 { 369 532 "title": "errors", 370 533 "type": "timeseries", 371 - "gridPos": { "h": 8, "w": 12, "x": 12, "y": 24 }, 372 - "datasource": { "type": "prometheus", "uid": "prometheus" }, 534 + "gridPos": { 535 + "h": 8, 536 + "w": 12, 537 + "x": 12, 538 + "y": 24 539 + }, 540 + "datasource": { 541 + "type": "prometheus", 542 + "uid": "prometheus" 543 + }, 373 544 "fieldConfig": { 374 545 "defaults": { 375 546 "unit": "ops", 376 - "color": { "mode": "palette-classic" }, 547 + "color": { 548 + "mode": "palette-classic" 549 + }, 377 550 "custom": { 378 551 "fillOpacity": 15, 379 552 "lineWidth": 2, ··· 397 570 "expr": "sum(rate(relay_rate_limited_total{job=\"zlay\"}[5m]))", 398 571 "legendFormat": "rate limited", 399 572 "refId": "C" 573 + }, 574 + { 575 + "expr": "sum by (reason) (rate(relay_validation_failed{job=\"zlay\"}[5m]))", 576 + "legendFormat": "validation: {{reason}}", 577 + "refId": "D" 400 578 } 401 579 ] 402 580 }, 403 581 { 404 582 "title": "resolver", 405 583 "type": "timeseries", 406 - "gridPos": { "h": 8, "w": 8, "x": 0, "y": 32 }, 407 - "datasource": { "type": "prometheus", "uid": "prometheus" }, 584 + "gridPos": { 585 + "h": 8, 586 + "w": 8, 587 + "x": 0, 588 + "y": 32 589 + }, 590 + "datasource": { 591 + "type": "prometheus", 592 + "uid": "prometheus" 593 + }, 408 594 "fieldConfig": { 409 595 "defaults": { 410 - "color": { "mode": "palette-classic" }, 596 + "color": { 597 + "mode": "palette-classic" 598 + }, 411 599 "custom": { 412 600 "fillOpacity": 15, 413 601 "lineWidth": 2, ··· 433 621 { 434 622 "title": "chain continuity", 435 623 "type": "timeseries", 436 - "gridPos": { "h": 8, "w": 8, "x": 8, "y": 32 }, 437 - "datasource": { "type": "prometheus", "uid": "prometheus" }, 624 + "gridPos": { 625 + "h": 8, 626 + "w": 8, 627 + "x": 8, 628 + "y": 32 629 + }, 630 + "datasource": { 631 + "type": "prometheus", 632 + "uid": "prometheus" 633 + }, 438 634 "fieldConfig": { 439 635 "defaults": { 440 636 "unit": "ops", 441 - "color": { "mode": "palette-classic" }, 637 + "color": { 638 + "mode": "palette-classic" 639 + }, 442 640 "custom": { 443 641 "fillOpacity": 15, 444 642 "lineWidth": 2, ··· 447 645 }, 448 646 "overrides": [ 449 647 { 450 - "matcher": { "id": "byName", "options": "% of received" }, 648 + "matcher": { 649 + "id": "byName", 650 + "options": "% of received" 651 + }, 451 652 "properties": [ 452 - { "id": "custom.axisPlacement", "value": "right" }, 453 - { "id": "unit", "value": "percent" }, 454 - { "id": "custom.fillOpacity", "value": 0 }, 455 - { "id": "custom.lineWidth", "value": 1 } 653 + { 654 + "id": "custom.axisPlacement", 655 + "value": "right" 656 + }, 657 + { 658 + "id": "unit", 659 + "value": "percent" 660 + }, 661 + { 662 + "id": "custom.fillOpacity", 663 + "value": 0 664 + }, 665 + { 666 + "id": "custom.lineWidth", 667 + "value": 1 668 + } 456 669 ] 457 670 } 458 671 ] ··· 470 683 } 471 684 ], 472 685 "options": { 473 - "tooltip": { "mode": "multi" } 686 + "tooltip": { 687 + "mode": "multi" 688 + } 474 689 } 475 690 }, 476 691 { 477 692 "title": "disk usage", 478 693 "type": "timeseries", 479 - "gridPos": { "h": 8, "w": 8, "x": 16, "y": 32 }, 480 - "datasource": { "type": "prometheus", "uid": "prometheus" }, 694 + "gridPos": { 695 + "h": 8, 696 + "w": 8, 697 + "x": 16, 698 + "y": 32 699 + }, 700 + "datasource": { 701 + "type": "prometheus", 702 + "uid": "prometheus" 703 + }, 481 704 "fieldConfig": { 482 705 "defaults": { 483 706 "unit": "bytes", 484 - "color": { "mode": "palette-classic" }, 707 + "color": { 708 + "mode": "palette-classic" 709 + }, 485 710 "custom": { 486 711 "fillOpacity": 15, 487 712 "lineWidth": 2, ··· 505 730 } 506 731 ], 507 732 "schemaVersion": 39, 508 - "tags": ["zlay", "atproto"], 509 - "templating": { "list": [] }, 510 - "time": { "from": "now-3h", "to": "now" }, 733 + "tags": [ 734 + "zlay", 735 + "atproto" 736 + ], 737 + "templating": { 738 + "list": [] 739 + }, 740 + "time": { 741 + "from": "now-3h", 742 + "to": "now" 743 + }, 511 744 "timepicker": {}, 512 745 "timezone": "browser", 513 746 "title": "zlay.waow.tech",