Error Rate Spike (critical) - fires when error rate > 5% over 5 minutes
Container Silence: mvp-backend (warning) - fires when no logs for 5 minutes
Container Silence: mvp-postgres (warning) - fires when no logs for 5 minutes
Container Silence: mvp-redis (warning) - fires when no logs for 5 minutes
5xx Response Spike (critical) - fires when > 10 5xx responses in 5 minutes
Contact Point (config/grafana/alerting/contact-points.yml): Webhook placeholder for future email/Slack integration
Notification Policy (config/grafana/alerting/notification-policies.yml): Groups alerts by alertname and severity
Docker Compose: Added alerting provisioning volume mount to mvp-grafana service
Loki Datasource: Added stable uid: loki for alert rule references
Documentation: Updated docs/LOGGING.md with dashboard descriptions, alerting rules table, and expanded LogQL query reference
Files Changed
File
Action
config/grafana/alerting/alert-rules.yml
NEW
config/grafana/alerting/contact-points.yml
NEW
config/grafana/alerting/notification-policies.yml
NEW
config/grafana/datasources/loki.yml
MODIFIED - added uid
docker-compose.yml
MODIFIED - alerting volume mount
docs/LOGGING.md
MODIFIED - dashboards, alerting, LogQL reference
Note
Alert files placed in config/grafana/alerting/ (not config/grafana/provisioning/alerting/) to avoid conflict with the existing dashboard provisioning mount that maps config/grafana/provisioning/ to /etc/grafana/provisioning/dashboards/.
Verdict: PASS | Next: Quality review
## Milestone: Grafana Alerting Rules and Documentation
**Phase**: Execution | **Agent**: Platform Agent | **Status**: PASS
### Completed
- **Alert Rules** (`config/grafana/alerting/alert-rules.yml`):
- Error Rate Spike (critical) - fires when error rate > 5% over 5 minutes
- Container Silence: mvp-backend (warning) - fires when no logs for 5 minutes
- Container Silence: mvp-postgres (warning) - fires when no logs for 5 minutes
- Container Silence: mvp-redis (warning) - fires when no logs for 5 minutes
- 5xx Response Spike (critical) - fires when > 10 5xx responses in 5 minutes
- **Contact Point** (`config/grafana/alerting/contact-points.yml`): Webhook placeholder for future email/Slack integration
- **Notification Policy** (`config/grafana/alerting/notification-policies.yml`): Groups alerts by alertname and severity
- **Docker Compose**: Added alerting provisioning volume mount to mvp-grafana service
- **Loki Datasource**: Added stable `uid: loki` for alert rule references
- **Documentation**: Updated `docs/LOGGING.md` with dashboard descriptions, alerting rules table, and expanded LogQL query reference
### Files Changed
| File | Action |
|------|--------|
| `config/grafana/alerting/alert-rules.yml` | NEW |
| `config/grafana/alerting/contact-points.yml` | NEW |
| `config/grafana/alerting/notification-policies.yml` | NEW |
| `config/grafana/datasources/loki.yml` | MODIFIED - added uid |
| `docker-compose.yml` | MODIFIED - alerting volume mount |
| `docs/LOGGING.md` | MODIFIED - dashboards, alerting, LogQL reference |
### Note
Alert files placed in `config/grafana/alerting/` (not `config/grafana/provisioning/alerting/`) to avoid conflict with the existing dashboard provisioning mount that maps `config/grafana/provisioning/` to `/etc/grafana/provisioning/dashboards/`.
*Verdict*: PASS | *Next*: Quality review
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Parent Issue
Relates to #105
Summary
Configure Grafana Unified Alerting with file-based provisioned alert rules and update documentation.
Scope
Alerting Rules (3 rules)
Create
config/grafana/provisioning/alerting/with alert rule YAML files:Error Rate Spike - Alert when error rate exceeds 5% over 5-minute window
sum(count_over_time({container=~"mvp-.*"} | json | level="error" [5m])) / sum(count_over_time({container=~"mvp-.*"}[5m])) * 100 > 5Container Silence - Alert when any container stops producing logs for 5 minutes
count_over_time({container="mvp-backend"}[5m]) == 0(one per critical container)5xx Spike - Alert when 5xx rate exceeds threshold
sum(count_over_time({container="mvp-backend"} | json | msg="Request processed" | status >= 500 [5m])) > 10Contact Point
Configure a default contact point (Grafana UI notification + webhook placeholder for future email/Slack integration).
Documentation
Update
docs/LOGGING.mdwith:https://logs.motovaultpro.comFiles Changed
config/grafana/provisioning/alerting/alert-rules.yml(NEW)config/grafana/provisioning/alerting/contact-points.yml(NEW)config/grafana/provisioning/alerting/notification-policies.yml(NEW)docker-compose.yml(MODIFY - mount alerting provisioning directory)docs/LOGGING.md(MODIFY - add dashboards section)Acceptance Criteria
Milestone: Grafana Alerting Rules and Documentation
Phase: Execution | Agent: Platform Agent | Status: PASS
Completed
config/grafana/alerting/alert-rules.yml):config/grafana/alerting/contact-points.yml): Webhook placeholder for future email/Slack integrationconfig/grafana/alerting/notification-policies.yml): Groups alerts by alertname and severityuid: lokifor alert rule referencesdocs/LOGGING.mdwith dashboard descriptions, alerting rules table, and expanded LogQL query referenceFiles Changed
config/grafana/alerting/alert-rules.ymlconfig/grafana/alerting/contact-points.ymlconfig/grafana/alerting/notification-policies.ymlconfig/grafana/datasources/loki.ymldocker-compose.ymldocs/LOGGING.mdNote
Alert files placed in
config/grafana/alerting/(notconfig/grafana/provisioning/alerting/) to avoid conflict with the existing dashboard provisioning mount that mapsconfig/grafana/provisioning/to/etc/grafana/provisioning/dashboards/.Verdict: PASS | Next: Quality review