[READ-ONLY] Mirror of https://github.com/FoxxMD/multi-scrobbler. Scrobble plays from multiple sources to multiple clients docs.multi-scrobbler.app
deezer docker jellyfin koito lastfm listenbrainz maloja mopidy mpris music music-assistant plex scrobble self-hosted spotify subsonic tautulli youtube-music
0

Configure Feed

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

docs: Add grafana dashboard

FoxxMD (Mar 31, 2026, 2:05 PM UTC) eab8ae71 ef12bc84

+937 -1
+12 -1
docsite/docs/configuration/configuration.mdx
··· 725 725 * Count of Queued/Scrobbled/Deadletter scrobbles per [Client](/configuration/clients) 726 726 * Number of issues per Source/Client 727 727 * If any of these metrics is > 0 it means your Source/Client is not operating normally 728 + * Caching metrics 728 729 729 730 Additionally, general process metrics like cpu and memory usage can be enabled with the env `PROMETHEUS_FULL=true` 730 731 ··· 747 748 ``` 748 749 749 750 750 - </details> 751 + </details> 752 + 753 + <DetailsAdmo status="tip" summary="Grafana Dashboard"> 754 + 755 + Github user [4rft5](https://github.com/FoxxMD/multi-scrobbler/issues/507#issuecomment-4144982295) created a Grafana dashboard that uses the Prometheus metrics from above. 756 + 757 + <img src={require('/img/grafana.png').default} height="800"/> 758 + 759 + Download the json dashboard here: [`multiscrobbler-dashboard.json`](/multiscrobbler-dashboard.json) 760 + 761 + </DetailsAdmo>
docsite/static/img/grafana.png

This is a binary file and will not be displayed.

+925
docsite/static/multiscrobbler-dashboard.json
··· 1 + { 2 + "annotations": { 3 + "list": [ 4 + { 5 + "builtIn": 1, 6 + "datasource": { "type": "grafana", "uid": "-- Grafana --" }, 7 + "enable": true, 8 + "hide": true, 9 + "iconColor": "rgba(0, 211, 255, 1)", 10 + "name": "Annotations & Alerts", 11 + "type": "dashboard" 12 + } 13 + ] 14 + }, 15 + "editable": true, 16 + "fiscalYearStartMonth": 0, 17 + "graphTooltip": 0, 18 + "id": null, 19 + "links": [], 20 + "liveNow": false, 21 + "panels": [ 22 + { 23 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 24 + "fieldConfig": { 25 + "defaults": { 26 + "color": { "mode": "thresholds" }, 27 + "mappings": [], 28 + "thresholds": { 29 + "mode": "absolute", 30 + "steps": [ 31 + { "color": "green", "value": null }, 32 + { "color": "red", "value": 1 } 33 + ] 34 + } 35 + }, 36 + "overrides": [] 37 + }, 38 + "gridPos": { "h": 4, "w": 4, "x": 0, "y": 0 }, 39 + "id": 1, 40 + "options": { 41 + "colorMode": "background", 42 + "graphMode": "none", 43 + "justifyMode": "auto", 44 + "orientation": "auto", 45 + "reduceOptions": { "values": false, "calcs": ["lastNotNull"], "fields": "" }, 46 + "textMode": "auto" 47 + }, 48 + "pluginVersion": "10.0.0", 49 + "targets": [ 50 + { 51 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 52 + "expr": "sum(multiscrobbler_source_issues)", 53 + "refId": "A" 54 + } 55 + ], 56 + "title": "Total Source Issues", 57 + "type": "stat" 58 + }, 59 + { 60 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 61 + "fieldConfig": { 62 + "defaults": { 63 + "color": { "mode": "thresholds" }, 64 + "mappings": [], 65 + "thresholds": { 66 + "mode": "absolute", 67 + "steps": [ 68 + { "color": "green", "value": null }, 69 + { "color": "red", "value": 1 } 70 + ] 71 + } 72 + }, 73 + "overrides": [] 74 + }, 75 + "gridPos": { "h": 4, "w": 4, "x": 4, "y": 0 }, 76 + "id": 2, 77 + "options": { 78 + "colorMode": "background", 79 + "graphMode": "none", 80 + "justifyMode": "auto", 81 + "orientation": "auto", 82 + "reduceOptions": { "values": false, "calcs": ["lastNotNull"], "fields": "" }, 83 + "textMode": "auto" 84 + }, 85 + "pluginVersion": "10.0.0", 86 + "targets": [ 87 + { 88 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 89 + "expr": "sum(multiscrobbler_client_issues)", 90 + "refId": "A" 91 + } 92 + ], 93 + "title": "Total Client Issues", 94 + "type": "stat" 95 + }, 96 + { 97 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 98 + "fieldConfig": { 99 + "defaults": { 100 + "color": { "mode": "thresholds" }, 101 + "mappings": [], 102 + "thresholds": { 103 + "mode": "absolute", 104 + "steps": [ 105 + { "color": "green", "value": null }, 106 + { "color": "yellow", "value": 300000000 }, 107 + { "color": "red", "value": 500000000 } 108 + ] 109 + }, 110 + "unit": "decbytes" 111 + }, 112 + "overrides": [] 113 + }, 114 + "gridPos": { "h": 4, "w": 4, "x": 8, "y": 0 }, 115 + "id": 25, 116 + "options": { 117 + "colorMode": "value", 118 + "graphMode": "area", 119 + "justifyMode": "auto", 120 + "orientation": "auto", 121 + "reduceOptions": { "values": false, "calcs": ["lastNotNull"], "fields": "" }, 122 + "textMode": "auto" 123 + }, 124 + "pluginVersion": "10.0.0", 125 + "targets": [ 126 + { 127 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 128 + "expr": "process_resident_memory_bytes{job=\"multi-scrobbler\"}", 129 + "refId": "A" 130 + } 131 + ], 132 + "title": "Memory (RSS)", 133 + "type": "stat" 134 + }, 135 + { 136 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 137 + "fieldConfig": { 138 + "defaults": { 139 + "color": { "mode": "thresholds" }, 140 + "mappings": [], 141 + "max": 1, 142 + "min": 0, 143 + "thresholds": { 144 + "mode": "absolute", 145 + "steps": [ 146 + { "color": "green", "value": null }, 147 + { "color": "yellow", "value": 0.5 }, 148 + { "color": "red", "value": 0.8 } 149 + ] 150 + }, 151 + "unit": "percentunit" 152 + }, 153 + "overrides": [] 154 + }, 155 + "gridPos": { "h": 4, "w": 4, "x": 12, "y": 0 }, 156 + "id": 26, 157 + "options": { 158 + "colorMode": "value", 159 + "graphMode": "area", 160 + "justifyMode": "auto", 161 + "orientation": "auto", 162 + "reduceOptions": { "values": false, "calcs": ["lastNotNull"], "fields": "" }, 163 + "textMode": "auto" 164 + }, 165 + "pluginVersion": "10.0.0", 166 + "targets": [ 167 + { 168 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 169 + "expr": "rate(process_cpu_seconds_total{job=\"multi-scrobbler\"}[1m])", 170 + "refId": "A" 171 + } 172 + ], 173 + "title": "CPU Usage", 174 + "type": "stat" 175 + }, 176 + { 177 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 178 + "fieldConfig": { 179 + "defaults": { 180 + "color": { "mode": "thresholds" }, 181 + "mappings": [], 182 + "thresholds": { 183 + "mode": "absolute", 184 + "steps": [ 185 + { "color": "green", "value": null }, 186 + { "color": "yellow", "value": 0.05 }, 187 + { "color": "red", "value": 0.1 } 188 + ] 189 + }, 190 + "unit": "s" 191 + }, 192 + "overrides": [] 193 + }, 194 + "gridPos": { "h": 4, "w": 4, "x": 16, "y": 0 }, 195 + "id": 27, 196 + "options": { 197 + "colorMode": "value", 198 + "graphMode": "area", 199 + "justifyMode": "auto", 200 + "orientation": "auto", 201 + "reduceOptions": { "values": false, "calcs": ["lastNotNull"], "fields": "" }, 202 + "textMode": "auto" 203 + }, 204 + "pluginVersion": "10.0.0", 205 + "targets": [ 206 + { 207 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 208 + "expr": "nodejs_eventloop_lag_seconds{job=\"multi-scrobbler\"}", 209 + "refId": "A" 210 + } 211 + ], 212 + "title": "Event Loop Lag", 213 + "type": "stat" 214 + }, 215 + { 216 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 217 + "fieldConfig": { 218 + "defaults": { 219 + "color": { "mode": "palette-classic" }, 220 + "custom": { 221 + "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", 222 + "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", 223 + "fillOpacity": 10, "gradientMode": "none", 224 + "hideFrom": { "tooltip": false, "viz": false, "legend": false }, 225 + "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, 226 + "scaleDistribution": { "type": "linear" }, "showPoints": "auto", 227 + "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, 228 + "thresholdsStyle": { "mode": "off" } 229 + }, 230 + "mappings": [], 231 + "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }, 232 + "unit": "short" 233 + }, 234 + "overrides": [] 235 + }, 236 + "gridPos": { "h": 4, "w": 4, "x": 20, "y": 0 }, 237 + "id": 3, 238 + "options": { 239 + "legend": { "calcs": [], "displayMode": "list", "placement": "bottom", "showLegend": false }, 240 + "tooltip": { "mode": "single", "sort": "none" } 241 + }, 242 + "targets": [ 243 + { 244 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 245 + "expr": "sum(rate(multiscrobbler_source_discovered[5m]))", 246 + "legendFormat": "Discoveries/sec", 247 + "refId": "A" 248 + } 249 + ], 250 + "title": "Discovery Rate", 251 + "type": "timeseries" 252 + }, 253 + { 254 + "collapsed": false, 255 + "gridPos": { "h": 1, "w": 24, "x": 0, "y": 4 }, 256 + "id": 5, 257 + "panels": [], 258 + "title": "Sources", 259 + "type": "row" 260 + }, 261 + { 262 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 263 + "fieldConfig": { 264 + "defaults": { 265 + "color": { "mode": "palette-classic" }, 266 + "custom": { 267 + "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", 268 + "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", 269 + "fillOpacity": 10, "gradientMode": "none", 270 + "hideFrom": { "tooltip": false, "viz": false, "legend": false }, 271 + "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, 272 + "scaleDistribution": { "type": "linear" }, "showPoints": "auto", 273 + "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, 274 + "thresholdsStyle": { "mode": "off" } 275 + }, 276 + "mappings": [], 277 + "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] } 278 + }, 279 + "overrides": [] 280 + }, 281 + "gridPos": { "h": 8, "w": 12, "x": 0, "y": 5 }, 282 + "id": 6, 283 + "options": { 284 + "legend": { "calcs": ["last"], "displayMode": "table", "placement": "right", "showLegend": true }, 285 + "tooltip": { "mode": "multi", "sort": "none" } 286 + }, 287 + "targets": [ 288 + { 289 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 290 + "expr": "multiscrobbler_source_discovered", 291 + "legendFormat": "{{name}} ({{type}})", 292 + "refId": "A" 293 + } 294 + ], 295 + "title": "Plays Discovered by Source", 296 + "type": "timeseries" 297 + }, 298 + { 299 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 300 + "fieldConfig": { 301 + "defaults": { 302 + "color": { "mode": "palette-classic" }, 303 + "custom": { 304 + "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", 305 + "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", 306 + "fillOpacity": 10, "gradientMode": "none", 307 + "hideFrom": { "tooltip": false, "viz": false, "legend": false }, 308 + "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, 309 + "scaleDistribution": { "type": "linear" }, "showPoints": "auto", 310 + "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, 311 + "thresholdsStyle": { "mode": "off" } 312 + }, 313 + "mappings": [], 314 + "thresholds": { 315 + "mode": "absolute", 316 + "steps": [{ "color": "green", "value": null }, { "color": "red", "value": 1 }] 317 + } 318 + }, 319 + "overrides": [] 320 + }, 321 + "gridPos": { "h": 8, "w": 12, "x": 12, "y": 5 }, 322 + "id": 7, 323 + "options": { 324 + "legend": { "calcs": ["last"], "displayMode": "table", "placement": "right", "showLegend": true }, 325 + "tooltip": { "mode": "multi", "sort": "none" } 326 + }, 327 + "targets": [ 328 + { 329 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 330 + "expr": "multiscrobbler_source_issues", 331 + "legendFormat": "{{name}} ({{type}})", 332 + "refId": "A" 333 + } 334 + ], 335 + "title": "Source Issues", 336 + "type": "timeseries" 337 + }, 338 + { 339 + "collapsed": false, 340 + "gridPos": { "h": 1, "w": 24, "x": 0, "y": 13 }, 341 + "id": 8, 342 + "panels": [], 343 + "title": "Clients", 344 + "type": "row" 345 + }, 346 + { 347 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 348 + "fieldConfig": { 349 + "defaults": { 350 + "color": { "mode": "palette-classic" }, 351 + "custom": { 352 + "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", 353 + "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", 354 + "fillOpacity": 10, "gradientMode": "none", 355 + "hideFrom": { "tooltip": false, "viz": false, "legend": false }, 356 + "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, 357 + "scaleDistribution": { "type": "linear" }, "showPoints": "auto", 358 + "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, 359 + "thresholdsStyle": { "mode": "off" } 360 + }, 361 + "mappings": [], 362 + "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] } 363 + }, 364 + "overrides": [] 365 + }, 366 + "gridPos": { "h": 8, "w": 8, "x": 0, "y": 14 }, 367 + "id": 9, 368 + "options": { 369 + "legend": { "calcs": ["last"], "displayMode": "table", "placement": "bottom", "showLegend": true }, 370 + "tooltip": { "mode": "multi", "sort": "none" } 371 + }, 372 + "targets": [ 373 + { 374 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 375 + "expr": "multiscrobbler_client_scrobbled", 376 + "legendFormat": "{{name}}", 377 + "refId": "A" 378 + } 379 + ], 380 + "title": "Total Scrobbles by Client", 381 + "type": "timeseries" 382 + }, 383 + { 384 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 385 + "fieldConfig": { 386 + "defaults": { 387 + "color": { "mode": "palette-classic" }, 388 + "custom": { 389 + "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", 390 + "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", 391 + "fillOpacity": 10, "gradientMode": "none", 392 + "hideFrom": { "tooltip": false, "viz": false, "legend": false }, 393 + "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, 394 + "scaleDistribution": { "type": "linear" }, "showPoints": "auto", 395 + "spanNulls": false, "stacking": { "group": "A", "mode": "normal" }, 396 + "thresholdsStyle": { "mode": "off" } 397 + }, 398 + "mappings": [], 399 + "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] } 400 + }, 401 + "overrides": [] 402 + }, 403 + "gridPos": { "h": 8, "w": 8, "x": 8, "y": 14 }, 404 + "id": 10, 405 + "options": { 406 + "legend": { "calcs": ["last"], "displayMode": "table", "placement": "bottom", "showLegend": true }, 407 + "tooltip": { "mode": "multi", "sort": "none" } 408 + }, 409 + "targets": [ 410 + { 411 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 412 + "expr": "multiscrobbler_client_queued", 413 + "legendFormat": "{{name}}", 414 + "refId": "A" 415 + } 416 + ], 417 + "title": "Queued Plays by Client", 418 + "type": "timeseries" 419 + }, 420 + { 421 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 422 + "fieldConfig": { 423 + "defaults": { 424 + "color": { "mode": "palette-classic" }, 425 + "custom": { 426 + "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", 427 + "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", 428 + "fillOpacity": 10, "gradientMode": "none", 429 + "hideFrom": { "tooltip": false, "viz": false, "legend": false }, 430 + "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, 431 + "scaleDistribution": { "type": "linear" }, "showPoints": "auto", 432 + "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, 433 + "thresholdsStyle": { "mode": "off" } 434 + }, 435 + "mappings": [], 436 + "thresholds": { 437 + "mode": "absolute", 438 + "steps": [{ "color": "green", "value": null }, { "color": "red", "value": 1 }] 439 + } 440 + }, 441 + "overrides": [] 442 + }, 443 + "gridPos": { "h": 8, "w": 8, "x": 16, "y": 14 }, 444 + "id": 11, 445 + "options": { 446 + "legend": { "calcs": ["last"], "displayMode": "table", "placement": "bottom", "showLegend": true }, 447 + "tooltip": { "mode": "multi", "sort": "none" } 448 + }, 449 + "targets": [ 450 + { 451 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 452 + "expr": "multiscrobbler_client_issues", 453 + "legendFormat": "{{name}}", 454 + "refId": "A" 455 + } 456 + ], 457 + "title": "Client Issues", 458 + "type": "timeseries" 459 + }, 460 + { 461 + "collapsed": false, 462 + "gridPos": { "h": 1, "w": 24, "x": 0, "y": 22 }, 463 + "id": 12, 464 + "panels": [], 465 + "title": "Node.js Performance", 466 + "type": "row" 467 + }, 468 + { 469 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 470 + "fieldConfig": { 471 + "defaults": { 472 + "color": { "mode": "palette-classic" }, 473 + "custom": { 474 + "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", 475 + "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", 476 + "fillOpacity": 10, "gradientMode": "none", 477 + "hideFrom": { "tooltip": false, "viz": false, "legend": false }, 478 + "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, 479 + "scaleDistribution": { "type": "linear" }, "showPoints": "auto", 480 + "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, 481 + "thresholdsStyle": { "mode": "off" } 482 + }, 483 + "mappings": [], 484 + "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }, 485 + "unit": "decbytes" 486 + }, 487 + "overrides": [] 488 + }, 489 + "gridPos": { "h": 8, "w": 8, "x": 0, "y": 23 }, 490 + "id": 17, 491 + "options": { 492 + "legend": { "calcs": ["last", "max"], "displayMode": "table", "placement": "bottom", "showLegend": true }, 493 + "tooltip": { "mode": "multi", "sort": "none" } 494 + }, 495 + "targets": [ 496 + { 497 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 498 + "expr": "process_resident_memory_bytes{job=\"multi-scrobbler\"}", 499 + "legendFormat": "Resident Memory (RSS)", 500 + "refId": "A" 501 + }, 502 + { 503 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 504 + "expr": "nodejs_heap_size_total_bytes{job=\"multi-scrobbler\"}", 505 + "legendFormat": "Heap Total", 506 + "refId": "B" 507 + }, 508 + { 509 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 510 + "expr": "nodejs_heap_size_used_bytes{job=\"multi-scrobbler\"}", 511 + "legendFormat": "Heap Used", 512 + "refId": "C" 513 + } 514 + ], 515 + "title": "Memory Usage", 516 + "type": "timeseries" 517 + }, 518 + { 519 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 520 + "fieldConfig": { 521 + "defaults": { 522 + "color": { "mode": "palette-classic" }, 523 + "custom": { 524 + "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", 525 + "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", 526 + "fillOpacity": 10, "gradientMode": "none", 527 + "hideFrom": { "tooltip": false, "viz": false, "legend": false }, 528 + "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, 529 + "scaleDistribution": { "type": "linear" }, "showPoints": "auto", 530 + "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, 531 + "thresholdsStyle": { "mode": "off" } 532 + }, 533 + "mappings": [], 534 + "thresholds": { 535 + "mode": "absolute", 536 + "steps": [ 537 + { "color": "green", "value": null }, 538 + { "color": "yellow", "value": 0.05 }, 539 + { "color": "red", "value": 0.1 } 540 + ] 541 + }, 542 + "unit": "s" 543 + }, 544 + "overrides": [] 545 + }, 546 + "gridPos": { "h": 8, "w": 8, "x": 8, "y": 23 }, 547 + "id": 18, 548 + "options": { 549 + "legend": { "calcs": ["mean", "max"], "displayMode": "table", "placement": "bottom", "showLegend": true }, 550 + "tooltip": { "mode": "multi", "sort": "none" } 551 + }, 552 + "targets": [ 553 + { 554 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 555 + "expr": "nodejs_eventloop_lag_seconds{job=\"multi-scrobbler\"}", 556 + "legendFormat": "Current Lag", 557 + "refId": "A" 558 + }, 559 + { 560 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 561 + "expr": "nodejs_eventloop_lag_mean_seconds{job=\"multi-scrobbler\"}", 562 + "legendFormat": "Mean Lag", 563 + "refId": "B" 564 + }, 565 + { 566 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 567 + "expr": "nodejs_eventloop_lag_p99_seconds{job=\"multi-scrobbler\"}", 568 + "legendFormat": "P99 Lag", 569 + "refId": "C" 570 + } 571 + ], 572 + "title": "Event Loop Lag", 573 + "type": "timeseries" 574 + }, 575 + { 576 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 577 + "fieldConfig": { 578 + "defaults": { 579 + "color": { "mode": "palette-classic" }, 580 + "custom": { 581 + "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", 582 + "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", 583 + "fillOpacity": 10, "gradientMode": "none", 584 + "hideFrom": { "tooltip": false, "viz": false, "legend": false }, 585 + "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, 586 + "scaleDistribution": { "type": "linear" }, "showPoints": "auto", 587 + "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, 588 + "thresholdsStyle": { "mode": "off" } 589 + }, 590 + "mappings": [], 591 + "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }, 592 + "unit": "percentunit" 593 + }, 594 + "overrides": [] 595 + }, 596 + "gridPos": { "h": 8, "w": 8, "x": 16, "y": 23 }, 597 + "id": 19, 598 + "options": { 599 + "legend": { "calcs": ["mean", "max"], "displayMode": "table", "placement": "bottom", "showLegend": true }, 600 + "tooltip": { "mode": "multi", "sort": "none" } 601 + }, 602 + "targets": [ 603 + { 604 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 605 + "expr": "rate(process_cpu_user_seconds_total{job=\"multi-scrobbler\"}[5m])", 606 + "legendFormat": "User CPU", 607 + "refId": "A" 608 + }, 609 + { 610 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 611 + "expr": "rate(process_cpu_system_seconds_total{job=\"multi-scrobbler\"}[5m])", 612 + "legendFormat": "System CPU", 613 + "refId": "B" 614 + } 615 + ], 616 + "title": "CPU Usage", 617 + "type": "timeseries" 618 + }, 619 + { 620 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 621 + "fieldConfig": { 622 + "defaults": { 623 + "color": { "mode": "thresholds" }, 624 + "mappings": [], 625 + "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] } 626 + }, 627 + "overrides": [] 628 + }, 629 + "gridPos": { "h": 4, "w": 4, "x": 0, "y": 31 }, 630 + "id": 20, 631 + "options": { 632 + "colorMode": "value", 633 + "graphMode": "none", 634 + "justifyMode": "auto", 635 + "orientation": "auto", 636 + "reduceOptions": { "values": false, "calcs": ["lastNotNull"], "fields": "" }, 637 + "textMode": "auto" 638 + }, 639 + "pluginVersion": "10.0.0", 640 + "targets": [ 641 + { 642 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 643 + "expr": "nodejs_active_handles_total{job=\"multi-scrobbler\"}", 644 + "refId": "A" 645 + } 646 + ], 647 + "title": "Active Handles", 648 + "type": "stat" 649 + }, 650 + { 651 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 652 + "fieldConfig": { 653 + "defaults": { 654 + "color": { "mode": "thresholds" }, 655 + "mappings": [], 656 + "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] } 657 + }, 658 + "overrides": [] 659 + }, 660 + "gridPos": { "h": 4, "w": 4, "x": 4, "y": 31 }, 661 + "id": 21, 662 + "options": { 663 + "colorMode": "value", 664 + "graphMode": "none", 665 + "justifyMode": "auto", 666 + "orientation": "auto", 667 + "reduceOptions": { "values": false, "calcs": ["lastNotNull"], "fields": "" }, 668 + "textMode": "auto" 669 + }, 670 + "pluginVersion": "10.0.0", 671 + "targets": [ 672 + { 673 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 674 + "expr": "process_open_fds{job=\"multi-scrobbler\"}", 675 + "refId": "A" 676 + } 677 + ], 678 + "title": "Open File Descriptors", 679 + "type": "stat" 680 + }, 681 + { 682 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 683 + "fieldConfig": { 684 + "defaults": { 685 + "color": { "mode": "palette-classic" }, 686 + "custom": { 687 + "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", 688 + "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", 689 + "fillOpacity": 10, "gradientMode": "none", 690 + "hideFrom": { "tooltip": false, "viz": false, "legend": false }, 691 + "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, 692 + "scaleDistribution": { "type": "linear" }, "showPoints": "auto", 693 + "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, 694 + "thresholdsStyle": { "mode": "off" } 695 + }, 696 + "mappings": [], 697 + "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }, 698 + "unit": "s" 699 + }, 700 + "overrides": [] 701 + }, 702 + "gridPos": { "h": 4, "w": 8, "x": 8, "y": 31 }, 703 + "id": 22, 704 + "options": { 705 + "legend": { "calcs": [], "displayMode": "list", "placement": "bottom", "showLegend": true }, 706 + "tooltip": { "mode": "multi", "sort": "none" } 707 + }, 708 + "targets": [ 709 + { 710 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 711 + "expr": "rate(nodejs_gc_duration_seconds_sum{job=\"multi-scrobbler\"}[5m])", 712 + "legendFormat": "{{kind}} GC", 713 + "refId": "A" 714 + } 715 + ], 716 + "title": "Garbage Collection Time", 717 + "type": "timeseries" 718 + }, 719 + { 720 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 721 + "fieldConfig": { 722 + "defaults": { 723 + "color": { "mode": "palette-classic" }, 724 + "custom": { 725 + "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", 726 + "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", 727 + "fillOpacity": 10, "gradientMode": "none", 728 + "hideFrom": { "tooltip": false, "viz": false, "legend": false }, 729 + "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, 730 + "scaleDistribution": { "type": "linear" }, "showPoints": "auto", 731 + "spanNulls": false, "stacking": { "group": "A", "mode": "normal" }, 732 + "thresholdsStyle": { "mode": "off" } 733 + }, 734 + "mappings": [], 735 + "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }, 736 + "unit": "decbytes" 737 + }, 738 + "overrides": [] 739 + }, 740 + "gridPos": { "h": 4, "w": 8, "x": 16, "y": 31 }, 741 + "id": 23, 742 + "options": { 743 + "legend": { "calcs": [], "displayMode": "list", "placement": "bottom", "showLegend": true }, 744 + "tooltip": { "mode": "multi", "sort": "none" } 745 + }, 746 + "targets": [ 747 + { 748 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 749 + "expr": "nodejs_heap_space_size_used_bytes{job=\"multi-scrobbler\"}", 750 + "legendFormat": "{{space}}", 751 + "refId": "A" 752 + } 753 + ], 754 + "title": "Heap Space Breakdown", 755 + "type": "timeseries" 756 + }, 757 + { 758 + "collapsed": false, 759 + "gridPos": { "h": 1, "w": 24, "x": 0, "y": 35 }, 760 + "id": 24, 761 + "panels": [], 762 + "title": "Cache Performance", 763 + "type": "row" 764 + }, 765 + { 766 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 767 + "fieldConfig": { 768 + "defaults": { 769 + "color": { "mode": "palette-classic" }, 770 + "custom": { 771 + "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", 772 + "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", 773 + "fillOpacity": 10, "gradientMode": "none", 774 + "hideFrom": { "tooltip": false, "viz": false, "legend": false }, 775 + "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, 776 + "scaleDistribution": { "type": "linear" }, "showPoints": "auto", 777 + "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, 778 + "thresholdsStyle": { "mode": "off" } 779 + }, 780 + "mappings": [], 781 + "max": 100, 782 + "min": 0, 783 + "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }, 784 + "unit": "percent" 785 + }, 786 + "overrides": [] 787 + }, 788 + "gridPos": { "h": 8, "w": 12, "x": 0, "y": 36 }, 789 + "id": 13, 790 + "options": { 791 + "legend": { "calcs": ["mean", "last"], "displayMode": "table", "placement": "right", "showLegend": true }, 792 + "tooltip": { "mode": "multi", "sort": "none" } 793 + }, 794 + "targets": [ 795 + { 796 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 797 + "expr": "100 * multiscrobbler_cache_hits / (multiscrobbler_cache_hits + multiscrobbler_cache_misses)", 798 + "legendFormat": "{{cacheType}} ({{tier}})", 799 + "refId": "A" 800 + } 801 + ], 802 + "title": "Cache Hit Rate", 803 + "type": "timeseries" 804 + }, 805 + { 806 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 807 + "fieldConfig": { 808 + "defaults": { 809 + "color": { "mode": "palette-classic" }, 810 + "custom": { 811 + "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", 812 + "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", 813 + "fillOpacity": 10, "gradientMode": "none", 814 + "hideFrom": { "tooltip": false, "viz": false, "legend": false }, 815 + "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, 816 + "scaleDistribution": { "type": "linear" }, "showPoints": "auto", 817 + "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, 818 + "thresholdsStyle": { "mode": "off" } 819 + }, 820 + "mappings": [], 821 + "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }, 822 + "unit": "ops" 823 + }, 824 + "overrides": [] 825 + }, 826 + "gridPos": { "h": 8, "w": 12, "x": 12, "y": 36 }, 827 + "id": 14, 828 + "options": { 829 + "legend": { "calcs": ["mean", "last"], "displayMode": "table", "placement": "right", "showLegend": true }, 830 + "tooltip": { "mode": "multi", "sort": "none" } 831 + }, 832 + "targets": [ 833 + { 834 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 835 + "expr": "rate(multiscrobbler_cache_sets[5m])", 836 + "legendFormat": "{{cacheType}} ({{tier}})", 837 + "refId": "A" 838 + } 839 + ], 840 + "title": "Cache Set Rate", 841 + "type": "timeseries" 842 + }, 843 + { 844 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 845 + "fieldConfig": { 846 + "defaults": { 847 + "color": { "mode": "palette-classic" }, 848 + "custom": { 849 + "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", 850 + "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", 851 + "fillOpacity": 10, "gradientMode": "none", 852 + "hideFrom": { "tooltip": false, "viz": false, "legend": false }, 853 + "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, 854 + "scaleDistribution": { "type": "linear" }, "showPoints": "auto", 855 + "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, 856 + "thresholdsStyle": { "mode": "off" } 857 + }, 858 + "mappings": [], 859 + "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] } 860 + }, 861 + "overrides": [ 862 + { 863 + "matcher": { "id": "byRegexp", "options": ".*hits.*" }, 864 + "properties": [{ "id": "color", "value": { "fixedColor": "green", "mode": "fixed" } }] 865 + }, 866 + { 867 + "matcher": { "id": "byRegexp", "options": ".*misses.*" }, 868 + "properties": [{ "id": "color", "value": { "fixedColor": "red", "mode": "fixed" } }] 869 + } 870 + ] 871 + }, 872 + "gridPos": { "h": 8, "w": 12, "x": 0, "y": 44 }, 873 + "id": 16, 874 + "options": { 875 + "legend": { "calcs": ["last"], "displayMode": "table", "placement": "right", "showLegend": true }, 876 + "tooltip": { "mode": "multi", "sort": "none" } 877 + }, 878 + "targets": [ 879 + { 880 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 881 + "expr": "multiscrobbler_cache_hits", 882 + "legendFormat": "{{cacheType}} hits ({{tier}})", 883 + "refId": "A" 884 + }, 885 + { 886 + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, 887 + "expr": "multiscrobbler_cache_misses", 888 + "legendFormat": "{{cacheType}} misses ({{tier}})", 889 + "refId": "B" 890 + } 891 + ], 892 + "title": "Cache Hits vs Misses", 893 + "type": "timeseries" 894 + } 895 + ], 896 + "refresh": "10s", 897 + "schemaVersion": 38, 898 + "style": "dark", 899 + "tags": ["multiscrobbler", "scrobbling", "music"], 900 + "templating": { 901 + "list": [ 902 + { 903 + "current": { "selected": false, "text": "Prometheus", "value": "Prometheus" }, 904 + "hide": 0, 905 + "includeAll": false, 906 + "label": "Datasource", 907 + "multi": false, 908 + "name": "DS_PROMETHEUS", 909 + "options": [], 910 + "query": "prometheus", 911 + "refresh": 1, 912 + "regex": "", 913 + "skipUrlSync": false, 914 + "type": "datasource" 915 + } 916 + ] 917 + }, 918 + "time": { "from": "now-6h", "to": "now" }, 919 + "timepicker": {}, 920 + "timezone": "", 921 + "title": "Multiscrobbler Dashboard", 922 + "uid": "multiscrobbler", 923 + "version": 1, 924 + "weekStart": "" 925 + }