328 lines
13 KiB
Markdown
328 lines
13 KiB
Markdown
# Ежедневное обслуживание AWatch-rus
|
||
|
||
Дата актуализации: 2026-07-03
|
||
|
||
Документ описывает ежедневный операторский цикл обслуживания AWatch-rus /
|
||
DetMir и безопасное использование Pollinations AI как вспомогательного
|
||
аналитика evidence-артефактов. Pollinations не является production runtime
|
||
dependency, не принимает решения автоматически и не имеет прямого доступа к
|
||
customer contour.
|
||
|
||
## Цели
|
||
|
||
- Подтвердить, что сервисы отвечают и не находятся в скрытой деградации.
|
||
- Проверить свежесть данных, состояние очередей, timers, retention и readiness
|
||
evidence.
|
||
- Сформировать короткий дневной maintenance summary.
|
||
- Использовать Pollinations только для сжатия и первичного анализа локальных
|
||
JSON/Markdown evidence без секретов.
|
||
|
||
## Guardrails
|
||
|
||
- Не включать heavy DLP, Loki или always-on Velociraptor в рамках ежедневного
|
||
обслуживания.
|
||
- DLP runtime для DetMir production считать нормальным в light/disabled profile,
|
||
если оператор отдельно не принял решение о включении.
|
||
- Не удалять ClickHouse, Grafana, DLP evidence, Hayabusa archives, Windows
|
||
queues, release evidence и diagnostic bundles вручную без отдельного change.
|
||
- Pollinations failure не является отказом AWatch-rus. Если AI недоступен,
|
||
ежедневное обслуживание продолжается по обычному runbook.
|
||
- Не отправлять в Pollinations secrets, private env files, bearer tokens,
|
||
пароли, raw customer evidence, user identifiers, скриншоты с ПДн или полные
|
||
журналы production.
|
||
|
||
## Ежедневный цикл
|
||
|
||
### 1. Быстрый статус сервисов
|
||
|
||
Проверить локальный health/readiness и failed units:
|
||
|
||
```bash
|
||
curl -fsS http://127.0.0.1:5600/api/0/info >/dev/null
|
||
curl -fsS http://127.0.0.1:5610/healthz >/dev/null
|
||
systemctl --failed --no-pager
|
||
systemctl list-timers \
|
||
aw-prune-local-state.timer \
|
||
aw-db-maintenance.timer \
|
||
aw-db-vacuum.timer \
|
||
detmir-readiness.timer
|
||
```
|
||
|
||
Критерий: ActivityWatch и Worktime API отвечают, нет неожиданных failed units,
|
||
ежедневные timers присутствуют в расписании.
|
||
|
||
### 2. Readiness bundle
|
||
|
||
Проверить, что ежедневный bundle сформирован и проверяется:
|
||
|
||
```bash
|
||
cd /var/lib/activitywatch/health/readiness-bundle
|
||
sha256sum -c sha256sums.txt
|
||
openssl dgst -sha256 -verify public-key.pem \
|
||
-signature sha256sums.txt.sig sha256sums.txt
|
||
jq -r '.status // .overall_status // empty' detmir-readiness-status.json
|
||
```
|
||
|
||
Критерий: checksum/signature проходят, статус не `FAIL`, дата bundle относится
|
||
к текущему maintenance window.
|
||
|
||
### 3. Свежесть telemetry и reports
|
||
|
||
Проверить штатные smoke/validation команды из репозитория:
|
||
|
||
```bash
|
||
cd /mnt/usb_hdd2/Projects/ActivityWatch-Russian
|
||
node scripts/operational-maturity-check.mjs --json
|
||
node scripts/pilot-validation-smoke.mjs
|
||
node scripts/deployment-readiness-smoke.mjs
|
||
```
|
||
|
||
Если включён автономный validation orchestrator, использовать его как единый
|
||
источник daily evidence:
|
||
|
||
```bash
|
||
./scripts/run_full_validation.sh --profile standard
|
||
```
|
||
|
||
Критерий: нет новых hard-fail проверок. Warning допустим только при известном
|
||
и задокументированном operational constraint.
|
||
|
||
### 3.1. Primary recovery guard
|
||
|
||
Проверить, что автоматический recovery первичного AW API включен и не скрывает
|
||
новые incident:
|
||
|
||
```bash
|
||
systemctl is-active detmir-aw-primary-recovery.timer
|
||
systemctl status detmir-aw-primary-recovery.timer --no-pager
|
||
sudo /usr/local/bin/detmir-aw-primary-recovery --check-only
|
||
sudo jq . /var/lib/detmir-aw-primary-recovery/latest.json 2>/dev/null || true
|
||
```
|
||
|
||
Критерий: timer активен, `--check-only` возвращает `status=ok`, новые incident
|
||
не имеют `outcome=failed`. Если latest incident отсутствует, это нормально для
|
||
контура, где recovery еще ни разу не требовался.
|
||
|
||
### 4. Очереди, backlog и storage growth
|
||
|
||
Проверить отсутствие неконтролируемого роста:
|
||
|
||
```bash
|
||
du -sh /var/lib/activitywatch /var/log/activitywatch 2>/dev/null || true
|
||
docker system df 2>/dev/null || true
|
||
docker exec aw-rus-1c-clickhouse clickhouse-client --query \
|
||
"SELECT database, table, formatReadableSize(sum(bytes_on_disk)) AS size FROM system.parts WHERE active GROUP BY database, table ORDER BY sum(bytes_on_disk) DESC" \
|
||
2>/dev/null || true
|
||
```
|
||
|
||
Для Windows queues не выполнять ручную очистку. Если backlog растёт, сначала
|
||
проверить доступность AW server, scheduled tasks и upload logs.
|
||
|
||
### 5. Retention safety
|
||
|
||
Проверить dry-run cleanup, если есть подозрение на рост диска или после
|
||
изменения retention-конфигурации:
|
||
|
||
```bash
|
||
sudo AW_DATA_DIR=/var/lib/activitywatch \
|
||
AW_WORKTIME_REPORT_DISK_CACHE_DIR=/var/lib/activitywatch/worktime-report-cache \
|
||
AW_WORKTIME_REPORT_DISK_STALE_TTL_SECONDS=86400 \
|
||
/usr/local/bin/aw-prune-local-state-rust --json
|
||
```
|
||
|
||
Apply не является ежедневной обязательной операцией. Apply выполнять только
|
||
после просмотра planned items и подтверждения, что cleanup не затрагивает
|
||
configuration, dashboards, forensic/security evidence, release evidence или
|
||
Windows queues.
|
||
|
||
### 6. Короткая запись результата
|
||
|
||
Сохранить дневной summary в operator journal или internal change log:
|
||
|
||
```text
|
||
date:
|
||
operator:
|
||
health:
|
||
readiness_bundle:
|
||
telemetry_freshness:
|
||
storage:
|
||
retention:
|
||
new_alerts:
|
||
known_constraints:
|
||
actions_taken:
|
||
```
|
||
|
||
## Pollinations AI assistant
|
||
|
||
### Роль
|
||
|
||
Pollinations используется только как локально запускаемый помощник для:
|
||
|
||
- сжатия daily evidence в операторский summary;
|
||
- выделения новых failures/warnings из JSON/Markdown reports;
|
||
- подготовки списка вопросов для ручной проверки;
|
||
- сравнения текущего maintenance summary с предыдущим summary.
|
||
|
||
Pollinations не должен:
|
||
|
||
- запускать production commands самостоятельно;
|
||
- получать secrets/private env/raw logs;
|
||
- менять конфигурацию;
|
||
- принимать решение о cleanup apply, DLP enablement, restart или rollback.
|
||
|
||
### Проверка доступности CLI
|
||
|
||
```bash
|
||
/home/igor/.local/bin/polli-chat --help
|
||
/home/igor/.local/bin/polli-agent --help
|
||
/home/igor/.local/bin/polli-chat --max-tokens 16 'ping'
|
||
```
|
||
|
||
Для `polli-agent` использовать `--collection`, не `--db`:
|
||
|
||
```bash
|
||
/home/igor/.local/bin/polli-agent index \
|
||
--collection /tmp/awatch-maintenance-index \
|
||
/path/to/sanitized-evidence.md \
|
||
/path/to/sanitized-validation-report.json
|
||
|
||
/home/igor/.local/bin/polli-agent ask \
|
||
--collection /tmp/awatch-maintenance-index \
|
||
--context-only \
|
||
'Какие новые failures или warnings есть в сегодняшнем evidence?'
|
||
```
|
||
|
||
### Sanitization перед AI-анализом
|
||
|
||
Перед передачей в Pollinations оставить только технические поля:
|
||
|
||
- status/outcome;
|
||
- timestamps;
|
||
- Git SHA/version;
|
||
- service names;
|
||
- check names;
|
||
- counters;
|
||
- sizes;
|
||
- non-sensitive error class;
|
||
- documented operational constraints.
|
||
|
||
Удалить или заменить placeholders:
|
||
|
||
- usernames and user identifiers;
|
||
- tokens/passwords/API keys;
|
||
- Basic Auth credentials;
|
||
- private IP details, если summary планируется публиковать;
|
||
- screenshots and raw event payloads;
|
||
- full journal lines with command arguments.
|
||
|
||
### Prompt для daily summary
|
||
|
||
```text
|
||
Ты анализируешь sanitized AWatch-rus daily maintenance evidence.
|
||
Не придумывай факты. Не предлагай включать DLP/Loki/always-on Velociraptor.
|
||
Раздели вывод на:
|
||
1. OK
|
||
2. New warnings
|
||
3. New failures
|
||
4. Evidence gaps
|
||
5. Required operator actions
|
||
Если evidence недостаточно, напиши "не доказано".
|
||
```
|
||
|
||
### Fail-closed правило
|
||
|
||
Если Pollinations summary расходится с raw evidence, считать источником истины
|
||
raw evidence и runbook. AI-вывод можно использовать только как черновик для
|
||
операторского анализа.
|
||
|
||
## Журнал выполненного обслуживания
|
||
|
||
### 2026-07-03: production cleanup, collector guard и dependency hardening
|
||
|
||
Выполнено:
|
||
|
||
- очищены старые ActivityWatch SQLite backup files на AW server с сохранением
|
||
последних двух rollback-точек;
|
||
- `/` на AW server снижен с `85%` до `40%`, свободно `19G`;
|
||
- заменен Windows production binary
|
||
`C:\Program Files\AWatch-rus\windows\aw-windows-telemetry.exe`;
|
||
- заменен gateway/ClickHouse production binary
|
||
`/usr/local/bin/aw-1c-ingest-rust`;
|
||
- закрыт RustSec риск `quick-xml` через удаление `calamine` из
|
||
`aw-1c-ingest` и переход на прямое чтение XLSX через `zip` +
|
||
`quick-xml 0.41.0`;
|
||
- добавлен regression test на разбор registry XLSX листов `Лист2` и
|
||
`ОСНОВНОЙ`.
|
||
|
||
Production checksums:
|
||
|
||
| Binary | SHA256 |
|
||
|---|---|
|
||
| `aw-windows-telemetry.exe` | `A8F517AB636C8537413201B84EA6540CB198045F388FECE6C8D6810537FBDDF1` |
|
||
| `aw-1c-ingest-rust` | `e0c4e665ea8946ba9c243127a65fd69554cacdc4e3191ec798b8ca19acf89623` |
|
||
|
||
Rollback files:
|
||
|
||
- `C:\Program Files\AWatch-rus\windows\aw-windows-telemetry.exe.bak.20260702T202626Z`;
|
||
- `/usr/local/bin/aw-1c-ingest-rust.bak.20260702T211637Z`;
|
||
- `/usr/local/bin/aw-1c-ingest-rust.bak.20260702T212258Z`.
|
||
|
||
Post-change production evidence:
|
||
|
||
- `check-aw-full.sh`: `FRESH=8`, `STALE=0`, `DEAD=0`;
|
||
- `aw-rus-healthd`: `ok=True`;
|
||
- AW server `systemctl --failed`: `0 loaded units listed`;
|
||
- `pve-detmir systemctl --failed`: `0 loaded units listed`;
|
||
- `aw-1c-ingest.service`: `Result=success`, `ExecMainStatus=0`,
|
||
`files_loaded=8`, `rows_loaded=561`;
|
||
- ClickHouse container `aw-rus-1c-clickhouse`: `healthy`;
|
||
- gateway `/healthz`: `ok`.
|
||
|
||
Validation executed before documenting:
|
||
|
||
```bash
|
||
cargo fmt --all --check
|
||
cargo test --workspace --locked
|
||
cargo clippy --workspace --all-targets --all-features --locked -- -D warnings
|
||
cargo audit --no-fetch
|
||
cargo deny --manifest-path adk-rust/Cargo.toml check --config deny.toml --hide-inclusion-graph --show-stats
|
||
cargo metadata --locked --format-version 1
|
||
cargo tree --duplicates --locked
|
||
cargo machete --with-metadata
|
||
python3 scripts/public_secret_pattern_check.py
|
||
node scripts/operational-maturity-check.mjs --json
|
||
git diff --check
|
||
```
|
||
|
||
Cargo/RustSec network note: if direct `https://index.crates.io` is unavailable
|
||
from the laptop, use the local HTTP CONNECT proxy:
|
||
|
||
```bash
|
||
export HTTP_PROXY=http://127.0.0.1:10808
|
||
export HTTPS_PROXY=http://127.0.0.1:10808
|
||
export http_proxy=http://127.0.0.1:10808
|
||
export https_proxy=http://127.0.0.1:10808
|
||
unset ALL_PROXY all_proxy
|
||
```
|
||
|
||
## Эскалация
|
||
|
||
Эскалировать как production issue, если:
|
||
|
||
- `/healthz`, `/readyz` или Worktime reports не отвечают;
|
||
- readiness bundle не сформирован или не проходит checksum/signature;
|
||
- есть неожиданные failed systemd units;
|
||
- storage growth продолжается после штатного retention;
|
||
- Windows queues растут и upload не восстанавливается;
|
||
- DLP/security evidence удалено, повреждено или изменилось без change;
|
||
- Pollinations обнаружил warning, который подтверждается raw evidence.
|
||
|
||
## Связанные документы
|
||
|
||
- [Operations Runbook](OPERATIONS_RUNBOOK_RU.md)
|
||
- [Эксплуатационная проверка контура](OPERATIONS_VALIDATION_RUNBOOK_RU.md)
|
||
- [DetMir service reliability runbook](DETMIR_SERVICE_RELIABILITY_RUNBOOK_RU.md)
|
||
- [Retention and Cleanup Policy](RETENTION_POLICY_RU.md)
|
||
- [Production readiness](PRODUCTION_READINESS_RU.md)
|
||
- [Autonomous validation](AUTONOMOUS_VALIDATION_RU.md)
|