Skip to content

Add Alloy log scraper to local observability stack#4559

Merged
lukemelia merged 2 commits into
mainfrom
cs-10916-add-loki-and-log-scraper-to-local-docker-compose
Apr 29, 2026
Merged

Add Alloy log scraper to local observability stack#4559
lukemelia merged 2 commits into
mainfrom
cs-10916-add-loki-and-log-scraper-to-local-docker-compose

Conversation

@lukemelia

Copy link
Copy Markdown
Contributor

Summary

  • Picks up where PR #4533 (CS-10918) left off — un-comments the Alloy service in packages/observability/docker-compose.yml and ships alloy/config.alloy that discovers Docker containers and forwards their stdout into local Loki.
  • Locks in the load-bearing Loki label schema — env / service / realm — that staging + production FireLens will have to emit identically (companion ticket CS-10917).
  • Adds a minimal loki/config.yaml. The image's bundled config rejects entries older than a few minutes, which generates a 400-storm the first time Alloy attaches to a long-lived container with months of stdout.

Label schema

Label Source (local) Source (hosted, future FireLens)
env constant local constant staging / production
service Docker container name, leading / stripped ECS task family (realm-server, etc.)
realm opt-in via Docker label boxel.realm=<name> realm name from worker/realm-server task env

The local scraper drops grafana / loki / alloy's own log streams to keep {env="local"} clean and avoid a Grafana → Loki feedback loop.

stage.drop { older_than = "24h" } filters out Docker's archived backlog before it reaches Loki — recent stuff still flows through, but a boxel-pg container that's been up for two years no longer 400s the ingester.

Test plan

  • docker compose up -d brings up Grafana + Loki + Alloy, all healthy.
  • curl http://localhost:3100/ready200.
  • curl http://localhost:3100/loki/api/v1/labels returns env, service, service_name.
  • Spinning up docker run --label boxel.realm=test_realm --name <foo> busybox … produces a stream in Loki tagged {env="local", service="<foo>", realm="test_realm"} after Alloy's ~60s discovery refresh.
  • Querying through the Grafana → Loki proxy (/api/datasources/proxy/uid/loki/loki/api/v1/query_range) returns the same data.
  • observability-grafana-1 / observability-loki-1 / observability-alloy-1 are correctly dropped from {env="local"}.
  • Alloy log shows 0 errors after 30s of operation.

🤖 Generated with Claude Code

Picks up where CS-10918 left off: un-comments Alloy in docker-compose,
adds alloy/config.alloy that discovers Docker containers via the host
socket and ships their stdout into Loki. Locks in the load-bearing label
schema (env / service / realm) that staging + production FireLens will
need to match.

Also ships a minimal loki/config.yaml — the bundled defaults reject log
entries older than a few minutes, which generates a 400-storm whenever
Alloy first attaches to a long-lived container that's been sitting on a
year of stdout.

CS-10916

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@github-actions

github-actions Bot commented Apr 28, 2026

Copy link
Copy Markdown
Contributor

Observability diff (vs staging)

Diff truncated (199289 bytes; limit 60000). Full diff: https://github.com/cardstack/boxel/actions/runs/25082575762

