feat: Application Overview Grafana dashboard (#105) #107

Closed
opened 2026-02-06 14:01:37 +00:00 by egullickson · 1 comment
Owner

Parent Issue

Relates to #105

Summary

Create the Application Overview dashboard providing high-level health and log volume visibility across all 9 containers.

Scope

Create config/grafana/dashboards/application-overview.json with these panels:

  1. Container Log Volume Over Time - Timeseries panel showing log lines/interval per container
    • LogQL: sum by (container) (count_over_time({container=~"mvp-.*"}[1m]))
  2. Error Rate Across All Containers - Stat/gauge showing error count / total count
    • LogQL: sum(count_over_time({container=~"mvp-.*"} | json | level="error" [5m])) / sum(count_over_time({container=~"mvp-.*"}[5m])) * 100
  3. Log Level Distribution Per Container - Bar chart or table
    • LogQL: sum by (container, level) (count_over_time({container=~"mvp-.*"} | json [5m]))
  4. Container Health Status - Stat panels showing log activity presence per container
    • LogQL: count_over_time({container="mvp-backend"}[5m]) > 0 (one per container)
  5. Total Request Count Over Time - Timeseries
    • LogQL: count_over_time({container="mvp-backend"} | json | msg="Request processed" [1m])

Files Changed

  • config/grafana/dashboards/application-overview.json (NEW)

Acceptance Criteria

  • Dashboard auto-loads in Grafana on startup
  • All 9 containers visible in log volume panel
  • Error rate panel shows percentage
  • Container health shows green/red per container
  • Request count tracks over time
## Parent Issue Relates to #105 ## Summary Create the Application Overview dashboard providing high-level health and log volume visibility across all 9 containers. ## Scope Create `config/grafana/dashboards/application-overview.json` with these panels: 1. **Container Log Volume Over Time** - Timeseries panel showing log lines/interval per container - LogQL: `sum by (container) (count_over_time({container=~"mvp-.*"}[1m]))` 2. **Error Rate Across All Containers** - Stat/gauge showing error count / total count - LogQL: `sum(count_over_time({container=~"mvp-.*"} | json | level="error" [5m])) / sum(count_over_time({container=~"mvp-.*"}[5m])) * 100` 3. **Log Level Distribution Per Container** - Bar chart or table - LogQL: `sum by (container, level) (count_over_time({container=~"mvp-.*"} | json [5m]))` 4. **Container Health Status** - Stat panels showing log activity presence per container - LogQL: `count_over_time({container="mvp-backend"}[5m]) > 0` (one per container) 5. **Total Request Count Over Time** - Timeseries - LogQL: `count_over_time({container="mvp-backend"} | json | msg="Request processed" [1m])` ## Files Changed - `config/grafana/dashboards/application-overview.json` (NEW) ## Acceptance Criteria - [ ] Dashboard auto-loads in Grafana on startup - [ ] All 9 containers visible in log volume panel - [ ] Error rate panel shows percentage - [ ] Container health shows green/red per container - [ ] Request count tracks over time
egullickson added the
status
backlog
type
feature
labels 2026-02-06 14:02:16 +00:00
egullickson added this to the Sprint 2026-02-02 milestone 2026-02-06 14:02:21 +00:00
egullickson added
status
in-progress
and removed
status
backlog
labels 2026-02-06 14:21:56 +00:00
Author
Owner

Milestone: Application Overview Dashboard

Phase: Execution | Agent: Platform Agent | Status: PASS

Implementation

Created config/grafana/dashboards/application-overview.json with 5 panels:

Panel Type LogQL Summary
Container Log Volume Over Time timeseries sum by (container) (count_over_time({container=~"mvp-.*"}[1m]))
Error Rate Across All Containers stat (%) error count / total count * 100 over 5m
Log Level Distribution Per Container barchart sum by (container, level) over 5m
Container Health Status stat (9 targets) count_over_time per container, threshold green >= 1
Total Request Count Over Time timeseries msg="Request processed" from mvp-backend

Details

  • Datasource: Loki via template variable (portable)
  • Auto-refresh: 30s, default range: 1h
  • Schema version 39 (Grafana 12.4.0)
  • File-provisioned (editable: false)
  • Removed .gitkeep placeholder

Acceptance Criteria

  • Dashboard auto-loads in Grafana on startup (file provisioning)
  • All 9 containers visible in log volume panel (mvp-.* regex)
  • Error rate panel shows percentage (unit: percent)
  • Container health shows green/red per container (threshold-based background color)
  • Request count tracks over time (timeseries, 1m intervals)

Verdict: PASS | Next: QR post-implementation review

## Milestone: Application Overview Dashboard **Phase**: Execution | **Agent**: Platform Agent | **Status**: PASS ### Implementation Created `config/grafana/dashboards/application-overview.json` with 5 panels: | Panel | Type | LogQL Summary | |-------|------|---------------| | Container Log Volume Over Time | timeseries | `sum by (container) (count_over_time({container=~"mvp-.*"}[1m]))` | | Error Rate Across All Containers | stat (%) | error count / total count * 100 over 5m | | Log Level Distribution Per Container | barchart | `sum by (container, level)` over 5m | | Container Health Status | stat (9 targets) | `count_over_time` per container, threshold green >= 1 | | Total Request Count Over Time | timeseries | `msg="Request processed"` from mvp-backend | ### Details - Datasource: Loki via template variable (portable) - Auto-refresh: 30s, default range: 1h - Schema version 39 (Grafana 12.4.0) - File-provisioned (editable: false) - Removed `.gitkeep` placeholder ### Acceptance Criteria - [x] Dashboard auto-loads in Grafana on startup (file provisioning) - [x] All 9 containers visible in log volume panel (`mvp-.*` regex) - [x] Error rate panel shows percentage (unit: percent) - [x] Container health shows green/red per container (threshold-based background color) - [x] Request count tracks over time (timeseries, 1m intervals) *Verdict*: PASS | *Next*: QR post-implementation review
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: egullickson/motovaultpro#107