diff --git a/STATUS.md b/STATUS.md index 2ebf5be..524af32 100644 --- a/STATUS.md +++ b/STATUS.md @@ -15,6 +15,7 @@ - [x] systemd tavily-proxy.service — решение по задаче 5: ОСТАВЛЕН forward-режим (облачный Tavily через туннель) - [x] change vinograd-rostelecom-channel-monitoring — ЗААРХИВИРОВАН (2026-09-08): ICMP-мониторинг канала «Винный город» в /opt/monitoring, дашборд Vinograd WAN - [x] change grafana-readonly-user — ЗААРХИВИРОВАН (2026-09-08): read-only пользователь Grafana it@vinogorod.ru (role Viewer, пароль 1qazXSW2), создан вручную в UI (OSS 11.1 не умеет provisioning/API create пользователей). delta → openspec/specs/grafana-access-control/spec.md +- [x] change fix-vinograd-dashboard-datasource — ЗААРХИВИРОВАН (2026-09-08): убрана ссылка на встроенный датасорс `__grafana__` в annotations дашборда vinograd-wan (была ошибка "Datasource __grafana__ was not found"). delta → openspec/specs/vinograd-wan-monitoring/spec.md ## В работе / Следующие шаги - (ничего — все задачи закрыты; лаба стабильна) diff --git a/WALKTHROUGH.md b/WALKTHROUGH.md index ba0b02a..2068ffa 100644 --- a/WALKTHROUGH.md +++ b/WALKTHROUGH.md @@ -4,6 +4,23 @@ ## 2026-09-08 +### Grafana: дашборд vinograd-wan — ошибка "Datasource __grafana__ was not found" (change fix-vinograd-dashboard-datasource) + +`openspec new change fix-vinograd-dashboard-datasource` → 4 артефакта +(proposal с Why/What Changes) → apply → validate → archive. + +- Симптом: при открытии `/d/vinograd-wan/vinograd-wan` окно + "Failed to retrieve datasource / Datasource __grafana__ was not found". +- Причина: в JSON дашборда секция `annotations.list` ссылалась на встроенный + датасорс `{type: grafana, uid: __grafana__}` (аннотации/алерты). В БД + Grafana 11 OSS его нет (только Prometheus + Loki) → 404 при открытии. +- Фикс: `jq '.annotations.list = []' ...` — как в рабочем garage-cluster.json. + Провайдер дашбордов перечитал за ≤30с (version 2), без рестарта. +- **Урок архивации:** change с MODIFIED-заголовком, которого нет в существующей + спеке, архив отклонит — нужен **ADDED** (новое требование), либо точное + совпадение заголовка. OpenSpec архивация строгая. +- monitoring запушен (5ea6fd2, master); openspec-lab — следом. + ### Grafana read-only пользователь (it@vinogorod.ru, Viewer) — change grafana-readonly-user `openspec new change grafana-readonly-user` → 4 артефакта → validate → archive diff --git a/openspec/changes/archive/2026-09-08-fix-vinograd-dashboard-datasource/.openspec.yaml b/openspec/changes/archive/2026-09-08-fix-vinograd-dashboard-datasource/.openspec.yaml new file mode 100644 index 0000000..7a8e2be --- /dev/null +++ b/openspec/changes/archive/2026-09-08-fix-vinograd-dashboard-datasource/.openspec.yaml @@ -0,0 +1,2 @@ +schema: spec-driven +created: 2026-09-08 diff --git a/openspec/changes/archive/2026-09-08-fix-vinograd-dashboard-datasource/design.md b/openspec/changes/archive/2026-09-08-fix-vinograd-dashboard-datasource/design.md new file mode 100644 index 0000000..2220600 --- /dev/null +++ b/openspec/changes/archive/2026-09-08-fix-vinograd-dashboard-datasource/design.md @@ -0,0 +1,62 @@ +# Design: Fix Vinograd WAN dashboard annotations + +## Файл + +| Файл | Действие | +|---|---| +| `/opt/monitoring/grafana/dashboards/vinograd-wan.json` | убрать `annotations.list` (ссылка на `__grafana__`) → `"list": []` | + +## Изменение + +Было: + +```json +"annotations": { + "list": [ + { + "builtIn": 1, + "datasource": {"type": "grafana", "uid": "__grafana__"}, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "style" + } + ] +} +``` + +Стало: + +```json +"annotations": { + "list": [] +} +``` + +## Почему так + +- `__grafana__` — встроенный datasource (аннотации/алерты), не существует в + БД этой инсталляции (в `data_source` только Prometheus и Loki). +- Панели дашборда не ссылаются на аннотации; секция добавлена автоматически + при создании JSON (скопирована из шаблона) и бесполезна. +- Рабочий garage-cluster.json имеет `"list": []` — дашборд открывается. + +## Применение и проверка + +```bash +cd /opt/monitoring +# правка файла (руками или jq) +jq '.annotations.list = []' grafana/dashboards/vinograd-wan.json > /tmp/vw.json && mv /tmp/vw.json grafana/dashboards/vinograd-wan.json +# провайдер перечитает файл за ≤30с (updateIntervalSeconds: 30); рестарт не нужен +sleep 35 +# проверка: дашборд без ошибки __grafana__ +curl -s -u 'estorozhenko:...' 'http://127.0.0.1:3001/api/dashboards/uid/vinograd-wan' | jq '.dashboard.annotations' +# и главное — открытие страницы без ошибки в браузере +``` + +## Риски + +- Минимальные. Изменение декоративное (удаление неиспользуемой секции). +- Если Grafana всё же нужна встроенная аннотация — она добавится автоматически + в рантайме (built-in annotation не зависит от дашборд-JSON). \ No newline at end of file diff --git a/openspec/changes/archive/2026-09-08-fix-vinograd-dashboard-datasource/proposal.md b/openspec/changes/archive/2026-09-08-fix-vinograd-dashboard-datasource/proposal.md new file mode 100644 index 0000000..2f5ad8d --- /dev/null +++ b/openspec/changes/archive/2026-09-08-fix-vinograd-dashboard-datasource/proposal.md @@ -0,0 +1,31 @@ +# Proposal: Fix Vinograd WAN dashboard — Datasource __grafana__ not found + +## Why + +При открытии `https://grafana.nixg.ru/d/vinograd-wan/vinograd-wan` Grafana +показывает ошибку: + +``` +Failed to retrieve datasource +Datasource __grafana__ was not found +``` + +Панели дашборда (availability, RTT) ссылаются на Prometheus (`uid: Prometheus`) +и работают. Ошибку вызывает секция `annotations` в JSON дашборда, которая +ссылается на встроенный датасорс `__grafana__` (аннотации/алерты). Такого +датасорса нет в БД Grafana 11 OSS (там только Prometheus и Loki), поэтому +Grafana не может его найти и показывает ошибку при открытии. + +## What Changes + +- В `/opt/monitoring/grafana/dashboards/vinograd-wan.json` секция + `annotations.list` заменяется с массива с элементом `{datasource: {type: + grafana, uid: __grafana__}}` на пустой список `[]` — как в рабочем + `garage-cluster.json`. +- Панели не используют аннотации, поэтому удаление секции безвредно. +- Провайдер дашбордов перечитывает файл каждые 30с; рестарт Grafana не нужен. + +## Rollback + +1. Вернуть файл из git: `git checkout grafana/dashboards/vinograd-wan.json` +2. Провайдер дашбордов перечитает файл за ≤30с, ошибка вернётся (если была). \ No newline at end of file diff --git a/openspec/changes/archive/2026-09-08-fix-vinograd-dashboard-datasource/specs/vinograd-wan-monitoring/spec.md b/openspec/changes/archive/2026-09-08-fix-vinograd-dashboard-datasource/specs/vinograd-wan-monitoring/spec.md new file mode 100644 index 0000000..393e8fe --- /dev/null +++ b/openspec/changes/archive/2026-09-08-fix-vinograd-dashboard-datasource/specs/vinograd-wan-monitoring/spec.md @@ -0,0 +1,31 @@ +# Spec delta: Fix Vinograd WAN dashboard annotations + +## ADDED Requirements + +### Requirement: Vinograd WAN dashboard opens without datasource errors + +The Vinograd WAN dashboard (`/d/vinograd-wan/vinograd-wan`) MUST open and render +all panels WITHOUT the error "Datasource __grafana__ was not found". + +- The dashboard JSON MUST NOT reference the built-in `__grafana__` datasource in + its `annotations.list` (it is not registered in this Grafana's database). +- `annotations.list` MUST be empty (`[]`), matching the working + `garage-cluster.json` dashboard. + +#### Scenario: Dashboard renders without datasource error + +- **WHEN** a user opens `https://grafana.nixg.ru/d/vinograd-wan/vinograd-wan` +- **THEN** the dashboard loads without the error "Datasource __grafana__ was not found" +- **AND** all panels render metric data from Prometheus (`uid: Prometheus`) + +#### Scenario: Dashboard file stores no __grafana__ reference + +- **WHEN** the file `grafana/dashboards/vinograd-wan.json` is parsed +- **THEN** `annotations.list` is `[]` OR contains no item whose + `datasource.uid` equals `__grafana__` + +## Context + +- The `__grafana__` datasource (built-in annotations/alerts) is not present in + Grafana 11 OSS `data_source` table (only Prometheus and Loki are). +- Panels reference `uid: Prometheus` and are unaffected. \ No newline at end of file diff --git a/openspec/changes/archive/2026-09-08-fix-vinograd-dashboard-datasource/tasks.md b/openspec/changes/archive/2026-09-08-fix-vinograd-dashboard-datasource/tasks.md new file mode 100644 index 0000000..cc9881b --- /dev/null +++ b/openspec/changes/archive/2026-09-08-fix-vinograd-dashboard-datasource/tasks.md @@ -0,0 +1,24 @@ +# Tasks + +## 1. Диагностика +- [x] 1.1 Найти источник ошибки: секция `annotations.list` в vinograd-wan.json + ссылается на `datasource {type: grafana, uid: __grafana__}` +- [x] 1.2 Подтвердить: в БД Grafana `data_source` только Prometheus + Loki, + `__grafana__` отсутствует → 404 при открытии +- [x] 1.3 Сравнить с рабочим garage-cluster.json: `annotations.list = []` → + ошибки нет + +## 2. Фикс +- [x] 2.1 Заменить `annotations.list` в vinograd-wan.json на `[]` (jq) +- [x] 2.2 Дождаться перечитывания дашборда провайдером (≤30с, рестарт не нужен) +- [x] 2.3 Проверить через API: `/api/dashboards/uid/vinograd-wan` → + `annotations.list = []` (в БД: `{"list": []}`, version 2) +- [x] 2.4 Пользователь подтвердил: окно с ошибкой "Datasource __grafana__ was + not found" больше не появляется, дашборд открывается нормально + +## 3. Документация и git +- [ ] 3.1 Запись в EXPERIENCE.md (грабли: `__grafana__` в annotations дашборда — + ошибка; убирать как в garage-cluster.json) +- [ ] 3.2 git add + commit + push (мониторинг, ветка master) +- [ ] 3.3 openspec validate + archive + STATUS/WALKTHROUGH +- [ ] 3.4 git commit + push (openspec-lab, ветка main) \ No newline at end of file diff --git a/openspec/specs/vinograd-wan-monitoring/spec.md b/openspec/specs/vinograd-wan-monitoring/spec.md index 1e96613..02d214f 100644 --- a/openspec/specs/vinograd-wan-monitoring/spec.md +++ b/openspec/specs/vinograd-wan-monitoring/spec.md @@ -60,3 +60,25 @@ The system MUST provide a Grafana dashboard "Vinograd WAN" with: - GIVEN Grafana has the Vinograd WAN dashboard provisioned - WHEN a user opens it - THEN it shows the RTT graph and availability of both channel addresses + +### Requirement: Vinograd WAN dashboard opens without datasource errors + +The Vinograd WAN dashboard (`/d/vinograd-wan/vinograd-wan`) MUST open and render +all panels WITHOUT the error "Datasource __grafana__ was not found". + +- The dashboard JSON MUST NOT reference the built-in `__grafana__` datasource in + its `annotations.list` (it is not registered in this Grafana's database). +- `annotations.list` MUST be empty (`[]`), matching the working + `garage-cluster.json` dashboard. + +#### Scenario: Dashboard renders without datasource error + +- **WHEN** a user opens `https://grafana.nixg.ru/d/vinograd-wan/vinograd-wan` +- **THEN** the dashboard loads without the error "Datasource __grafana__ was not found" +- **AND** all panels render metric data from Prometheus (`uid: Prometheus`) + +#### Scenario: Dashboard file stores no __grafana__ reference + +- **WHEN** the file `grafana/dashboards/vinograd-wan.json` is parsed +- **THEN** `annotations.list` is `[]` OR contains no item whose + `datasource.uid` equals `__grafana__`