diff --git a/tmp/grafanactl-pull.nnCwcU/Dashboard/a2195b5f-b293-4e12-93d4-4536592de634.json b/tmp/grafanactl-pull.nnCwcU/Dashboard/a2195b5f-b293-4e12-93d4-4536592de634.json
deleted file mode 100644
index d7b1b7b..0000000
--- a/tmp/grafanactl-pull.nnCwcU/Dashboard/a2195b5f-b293-4e12-93d4-4536592de634.json
+++ /dev/null
@@ -1,1023 +0,0 @@
-{
-  "apiVersion": "dashboard.grafana.app/v0alpha1",
-  "kind": "Dashboard",
-  "metadata": {
-    "annotations": {},
-    "labels": {},
-    "name": "a2195b5f-b293-4e12-93d4-4536592de634",
-    "namespace": "default"
-  },
-  "spec": {
-    "annotations": {
-      "list": [
-        {
-          "builtIn": 1,
-          "datasource": {
-            "type": "grafana",
-            "uid": "-- Grafana --"
-          },
-          "enable": true,
-          "hide": true,
-          "iconColor": "rgba(0, 211, 255, 1)",
-          "name": "Annotations \u0026 Alerts",
-          "type": "dashboard"
-        }
-      ]
-    },
-    "editable": true,
-    "fiscalYearStartMonth": 0,
-    "graphTooltip": 0,
-    "links": [],
-    "liveNow": false,
-    "panels": [
-      {
-        "datasource": {
-          "type": "cloudwatch",
-          "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-        },
-        "fieldConfig": {
-          "defaults": {
-            "color": {
-              "mode": "palette-classic"
-            },
-            "custom": {
-              "axisCenteredZero": false,
-              "axisColorMode": "text",
-              "axisLabel": "",
-              "axisPlacement": "auto",
-              "barAlignment": 0,
-              "drawStyle": "line",
-              "fillOpacity": 0,
-              "gradientMode": "none",
-              "hideFrom": {
-                "legend": false,
-                "tooltip": false,
-                "viz": false
-              },
-              "lineInterpolation": "linear",
-              "lineWidth": 1,
-              "pointSize": 5,
-              "scaleDistribution": {
-                "type": "linear"
-              },
-              "showPoints": "auto",
-              "spanNulls": false,
-              "stacking": {
-                "group": "A",
-                "mode": "none"
-              },
-              "thresholdsStyle": {
-                "mode": "off"
-              }
-            },
-            "mappings": [],
-            "max": 100,
-            "min": 0,
-            "thresholds": {
-              "mode": "absolute",
-              "steps": [
-                {
-                  "color": "green",
-                  "value": null
-                },
-                {
-                  "color": "red",
-                  "value": 80
-                }
-              ]
-            },
-            "unit": "percent"
-          },
-          "overrides": []
-        },
-        "gridPos": {
-          "h": 7,
-          "w": 12,
-          "x": 0,
-          "y": 0
-        },
-        "id": 1,
-        "options": {
-          "legend": {
-            "calcs": [],
-            "displayMode": "list",
-            "placement": "bottom",
-            "showLegend": true
-          },
-          "tooltip": {
-            "mode": "single",
-            "sort": "none"
-          }
-        },
-        "targets": [
-          {
-            "datasource": {
-              "type": "cloudwatch",
-              "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-            },
-            "dimensions": {
-              "ClusterName": "$cluster"
-            },
-            "expression": "",
-            "hide": false,
-            "id": "",
-            "label": "",
-            "logGroups": [],
-            "matchExact": false,
-            "metricEditorMode": 0,
-            "metricName": "CPUUtilization",
-            "metricQueryType": 0,
-            "namespace": "AWS/ECS",
-            "period": "",
-            "queryMode": "Metrics",
-            "refId": "B",
-            "region": "default",
-            "sqlExpression": "",
-            "statistic": "Maximum"
-          }
-        ],
-        "title": "CPU Utilization",
-        "type": "timeseries"
-      },
-      {
-        "datasource": {
-          "type": "cloudwatch",
-          "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-        },
-        "fieldConfig": {
-          "defaults": {
-            "color": {
-              "mode": "palette-classic"
-            },
-            "custom": {
-              "axisCenteredZero": false,
-              "axisColorMode": "text",
-              "axisLabel": "",
-              "axisPlacement": "auto",
-              "barAlignment": 0,
-              "drawStyle": "line",
-              "fillOpacity": 0,
-              "gradientMode": "none",
-              "hideFrom": {
-                "legend": false,
-                "tooltip": false,
-                "viz": false
-              },
-              "lineInterpolation": "linear",
-              "lineWidth": 1,
-              "pointSize": 5,
-              "scaleDistribution": {
-                "type": "linear"
-              },
-              "showPoints": "auto",
-              "spanNulls": false,
-              "stacking": {
-                "group": "A",
-                "mode": "none"
-              },
-              "thresholdsStyle": {
-                "mode": "off"
-              }
-            },
-            "mappings": [],
-            "max": 100,
-            "min": 0,
-            "thresholds": {
-              "mode": "absolute",
-              "steps": [
-                {
-                  "color": "green",
-                  "value": null
-                },
-                {
-                  "color": "red",
-                  "value": 80
-                }
-              ]
-            },
-            "unit": "percent"
-          },
-          "overrides": []
-        },
-        "gridPos": {
-          "h": 7,
-          "w": 12,
-          "x": 12,
-          "y": 0
-        },
-        "id": 2,
-        "options": {
-          "legend": {
-            "calcs": [],
-            "displayMode": "list",
-            "placement": "bottom",
-            "showLegend": true
-          },
-          "tooltip": {
-            "mode": "single",
-            "sort": "none"
-          }
-        },
-        "targets": [
-          {
-            "datasource": {
-              "type": "cloudwatch",
-              "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-            },
-            "dimensions": {
-              "ClusterName": "$cluster"
-            },
-            "expression": "",
-            "hide": false,
-            "id": "",
-            "label": "",
-            "logGroups": [],
-            "matchExact": false,
-            "metricEditorMode": 0,
-            "metricName": "MemoryUtilization",
-            "metricQueryType": 0,
-            "namespace": "AWS/ECS",
-            "period": "",
-            "queryMode": "Metrics",
-            "refId": "B",
-            "region": "default",
-            "sqlExpression": "",
-            "statistic": "Maximum"
-          }
-        ],
-        "title": "Memory Utilization",
-        "type": "timeseries"
-      },
-      {
-        "datasource": {
-          "type": "cloudwatch",
-          "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-        },
-        "gridPos": {
-          "h": 7,
-          "w": 24,
-          "x": 0,
-          "y": 7
-        },
-        "id": 3,
-        "options": {
-          "dedupStrategy": "none",
-          "enableLogDetails": true,
-          "prettifyLogMessage": false,
-          "showCommonLabels": false,
-          "showLabels": false,
-          "showTime": true,
-          "sortOrder": "Descending",
-          "wrapLogMessage": false
-        },
-        "targets": [
-          {
-            "datasource": {
-              "type": "cloudwatch",
-              "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-            },
-            "dimensions": {},
-            "expression": "fields @timestamp, @message |\n filter @logStream like \"/$service/\" |\n sort @timestamp desc |\n limit $logslimit",
-            "id": "",
-            "label": "",
-            "logGroups": [
-              {
-                "arn": "$loggroup",
-                "name": "$loggroup"
-              }
-            ],
-            "matchExact": true,
-            "metricEditorMode": 0,
-            "metricName": "",
-            "metricQueryType": 0,
-            "namespace": "",
-            "period": "",
-            "queryMode": "Logs",
-            "refId": "A",
-            "region": "default",
-            "sqlExpression": "",
-            "statistic": "Average",
-            "statsGroups": []
-          }
-        ],
-        "title": "Logs",
-        "type": "logs"
-      },
-      {
-        "datasource": {
-          "type": "cloudwatch",
-          "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-        },
-        "fieldConfig": {
-          "defaults": {
-            "color": {
-              "mode": "palette-classic"
-            },
-            "custom": {
-              "axisCenteredZero": false,
-              "axisColorMode": "text",
-              "axisLabel": "",
-              "axisPlacement": "auto",
-              "barAlignment": 0,
-              "drawStyle": "line",
-              "fillOpacity": 0,
-              "gradientMode": "none",
-              "hideFrom": {
-                "legend": false,
-                "tooltip": false,
-                "viz": false
-              },
-              "lineInterpolation": "linear",
-              "lineWidth": 1,
-              "pointSize": 5,
-              "scaleDistribution": {
-                "type": "linear"
-              },
-              "showPoints": "auto",
-              "spanNulls": false,
-              "stacking": {
-                "group": "A",
-                "mode": "none"
-              },
-              "thresholdsStyle": {
-                "mode": "off"
-              }
-            },
-            "mappings": [],
-            "thresholds": {
-              "mode": "absolute",
-              "steps": [
-                {
-                  "color": "green",
-                  "value": null
-                },
-                {
-                  "color": "red",
-                  "value": 80
-                }
-              ]
-            },
-            "unit": "s"
-          },
-          "overrides": []
-        },
-        "gridPos": {
-          "h": 7,
-          "w": 6,
-          "x": 0,
-          "y": 14
-        },
-        "id": 4,
-        "options": {
-          "legend": {
-            "calcs": [],
-            "displayMode": "list",
-            "placement": "bottom",
-            "showLegend": true
-          },
-          "tooltip": {
-            "mode": "single",
-            "sort": "none"
-          }
-        },
-        "targets": [
-          {
-            "datasource": {
-              "type": "cloudwatch",
-              "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-            },
-            "dimensions": {
-              "LoadBalancer": "$lb"
-            },
-            "expression": "",
-            "id": "",
-            "label": "Maximum",
-            "logGroups": [],
-            "matchExact": true,
-            "metricEditorMode": 0,
-            "metricName": "TargetResponseTime",
-            "metricQueryType": 0,
-            "namespace": "AWS/ApplicationELB",
-            "period": "",
-            "queryMode": "Metrics",
-            "refId": "A",
-            "region": "default",
-            "sqlExpression": "",
-            "statistic": "Maximum"
-          },
-          {
-            "datasource": {
-              "type": "cloudwatch",
-              "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-            },
-            "dimensions": {
-              "LoadBalancer": "$lb"
-            },
-            "expression": "",
-            "hide": false,
-            "id": "",
-            "label": "Average",
-            "logGroups": [],
-            "matchExact": true,
-            "metricEditorMode": 0,
-            "metricName": "TargetResponseTime",
-            "metricQueryType": 0,
-            "namespace": "AWS/ApplicationELB",
-            "period": "",
-            "queryMode": "Metrics",
-            "refId": "B",
-            "region": "default",
-            "sqlExpression": "",
-            "statistic": "Average"
-          }
-        ],
-        "title": "Response Time",
-        "type": "timeseries"
-      },
-      {
-        "datasource": {
-          "type": "cloudwatch",
-          "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-        },
-        "fieldConfig": {
-          "defaults": {
-            "color": {
-              "mode": "palette-classic"
-            },
-            "custom": {
-              "axisCenteredZero": false,
-              "axisColorMode": "text",
-              "axisLabel": "",
-              "axisPlacement": "auto",
-              "barAlignment": 0,
-              "drawStyle": "line",
-              "fillOpacity": 0,
-              "gradientMode": "none",
-              "hideFrom": {
-                "legend": false,
-                "tooltip": false,
-                "viz": false
-              },
-              "lineInterpolation": "linear",
-              "lineWidth": 1,
-              "pointSize": 5,
-              "scaleDistribution": {
-                "type": "linear"
-              },
-              "showPoints": "auto",
-              "spanNulls": false,
-              "stacking": {
-                "group": "A",
-                "mode": "none"
-              },
-              "thresholdsStyle": {
-                "mode": "off"
-              }
-            },
-            "mappings": [],
-            "thresholds": {
-              "mode": "absolute",
-              "steps": [
-                {
-                  "color": "green",
-                  "value": null
-                },
-                {
-                  "color": "red",
-                  "value": 80
-                }
-              ]
-            },
-            "unit": "none"
-          },
-          "overrides": []
-        },
-        "gridPos": {
-          "h": 7,
-          "w": 6,
-          "x": 6,
-          "y": 14
-        },
-        "id": 5,
-        "options": {
-          "legend": {
-            "calcs": [],
-            "displayMode": "list",
-            "placement": "bottom",
-            "showLegend": false
-          },
-          "tooltip": {
-            "mode": "single",
-            "sort": "none"
-          }
-        },
-        "targets": [
-          {
-            "datasource": {
-              "type": "cloudwatch",
-              "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-            },
-            "dimensions": {
-              "LoadBalancer": "$lb"
-            },
-            "expression": "",
-            "id": "",
-            "label": "",
-            "logGroups": [],
-            "matchExact": true,
-            "metricEditorMode": 0,
-            "metricName": "RequestCount",
-            "metricQueryType": 0,
-            "namespace": "AWS/ApplicationELB",
-            "period": "",
-            "queryMode": "Metrics",
-            "refId": "A",
-            "region": "default",
-            "sqlExpression": "",
-            "statistic": "Sum"
-          }
-        ],
-        "title": "Request Count",
-        "type": "timeseries"
-      },
-      {
-        "datasource": {
-          "type": "cloudwatch",
-          "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-        },
-        "fieldConfig": {
-          "defaults": {
-            "color": {
-              "mode": "palette-classic"
-            },
-            "custom": {
-              "axisCenteredZero": false,
-              "axisColorMode": "text",
-              "axisLabel": "",
-              "axisPlacement": "auto",
-              "barAlignment": 0,
-              "drawStyle": "line",
-              "fillOpacity": 0,
-              "gradientMode": "none",
-              "hideFrom": {
-                "legend": false,
-                "tooltip": false,
-                "viz": false
-              },
-              "lineInterpolation": "linear",
-              "lineWidth": 1,
-              "pointSize": 5,
-              "scaleDistribution": {
-                "type": "linear"
-              },
-              "showPoints": "auto",
-              "spanNulls": false,
-              "stacking": {
-                "group": "A",
-                "mode": "none"
-              },
-              "thresholdsStyle": {
-                "mode": "off"
-              }
-            },
-            "mappings": [],
-            "thresholds": {
-              "mode": "absolute",
-              "steps": [
-                {
-                  "color": "green",
-                  "value": null
-                },
-                {
-                  "color": "red",
-                  "value": 80
-                }
-              ]
-            }
-          },
-          "overrides": [
-            {
-              "matcher": {
-                "id": "byName",
-                "options": "5XX"
-              },
-              "properties": [
-                {
-                  "id": "color",
-                  "value": {
-                    "fixedColor": "red",
-                    "mode": "fixed"
-                  }
-                }
-              ]
-            },
-            {
-              "matcher": {
-                "id": "byName",
-                "options": "2XX"
-              },
-              "properties": [
-                {
-                  "id": "color",
-                  "value": {
-                    "fixedColor": "green",
-                    "mode": "fixed"
-                  }
-                }
-              ]
-            }
-          ]
-        },
-        "gridPos": {
-          "h": 7,
-          "w": 6,
-          "x": 12,
-          "y": 14
-        },
-        "id": 6,
-        "options": {
-          "legend": {
-            "calcs": [],
-            "displayMode": "list",
-            "placement": "bottom",
-            "showLegend": true
-          },
-          "tooltip": {
-            "mode": "single",
-            "sort": "none"
-          }
-        },
-        "targets": [
-          {
-            "datasource": {
-              "type": "cloudwatch",
-              "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-            },
-            "dimensions": {
-              "LoadBalancer": "$lb"
-            },
-            "expression": "",
-            "hide": false,
-            "id": "",
-            "label": "2XX",
-            "logGroups": [],
-            "matchExact": true,
-            "metricEditorMode": 0,
-            "metricName": "HTTPCode_Target_2XX_Count",
-            "metricQueryType": 0,
-            "namespace": "AWS/ApplicationELB",
-            "period": "",
-            "queryMode": "Metrics",
-            "refId": "C",
-            "region": "default",
-            "sqlExpression": "",
-            "statistic": "Sum"
-          },
-          {
-            "datasource": {
-              "type": "cloudwatch",
-              "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-            },
-            "dimensions": {
-              "LoadBalancer": "$lb"
-            },
-            "expression": "",
-            "hide": false,
-            "id": "",
-            "label": "4XX",
-            "logGroups": [],
-            "matchExact": true,
-            "metricEditorMode": 0,
-            "metricName": "HTTPCode_Target_4XX_Count",
-            "metricQueryType": 0,
-            "namespace": "AWS/ApplicationELB",
-            "period": "",
-            "queryMode": "Metrics",
-            "refId": "B",
-            "region": "default",
-            "sqlExpression": "",
-            "statistic": "Sum"
-          },
-          {
-            "datasource": {
-              "type": "cloudwatch",
-              "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-            },
-            "dimensions": {
-              "LoadBalancer": "$lb"
-            },
-            "expression": "",
-            "hide": false,
-            "id": "",
-            "label": "5XX",
-            "logGroups": [],
-            "matchExact": true,
-            "metricEditorMode": 0,
-            "metricName": "HTTPCode_Target_5XX_Count",
-            "metricQueryType": 0,
-            "namespace": "AWS/ApplicationELB",
-            "period": "",
-            "queryMode": "Metrics",
-            "refId": "A",
-            "region": "default",
-            "sqlExpression": "",
-            "statistic": "Sum"
-          }
-        ],
-        "title": "Target Response Code",
-        "type": "timeseries"
-      },
-      {
-        "datasource": {
-          "type": "cloudwatch",
-          "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-        },
-        "fieldConfig": {
-          "defaults": {
-            "color": {
-              "mode": "palette-classic"
-            },
-            "custom": {
-              "axisCenteredZero": false,
-              "axisColorMode": "text",
-              "axisLabel": "",
-              "axisPlacement": "auto",
-              "barAlignment": 0,
-              "drawStyle": "line",
-              "fillOpacity": 0,
-              "gradientMode": "none",
-              "hideFrom": {
-                "legend": false,
-                "tooltip": false,
-                "viz": false
-              },
-              "lineInterpolation": "linear",
-              "lineWidth": 1,
-              "pointSize": 5,
-              "scaleDistribution": {
-                "type": "linear"
-              },
-              "showPoints": "auto",
-              "spanNulls": false,
-              "stacking": {
-                "group": "A",
-                "mode": "none"
-              },
-              "thresholdsStyle": {
-                "mode": "off"
-              }
-            },
-            "mappings": [],
-            "thresholds": {
-              "mode": "absolute",
-              "steps": [
-                {
-                  "color": "green",
-                  "value": null
-                },
-                {
-                  "color": "red",
-                  "value": 80
-                }
-              ]
-            }
-          },
-          "overrides": [
-            {
-              "matcher": {
-                "id": "byName",
-                "options": "5XX"
-              },
-              "properties": [
-                {
-                  "id": "color",
-                  "value": {
-                    "fixedColor": "red",
-                    "mode": "fixed"
-                  }
-                }
-              ]
-            }
-          ]
-        },
-        "gridPos": {
-          "h": 7,
-          "w": 6,
-          "x": 18,
-          "y": 14
-        },
-        "id": 7,
-        "options": {
-          "legend": {
-            "calcs": [],
-            "displayMode": "list",
-            "placement": "bottom",
-            "showLegend": true
-          },
-          "tooltip": {
-            "mode": "single",
-            "sort": "none"
-          }
-        },
-        "targets": [
-          {
-            "datasource": {
-              "type": "cloudwatch",
-              "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-            },
-            "dimensions": {
-              "LoadBalancer": "$lb"
-            },
-            "expression": "",
-            "hide": false,
-            "id": "",
-            "label": "5XX",
-            "logGroups": [],
-            "matchExact": true,
-            "metricEditorMode": 0,
-            "metricName": "HTTPCode_ELB_5XX_Count",
-            "metricQueryType": 0,
-            "namespace": "AWS/ApplicationELB",
-            "period": "",
-            "queryMode": "Metrics",
-            "refId": "A",
-            "region": "default",
-            "sqlExpression": "",
-            "statistic": "Sum"
-          },
-          {
-            "datasource": {
-              "type": "cloudwatch",
-              "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-            },
-            "dimensions": {
-              "LoadBalancer": "$lb"
-            },
-            "expression": "",
-            "hide": false,
-            "id": "",
-            "label": "4XX",
-            "logGroups": [],
-            "matchExact": true,
-            "metricEditorMode": 0,
-            "metricName": "HTTPCode_ELB_4XX_Count",
-            "metricQueryType": 0,
-            "namespace": "AWS/ApplicationELB",
-            "period": "",
-            "queryMode": "Metrics",
-            "refId": "B",
-            "region": "default",
-            "sqlExpression": "",
-            "statistic": "Sum"
-          }
-        ],
-        "title": "ALB Response Code",
-        "type": "timeseries"
-      }
-    ],
-    "refresh": "30s",
-    "schemaVersion": 38,
-    "style": "dark",
-    "tags": [],
-    "templating": {
-      "list": [
-        {
-          "current": {
-            "selected": true,
-            "text": "10",
-            "value": "10"
-          },
-          "hide": 0,
-          "includeAll": false,
-          "label": "Logs Limit",
-          "multi": false,
-          "name": "logslimit",
-          "options": [
-            {
-              "selected": true,
-              "text": "10",
-              "value": "10"
-            },
-            {
-              "selected": false,
-              "text": "100",
-              "value": "100"
-            },
-            {
-              "selected": false,
-              "text": "1000",
-              "value": "1000"
-            }
-          ],
-          "query": "10, 100, 1000",
-          "queryValue": "",
-          "skipUrlSync": false,
-          "type": "custom"
-        },
-        {
-          "current": {
-            "selected": false,
-            "text": "realm-demo-staging",
-            "value": "realm-demo-staging"
-          },
-          "datasource": {
-            "type": "cloudwatch",
-            "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-          },
-          "definition": "",
-          "hide": 2,
-          "includeAll": false,
-          "multi": false,
-          "name": "cluster",
-          "options": [],
-          "query": {
-            "dimensionKey": "ClusterName",
-            "metricName": "CPUUtilization",
-            "namespace": "AWS/ECS",
-            "queryType": "dimensionValues",
-            "refId": "CloudWatchVariableQueryEditor-VariableQuery",
-            "region": "default"
-          },
-          "refresh": 1,
-          "regex": "hub-staging",
-          "skipUrlSync": false,
-          "sort": 0,
-          "type": "query"
-        },
-        {
-          "current": {
-            "selected": false,
-            "text": "app/waypoint-ecs-realm-demo/7e699a3b9ff13ebc",
-            "value": "app/waypoint-ecs-realm-demo/7e699a3b9ff13ebc"
-          },
-          "datasource": {
-            "type": "cloudwatch",
-            "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-          },
-          "definition": "",
-          "hide": 2,
-          "includeAll": false,
-          "multi": false,
-          "name": "lb",
-          "options": [],
-          "query": {
-            "dimensionKey": "LoadBalancer",
-            "metricName": "RequestCount",
-            "namespace": "AWS/ApplicationELB",
-            "queryType": "dimensionValues",
-            "refId": "CloudWatchVariableQueryEditor-VariableQuery",
-            "region": "default"
-          },
-          "refresh": 1,
-          "regex": "app/waypoint-ecs-hub/.*",
-          "skipUrlSync": false,
-          "sort": 0,
-          "type": "query"
-        },
-        {
-          "current": {
-            "selected": false,
-            "text": "waypoint-logs",
-            "value": "arn:aws:logs:us-east-1:680542703984:log-group:waypoint-logs:*"
-          },
-          "datasource": {
-            "type": "cloudwatch",
-            "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-          },
-          "definition": "",
-          "hide": 2,
-          "includeAll": false,
-          "multi": false,
-          "name": "loggroup",
-          "options": [],
-          "query": {
-            "logGroupPrefix": "waypoint-logs",
-            "queryType": "logGroups",
-            "refId": "CloudWatchVariableQueryEditor-VariableQuery",
-            "region": "default"
-          },
-          "refresh": 1,
-          "regex": "",
-          "skipUrlSync": false,
-          "sort": 0,
-          "type": "query"
-        },
-        {
-          "hide": 2,
-          "name": "service",
-          "query": "hub",
-          "skipUrlSync": false,
-          "type": "constant"
-        }
-      ]
-    },
-    "time": {
-      "from": "now-15m",
-      "to": "now"
-    },
-    "timepicker": {},
-    "timezone": "",
-    "title": "Hub Server",
-    "weekStart": ""
-  }
-}
diff --git a/tmp/grafanactl-pull.nnCwcU/Dashboard/b5a43a39-bb43-42b5-917b-ac54a0bdeff5.json b/tmp/grafanactl-pull.nnCwcU/Dashboard/b5a43a39-bb43-42b5-917b-ac54a0bdeff5.json
deleted file mode 100644
index e95e707..0000000
--- a/tmp/grafanactl-pull.nnCwcU/Dashboard/b5a43a39-bb43-42b5-917b-ac54a0bdeff5.json
+++ /dev/null
@@ -1,406 +0,0 @@
-{
-  "apiVersion": "dashboard.grafana.app/v0alpha1",
-  "kind": "Dashboard",
-  "metadata": {
-    "annotations": {},
-    "labels": {},
-    "name": "b5a43a39-bb43-42b5-917b-ac54a0bdeff5",
-    "namespace": "default"
-  },
-  "spec": {
-    "annotations": {
-      "list": [
-        {
-          "builtIn": 1,
-          "datasource": {
-            "type": "grafana",
-            "uid": "-- Grafana --"
-          },
-          "enable": true,
-          "hide": true,
-          "iconColor": "rgba(0, 211, 255, 1)",
-          "name": "Annotations \u0026 Alerts",
-          "type": "dashboard"
-        }
-      ]
-    },
-    "editable": true,
-    "fiscalYearStartMonth": 0,
-    "graphTooltip": 0,
-    "links": [],
-    "liveNow": false,
-    "panels": [
-      {
-        "datasource": {
-          "type": "cloudwatch",
-          "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-        },
-        "fieldConfig": {
-          "defaults": {
-            "color": {
-              "mode": "palette-classic"
-            },
-            "custom": {
-              "axisCenteredZero": false,
-              "axisColorMode": "text",
-              "axisLabel": "",
-              "axisPlacement": "auto",
-              "barAlignment": 0,
-              "drawStyle": "line",
-              "fillOpacity": 0,
-              "gradientMode": "none",
-              "hideFrom": {
-                "legend": false,
-                "tooltip": false,
-                "viz": false
-              },
-              "lineInterpolation": "linear",
-              "lineWidth": 1,
-              "pointSize": 5,
-              "scaleDistribution": {
-                "type": "linear"
-              },
-              "showPoints": "auto",
-              "spanNulls": false,
-              "stacking": {
-                "group": "A",
-                "mode": "none"
-              },
-              "thresholdsStyle": {
-                "mode": "off"
-              }
-            },
-            "mappings": [],
-            "thresholds": {
-              "mode": "absolute",
-              "steps": [
-                {
-                  "color": "green",
-                  "value": null
-                },
-                {
-                  "color": "red",
-                  "value": 80
-                }
-              ]
-            },
-            "unit": "percent"
-          },
-          "overrides": []
-        },
-        "gridPos": {
-          "h": 8,
-          "w": 12,
-          "x": 0,
-          "y": 0
-        },
-        "id": 1,
-        "options": {
-          "legend": {
-            "calcs": [],
-            "displayMode": "list",
-            "placement": "bottom",
-            "showLegend": true
-          },
-          "tooltip": {
-            "mode": "single",
-            "sort": "none"
-          }
-        },
-        "targets": [
-          {
-            "datasource": {
-              "type": "cloudwatch",
-              "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-            },
-            "dimensions": {
-              "ClusterName": "cardie-staging-Cluster-XVKsuc5732Dj",
-              "ServiceName": "cardie-staging-bot-Service-DoUGKX86rb2z"
-            },
-            "expression": "",
-            "id": "",
-            "label": "Average",
-            "logGroups": [],
-            "matchExact": true,
-            "metricEditorMode": 0,
-            "metricName": "CPUUtilization",
-            "metricQueryType": 0,
-            "namespace": "AWS/ECS",
-            "period": "",
-            "queryMode": "Metrics",
-            "refId": "A",
-            "region": "default",
-            "sqlExpression": "",
-            "statistic": "Average"
-          },
-          {
-            "datasource": {
-              "type": "cloudwatch",
-              "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-            },
-            "dimensions": {
-              "ClusterName": "cardie-staging-Cluster-XVKsuc5732Dj",
-              "ServiceName": "cardie-staging-bot-Service-DoUGKX86rb2z"
-            },
-            "expression": "",
-            "hide": false,
-            "id": "",
-            "label": "Maximum",
-            "logGroups": [],
-            "matchExact": false,
-            "metricEditorMode": 0,
-            "metricName": "CPUUtilization",
-            "metricQueryType": 0,
-            "namespace": "AWS/ECS",
-            "period": "",
-            "queryMode": "Metrics",
-            "refId": "B",
-            "region": "default",
-            "sqlExpression": "",
-            "statistic": "Maximum"
-          }
-        ],
-        "title": "CPU Utilization",
-        "type": "timeseries"
-      },
-      {
-        "datasource": {
-          "type": "cloudwatch",
-          "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-        },
-        "fieldConfig": {
-          "defaults": {
-            "color": {
-              "mode": "palette-classic"
-            },
-            "custom": {
-              "axisCenteredZero": false,
-              "axisColorMode": "text",
-              "axisLabel": "",
-              "axisPlacement": "auto",
-              "barAlignment": 0,
-              "drawStyle": "line",
-              "fillOpacity": 0,
-              "gradientMode": "none",
-              "hideFrom": {
-                "legend": false,
-                "tooltip": false,
-                "viz": false
-              },
-              "lineInterpolation": "linear",
-              "lineWidth": 1,
-              "pointSize": 5,
-              "scaleDistribution": {
-                "type": "linear"
-              },
-              "showPoints": "auto",
-              "spanNulls": false,
-              "stacking": {
-                "group": "A",
-                "mode": "none"
-              },
-              "thresholdsStyle": {
-                "mode": "off"
-              }
-            },
-            "mappings": [],
-            "thresholds": {
-              "mode": "absolute",
-              "steps": [
-                {
-                  "color": "green",
-                  "value": null
-                },
-                {
-                  "color": "red",
-                  "value": 80
-                }
-              ]
-            },
-            "unit": "percent"
-          },
-          "overrides": []
-        },
-        "gridPos": {
-          "h": 8,
-          "w": 12,
-          "x": 12,
-          "y": 0
-        },
-        "id": 2,
-        "options": {
-          "legend": {
-            "calcs": [],
-            "displayMode": "list",
-            "placement": "bottom",
-            "showLegend": true
-          },
-          "tooltip": {
-            "mode": "single",
-            "sort": "none"
-          }
-        },
-        "targets": [
-          {
-            "datasource": {
-              "type": "cloudwatch",
-              "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-            },
-            "dimensions": {
-              "ClusterName": "cardie-staging-Cluster-XVKsuc5732Dj",
-              "ServiceName": "cardie-staging-bot-Service-DoUGKX86rb2z"
-            },
-            "expression": "",
-            "id": "",
-            "label": "Average",
-            "logGroups": [],
-            "matchExact": true,
-            "metricEditorMode": 0,
-            "metricName": "MemoryUtilization",
-            "metricQueryType": 0,
-            "namespace": "AWS/ECS",
-            "period": "",
-            "queryMode": "Metrics",
-            "refId": "A",
-            "region": "default",
-            "sqlExpression": "",
-            "statistic": "Average"
-          },
-          {
-            "datasource": {
-              "type": "cloudwatch",
-              "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-            },
-            "dimensions": {
-              "ClusterName": "cardie-staging-Cluster-XVKsuc5732Dj",
-              "ServiceName": "cardie-staging-bot-Service-DoUGKX86rb2z"
-            },
-            "expression": "",
-            "hide": false,
-            "id": "",
-            "label": "Maximum",
-            "logGroups": [],
-            "matchExact": true,
-            "metricEditorMode": 0,
-            "metricName": "MemoryUtilization",
-            "metricQueryType": 0,
-            "namespace": "AWS/ECS",
-            "period": "",
-            "queryMode": "Metrics",
-            "refId": "B",
-            "region": "default",
-            "sqlExpression": "",
-            "statistic": "Maximum"
-          }
-        ],
-        "title": "Memory Utilization",
-        "type": "timeseries"
-      },
-      {
-        "datasource": {
-          "type": "cloudwatch",
-          "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-        },
-        "gridPos": {
-          "h": 6,
-          "w": 24,
-          "x": 0,
-          "y": 8
-        },
-        "id": 3,
-        "options": {
-          "dedupStrategy": "none",
-          "enableLogDetails": true,
-          "prettifyLogMessage": false,
-          "showCommonLabels": false,
-          "showLabels": false,
-          "showTime": true,
-          "sortOrder": "Descending",
-          "wrapLogMessage": false
-        },
-        "targets": [
-          {
-            "datasource": {
-              "type": "cloudwatch",
-              "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-            },
-            "dimensions": {},
-            "expression": "fields @timestamp, @message |\n sort @timestamp desc |\n limit $logslimit",
-            "id": "",
-            "label": "",
-            "logGroups": [
-              {
-                "accountId": "680542703984",
-                "arn": "arn:aws:logs:us-east-1:680542703984:log-group:/copilot/cardie-staging-bot:*",
-                "name": "/copilot/cardie-staging-bot"
-              }
-            ],
-            "matchExact": true,
-            "metricEditorMode": 0,
-            "metricName": "",
-            "metricQueryType": 0,
-            "namespace": "",
-            "period": "",
-            "queryMode": "Logs",
-            "refId": "A",
-            "region": "default",
-            "sqlExpression": "",
-            "statistic": "Average",
-            "statsGroups": []
-          }
-        ],
-        "title": "Logs",
-        "type": "logs"
-      }
-    ],
-    "refresh": "5s",
-    "schemaVersion": 38,
-    "style": "dark",
-    "tags": [],
-    "templating": {
-      "list": [
-        {
-          "current": {
-            "selected": true,
-            "text": "10",
-            "value": "10"
-          },
-          "hide": 0,
-          "includeAll": false,
-          "label": "Logs Limit",
-          "multi": false,
-          "name": "logslimit",
-          "options": [
-            {
-              "selected": true,
-              "text": "10",
-              "value": "10"
-            },
-            {
-              "selected": false,
-              "text": "100",
-              "value": "100"
-            },
-            {
-              "selected": false,
-              "text": "1000",
-              "value": "1000"
-            }
-          ],
-          "query": "10, 100, 1000",
-          "queryValue": "",
-          "skipUrlSync": false,
-          "type": "custom"
-        }
-      ]
-    },
-    "time": {
-      "from": "now-15m",
-      "to": "now"
-    },
-    "timepicker": {},
-    "timezone": "",
-    "title": "Cardie",
-    "weekStart": ""
-  }
-}
diff --git a/tmp/grafanactl-pull.nnCwcU/Dashboard/b5e70a32-aa79-4a80-9ebc-00a4db975798.json b/tmp/grafanactl-pull.nnCwcU/Dashboard/b5e70a32-aa79-4a80-9ebc-00a4db975798.json
deleted file mode 100644
index fb98022..0000000
--- a/tmp/grafanactl-pull.nnCwcU/Dashboard/b5e70a32-aa79-4a80-9ebc-00a4db975798.json
+++ /dev/null
@@ -1,1016 +0,0 @@
-{
-  "apiVersion": "dashboard.grafana.app/v0alpha1",
-  "kind": "Dashboard",
-  "metadata": {
-    "annotations": {},
-    "labels": {},
-    "name": "b5e70a32-aa79-4a80-9ebc-00a4db975798",
-    "namespace": "default"
-  },
-  "spec": {
-    "annotations": {
-      "list": [
-        {
-          "builtIn": 1,
-          "datasource": {
-            "type": "grafana",
-            "uid": "-- Grafana --"
-          },
-          "enable": true,
-          "hide": true,
-          "iconColor": "rgba(0, 211, 255, 1)",
-          "name": "Annotations \u0026 Alerts",
-          "type": "dashboard"
-        }
-      ]
-    },
-    "editable": true,
-    "fiscalYearStartMonth": 0,
-    "graphTooltip": 0,
-    "links": [],
-    "liveNow": false,
-    "panels": [
-      {
-        "datasource": {
-          "type": "cloudwatch",
-          "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-        },
-        "fieldConfig": {
-          "defaults": {
-            "color": {
-              "mode": "palette-classic"
-            },
-            "custom": {
-              "axisCenteredZero": false,
-              "axisColorMode": "text",
-              "axisLabel": "",
-              "axisPlacement": "auto",
-              "barAlignment": 0,
-              "drawStyle": "line",
-              "fillOpacity": 0,
-              "gradientMode": "none",
-              "hideFrom": {
-                "legend": false,
-                "tooltip": false,
-                "viz": false
-              },
-              "lineInterpolation": "linear",
-              "lineWidth": 1,
-              "pointSize": 5,
-              "scaleDistribution": {
-                "type": "linear"
-              },
-              "showPoints": "auto",
-              "spanNulls": false,
-              "stacking": {
-                "group": "A",
-                "mode": "none"
-              },
-              "thresholdsStyle": {
-                "mode": "off"
-              }
-            },
-            "mappings": [],
-            "max": 100,
-            "min": 0,
-            "thresholds": {
-              "mode": "absolute",
-              "steps": [
-                {
-                  "color": "green",
-                  "value": null
-                },
-                {
-                  "color": "red",
-                  "value": 80
-                }
-              ]
-            },
-            "unit": "percent"
-          },
-          "overrides": []
-        },
-        "gridPos": {
-          "h": 7,
-          "w": 12,
-          "x": 0,
-          "y": 0
-        },
-        "id": 1,
-        "options": {
-          "legend": {
-            "calcs": [],
-            "displayMode": "list",
-            "placement": "bottom",
-            "showLegend": true
-          },
-          "tooltip": {
-            "mode": "single",
-            "sort": "none"
-          }
-        },
-        "targets": [
-          {
-            "datasource": {
-              "type": "cloudwatch",
-              "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-            },
-            "dimensions": {
-              "ClusterName": "$cluster"
-            },
-            "expression": "",
-            "hide": false,
-            "id": "",
-            "label": "",
-            "logGroups": [],
-            "matchExact": false,
-            "metricEditorMode": 0,
-            "metricName": "CPUUtilization",
-            "metricQueryType": 0,
-            "namespace": "AWS/ECS",
-            "period": "",
-            "queryMode": "Metrics",
-            "refId": "B",
-            "region": "default",
-            "sqlExpression": "",
-            "statistic": "Maximum"
-          }
-        ],
-        "title": "CPU Utilization",
-        "type": "timeseries"
-      },
-      {
-        "datasource": {
-          "type": "cloudwatch",
-          "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-        },
-        "fieldConfig": {
-          "defaults": {
-            "color": {
-              "mode": "palette-classic"
-            },
-            "custom": {
-              "axisCenteredZero": false,
-              "axisColorMode": "text",
-              "axisLabel": "",
-              "axisPlacement": "auto",
-              "barAlignment": 0,
-              "drawStyle": "line",
-              "fillOpacity": 0,
-              "gradientMode": "none",
-              "hideFrom": {
-                "legend": false,
-                "tooltip": false,
-                "viz": false
-              },
-              "lineInterpolation": "linear",
-              "lineWidth": 1,
-              "pointSize": 5,
-              "scaleDistribution": {
-                "type": "linear"
-              },
-              "showPoints": "auto",
-              "spanNulls": false,
-              "stacking": {
-                "group": "A",
-                "mode": "none"
-              },
-              "thresholdsStyle": {
-                "mode": "off"
-              }
-            },
-            "mappings": [],
-            "max": 100,
-            "min": 0,
-            "thresholds": {
-              "mode": "absolute",
-              "steps": [
-                {
-                  "color": "green",
-                  "value": null
-                },
-                {
-                  "color": "red",
-                  "value": 80
-                }
-              ]
-            },
-            "unit": "percent"
-          },
-          "overrides": []
-        },
-        "gridPos": {
-          "h": 7,
-          "w": 12,
-          "x": 12,
-          "y": 0
-        },
-        "id": 2,
-        "options": {
-          "legend": {
-            "calcs": [],
-            "displayMode": "list",
-            "placement": "bottom",
-            "showLegend": true
-          },
-          "tooltip": {
-            "mode": "single",
-            "sort": "none"
-          }
-        },
-        "targets": [
-          {
-            "datasource": {
-              "type": "cloudwatch",
-              "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-            },
-            "dimensions": {
-              "ClusterName": "$cluster"
-            },
-            "expression": "",
-            "hide": false,
-            "id": "",
-            "label": "",
-            "logGroups": [],
-            "matchExact": false,
-            "metricEditorMode": 0,
-            "metricName": "MemoryUtilization",
-            "metricQueryType": 0,
-            "namespace": "AWS/ECS",
-            "period": "",
-            "queryMode": "Metrics",
-            "refId": "B",
-            "region": "default",
-            "sqlExpression": "",
-            "statistic": "Maximum"
-          }
-        ],
-        "title": "Memory Utilization",
-        "type": "timeseries"
-      },
-      {
-        "datasource": {
-          "type": "cloudwatch",
-          "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-        },
-        "gridPos": {
-          "h": 7,
-          "w": 24,
-          "x": 0,
-          "y": 7
-        },
-        "id": 3,
-        "options": {
-          "dedupStrategy": "none",
-          "enableLogDetails": true,
-          "prettifyLogMessage": false,
-          "showCommonLabels": false,
-          "showLabels": false,
-          "showTime": true,
-          "sortOrder": "Descending",
-          "wrapLogMessage": false
-        },
-        "targets": [
-          {
-            "datasource": {
-              "type": "cloudwatch",
-              "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-            },
-            "dimensions": {},
-            "expression": "fields @timestamp, @message |\n filter @logStream like \"/realm-demo/\" |\n sort @timestamp desc |\n limit $logslimit",
-            "id": "",
-            "label": "",
-            "logGroups": [
-              {
-                "arn": "$loggroup",
-                "name": "$loggroup"
-              }
-            ],
-            "matchExact": true,
-            "metricEditorMode": 0,
-            "metricName": "",
-            "metricQueryType": 0,
-            "namespace": "",
-            "period": "",
-            "queryMode": "Logs",
-            "refId": "A",
-            "region": "default",
-            "sqlExpression": "",
-            "statistic": "Average",
-            "statsGroups": []
-          }
-        ],
-        "title": "Logs",
-        "type": "logs"
-      },
-      {
-        "datasource": {
-          "type": "cloudwatch",
-          "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-        },
-        "fieldConfig": {
-          "defaults": {
-            "color": {
-              "mode": "palette-classic"
-            },
-            "custom": {
-              "axisCenteredZero": false,
-              "axisColorMode": "text",
-              "axisLabel": "",
-              "axisPlacement": "auto",
-              "barAlignment": 0,
-              "drawStyle": "line",
-              "fillOpacity": 0,
-              "gradientMode": "none",
-              "hideFrom": {
-                "legend": false,
-                "tooltip": false,
-                "viz": false
-              },
-              "lineInterpolation": "linear",
-              "lineWidth": 1,
-              "pointSize": 5,
-              "scaleDistribution": {
-                "type": "linear"
-              },
-              "showPoints": "auto",
-              "spanNulls": false,
-              "stacking": {
-                "group": "A",
-                "mode": "none"
-              },
-              "thresholdsStyle": {
-                "mode": "off"
-              }
-            },
-            "mappings": [],
-            "thresholds": {
-              "mode": "absolute",
-              "steps": [
-                {
-                  "color": "green",
-                  "value": null
-                },
-                {
-                  "color": "red",
-                  "value": 80
-                }
-              ]
-            },
-            "unit": "s"
-          },
-          "overrides": []
-        },
-        "gridPos": {
-          "h": 7,
-          "w": 6,
-          "x": 0,
-          "y": 14
-        },
-        "id": 4,
-        "options": {
-          "legend": {
-            "calcs": [],
-            "displayMode": "list",
-            "placement": "bottom",
-            "showLegend": true
-          },
-          "tooltip": {
-            "mode": "single",
-            "sort": "none"
-          }
-        },
-        "targets": [
-          {
-            "datasource": {
-              "type": "cloudwatch",
-              "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-            },
-            "dimensions": {
-              "LoadBalancer": "$lb"
-            },
-            "expression": "",
-            "id": "",
-            "label": "Maximum",
-            "logGroups": [],
-            "matchExact": true,
-            "metricEditorMode": 0,
-            "metricName": "TargetResponseTime",
-            "metricQueryType": 0,
-            "namespace": "AWS/ApplicationELB",
-            "period": "",
-            "queryMode": "Metrics",
-            "refId": "A",
-            "region": "default",
-            "sqlExpression": "",
-            "statistic": "Maximum"
-          },
-          {
-            "datasource": {
-              "type": "cloudwatch",
-              "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-            },
-            "dimensions": {
-              "LoadBalancer": "$lb"
-            },
-            "expression": "",
-            "hide": false,
-            "id": "",
-            "label": "Average",
-            "logGroups": [],
-            "matchExact": true,
-            "metricEditorMode": 0,
-            "metricName": "TargetResponseTime",
-            "metricQueryType": 0,
-            "namespace": "AWS/ApplicationELB",
-            "period": "",
-            "queryMode": "Metrics",
-            "refId": "B",
-            "region": "default",
-            "sqlExpression": "",
-            "statistic": "Average"
-          }
-        ],
-        "title": "Response Time",
-        "type": "timeseries"
-      },
-      {
-        "datasource": {
-          "type": "cloudwatch",
-          "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-        },
-        "fieldConfig": {
-          "defaults": {
-            "color": {
-              "mode": "palette-classic"
-            },
-            "custom": {
-              "axisCenteredZero": false,
-              "axisColorMode": "text",
-              "axisLabel": "",
-              "axisPlacement": "auto",
-              "barAlignment": 0,
-              "drawStyle": "line",
-              "fillOpacity": 0,
-              "gradientMode": "none",
-              "hideFrom": {
-                "legend": false,
-                "tooltip": false,
-                "viz": false
-              },
-              "lineInterpolation": "linear",
-              "lineWidth": 1,
-              "pointSize": 5,
-              "scaleDistribution": {
-                "type": "linear"
-              },
-              "showPoints": "auto",
-              "spanNulls": false,
-              "stacking": {
-                "group": "A",
-                "mode": "none"
-              },
-              "thresholdsStyle": {
-                "mode": "off"
-              }
-            },
-            "mappings": [],
-            "thresholds": {
-              "mode": "absolute",
-              "steps": [
-                {
-                  "color": "green",
-                  "value": null
-                },
-                {
-                  "color": "red",
-                  "value": 80
-                }
-              ]
-            },
-            "unit": "none"
-          },
-          "overrides": []
-        },
-        "gridPos": {
-          "h": 7,
-          "w": 6,
-          "x": 6,
-          "y": 14
-        },
-        "id": 5,
-        "options": {
-          "legend": {
-            "calcs": [],
-            "displayMode": "list",
-            "placement": "bottom",
-            "showLegend": false
-          },
-          "tooltip": {
-            "mode": "single",
-            "sort": "none"
-          }
-        },
-        "targets": [
-          {
-            "datasource": {
-              "type": "cloudwatch",
-              "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-            },
-            "dimensions": {
-              "LoadBalancer": "$lb"
-            },
-            "expression": "",
-            "id": "",
-            "label": "",
-            "logGroups": [],
-            "matchExact": true,
-            "metricEditorMode": 0,
-            "metricName": "RequestCount",
-            "metricQueryType": 0,
-            "namespace": "AWS/ApplicationELB",
-            "period": "",
-            "queryMode": "Metrics",
-            "refId": "A",
-            "region": "default",
-            "sqlExpression": "",
-            "statistic": "Sum"
-          }
-        ],
-        "title": "Request Count",
-        "type": "timeseries"
-      },
-      {
-        "datasource": {
-          "type": "cloudwatch",
-          "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-        },
-        "fieldConfig": {
-          "defaults": {
-            "color": {
-              "mode": "palette-classic"
-            },
-            "custom": {
-              "axisCenteredZero": false,
-              "axisColorMode": "text",
-              "axisLabel": "",
-              "axisPlacement": "auto",
-              "barAlignment": 0,
-              "drawStyle": "line",
-              "fillOpacity": 0,
-              "gradientMode": "none",
-              "hideFrom": {
-                "legend": false,
-                "tooltip": false,
-                "viz": false
-              },
-              "lineInterpolation": "linear",
-              "lineWidth": 1,
-              "pointSize": 5,
-              "scaleDistribution": {
-                "type": "linear"
-              },
-              "showPoints": "auto",
-              "spanNulls": false,
-              "stacking": {
-                "group": "A",
-                "mode": "none"
-              },
-              "thresholdsStyle": {
-                "mode": "off"
-              }
-            },
-            "mappings": [],
-            "thresholds": {
-              "mode": "absolute",
-              "steps": [
-                {
-                  "color": "green",
-                  "value": null
-                },
-                {
-                  "color": "red",
-                  "value": 80
-                }
-              ]
-            }
-          },
-          "overrides": [
-            {
-              "matcher": {
-                "id": "byName",
-                "options": "5XX"
-              },
-              "properties": [
-                {
-                  "id": "color",
-                  "value": {
-                    "fixedColor": "red",
-                    "mode": "fixed"
-                  }
-                }
-              ]
-            },
-            {
-              "matcher": {
-                "id": "byName",
-                "options": "2XX"
-              },
-              "properties": [
-                {
-                  "id": "color",
-                  "value": {
-                    "fixedColor": "green",
-                    "mode": "fixed"
-                  }
-                }
-              ]
-            }
-          ]
-        },
-        "gridPos": {
-          "h": 7,
-          "w": 6,
-          "x": 12,
-          "y": 14
-        },
-        "id": 6,
-        "options": {
-          "legend": {
-            "calcs": [],
-            "displayMode": "list",
-            "placement": "bottom",
-            "showLegend": true
-          },
-          "tooltip": {
-            "mode": "single",
-            "sort": "none"
-          }
-        },
-        "targets": [
-          {
-            "datasource": {
-              "type": "cloudwatch",
-              "uid": "b66e3d56-fb4e-49d6-9625-5d06ee69010b"
-            },
-            "dimensions": {
-              "LoadBalancer": "$lb"
-            },
-            "expression": "",
-            "hide": false,
-            "id": "",
-            "label": "2XX",
-            "logGroups": [],
-            "matchExact": true,
-            "metricEditorMode": 0,
-            "metricName": "HTTPCode_Target_2XX_Count",
-            "metricQueryType": 0,
-            "namespace": "AWS/ApplicationELB",
-            "period": "",
-            "queryMode": "Metrics",
-            "refId": "C",
-            "region": "default",
-            "sqlExpressio

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a local Alloy-based Docker log scraper to the observability dev stack and introduces a custom Loki config so long-lived container log backlogs don’t cause ingestion failures.

Changes:

  • Enables the Alloy service in the local docker-compose.yml and wires it to Loki.
  • Adds alloy/config.alloy to discover Docker containers and ship stdout to Loki with the intended label schema.
  • Adds loki/config.yaml to relax old-sample rejection and raises local ingestion limits; updates README with the new components and label schema.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 4 comments.

File Description
packages/observability/loki/config.yaml Adds a local Loki configuration tuned for dev/backlog ingestion.
packages/observability/docker-compose.yml Mounts the custom Loki config and enables the Alloy log-scraper service.
packages/observability/alloy/config.alloy Implements Docker discovery, relabeling for env/service/realm, and an “older than 24h” drop stage.
packages/observability/README.md Documents the new local stack components and the “load-bearing” label schema.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread packages/observability/alloy/config.alloy
Comment thread packages/observability/alloy/config.alloy Outdated
Comment thread packages/observability/docker-compose.yml Outdated
Comment thread packages/observability/README.md
- Drop rule now matches the Compose service label exactly
  (`com.docker.compose.service`) so unrelated containers whose names
  merely contain grafana / loki / alloy (e.g. `loki-migrator`) don't
  get silently filtered out.
- `realm` relabel is gated on `(.+)` so it's only set when the
  container actually exposes `boxel.realm`. Otherwise Loki streams
  carried an empty-string `realm` label, which made `realm!=""`
  behave differently from "label absent" in queries.
- Bind the Alloy debug UI port to 127.0.0.1 so it isn't reachable
  from the LAN; add a warning comment that mounting the Docker
  socket is local-dev-only.
- README now calls out the 24h Alloy drop filter so readers don't
  expect months of historical container stdout to appear in Loki.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@lukemelia
lukemelia requested review from a team and backspace April 28, 2026 23:19
@lukemelia
lukemelia merged commit 937b6de into main Apr 29, 2026
24 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants