{ "annotations": { "list": [] }, "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 0, "id": 3607718202429440, "links": [], "liveNow": false, "panels": [ { "datasource": { "type": "prometheus", "uid": "prometheus" }, "fieldConfig": { "defaults": { "thresholds": { "mode": "absolute", "steps": [ { "color": "red", "value": null }, { "color": "green", "value": 2 } ] }, "unit": "short" }, "overrides": [] }, "gridPos": { "h": 4, "w": 6, "x": 0, "y": 0 }, "id": 1, "options": { "colorMode": "background", "reduceOptions": { "calcs": [ "lastNotNull" ] } }, "targets": [ { "expr": "sum(up{job=\"immich\"})", "refId": "A" } ], "title": "Workers Up", "type": "stat" }, { "datasource": { "type": "prometheus", "uid": "prometheus" }, "fieldConfig": { "defaults": { "unit": "reqps" }, "overrides": [] }, "gridPos": { "h": 4, "w": 6, "x": 6, "y": 0 }, "id": 2, "options": { "colorMode": "value", "reduceOptions": { "calcs": [ "lastNotNull" ] } }, "targets": [ { "expr": "sum(rate(http_server_duration_milliseconds_count{job=\"immich\",worker=\"api\"}[5m]))", "refId": "A" } ], "title": "HTTP Requests/sec (API)", "type": "stat" }, { "datasource": { "type": "prometheus", "uid": "prometheus" }, "fieldConfig": { "defaults": { "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "yellow", "value": 1 }, { "color": "red", "value": 5 } ] }, "unit": "percent" }, "overrides": [] }, "gridPos": { "h": 4, "w": 6, "x": 12, "y": 0 }, "id": 3, "options": { "colorMode": "background", "reduceOptions": { "calcs": [ "lastNotNull" ] } }, "targets": [ { "expr": "100 * sum(rate(http_server_duration_milliseconds_count{job=\"immich\",http_response_status_code=~\"5..\"}[5m])) / clamp_min(sum(rate(http_server_duration_milliseconds_count{job=\"immich\"}[5m])),1)", "refId": "A" } ], "title": "HTTP Error Rate (5xx %)", "type": "stat" }, { "datasource": { "type": "prometheus", "uid": "prometheus" }, "fieldConfig": { "defaults": {}, "overrides": [] }, "gridPos": { "h": 4, "w": 6, "x": 18, "y": 0 }, "id": 4, "options": { "reduceOptions": { "calcs": [ "lastNotNull" ], "fields": "/^service_version$/" }, "textMode": "value" }, "targets": [ { "expr": "target_info{job=\"immich\",worker=\"api\"}", "format": "table", "instant": true, "refId": "A" } ], "title": "Immich Version", "type": "stat" }, { "datasource": { "type": "prometheus", "uid": "prometheus" }, "fieldConfig": { "defaults": { "custom": { "drawStyle": "line", "fillOpacity": 15, "lineWidth": 2, "stacking": { "mode": "normal" } }, "unit": "reqps" }, "overrides": [] }, "gridPos": { "h": 9, "w": 12, "x": 0, "y": 4 }, "id": 5, "options": { "legend": { "calcs": [ "mean", "max" ], "displayMode": "table", "placement": "bottom" }, "tooltip": { "mode": "multi" } }, "targets": [ { "expr": "sum by (http_response_status_code) (rate(http_server_duration_milliseconds_count{job=\"immich\",worker=\"api\"}[5m]))", "legendFormat": "{{http_response_status_code}}", "refId": "A" } ], "title": "HTTP Request Rate by Status", "type": "timeseries" }, { "datasource": { "type": "prometheus", "uid": "prometheus" }, "fieldConfig": { "defaults": { "custom": { "drawStyle": "line", "fillOpacity": 10, "lineWidth": 2 }, "unit": "ms" }, "overrides": [] }, "gridPos": { "h": 9, "w": 12, "x": 12, "y": 4 }, "id": 6, "options": { "legend": { "calcs": [ "mean", "max" ], "displayMode": "table", "placement": "bottom" }, "tooltip": { "mode": "multi" } }, "targets": [ { "expr": "histogram_quantile(0.50, sum by (le) (rate(http_server_duration_milliseconds_bucket{job=\"immich\",worker=\"api\"}[5m])))", "legendFormat": "p50", "refId": "A" }, { "expr": "histogram_quantile(0.95, sum by (le) (rate(http_server_duration_milliseconds_bucket{job=\"immich\",worker=\"api\"}[5m])))", "legendFormat": "p95", "refId": "B" }, { "expr": "histogram_quantile(0.99, sum by (le) (rate(http_server_duration_milliseconds_bucket{job=\"immich\",worker=\"api\"}[5m])))", "legendFormat": "p99", "refId": "C" } ], "title": "HTTP Latency p50/p95/p99 (ms)", "type": "timeseries" }, { "datasource": { "type": "prometheus", "uid": "prometheus" }, "fieldConfig": { "defaults": { "custom": { "drawStyle": "line", "fillOpacity": 5, "lineWidth": 1 }, "unit": "ops" }, "overrides": [] }, "gridPos": { "h": 9, "w": 12, "x": 0, "y": 13 }, "id": 7, "options": { "legend": { "calcs": [ "mean" ], "displayMode": "table", "placement": "bottom" }, "tooltip": { "mode": "multi" } }, "targets": [ { "expr": "topk(10, sum by (__name__) (rate({__name__=~\"immich_.*_repository_.*_duration_count\",job=\"immich\"}[5m])))", "legendFormat": "{{__name__}}", "refId": "A" } ], "title": "Repository Query Rate by Repo (top 10)", "type": "timeseries" }, { "datasource": { "type": "prometheus", "uid": "prometheus" }, "fieldConfig": { "defaults": { "custom": { "drawStyle": "line", "fillOpacity": 20, "lineWidth": 2 }, "unit": "decmbytes" }, "overrides": [] }, "gridPos": { "h": 9, "w": 12, "x": 12, "y": 13 }, "id": 8, "options": { "legend": { "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "multi" } }, "targets": [ { "expr": "sum by (worker) (nodejs_heap_size_used_bytes{job=\"immich\"}) / 1024 / 1024", "legendFormat": "{{worker}}", "refId": "A" } ], "title": "Node.js Heap Used (MB) by Worker", "type": "timeseries" } ], "refresh": "30s", "schemaVersion": 39, "tags": [ "immich", "homelab" ], "templating": { "list": [] }, "time": { "from": "now-6h", "to": "now" }, "timepicker": {}, "timezone": "", "title": "immich", "uid": "immich-homelab", "version": 1, "weekStart": "" }