Files
AWatch-rus/docs/DAILY_MAINTENANCE_RU.md

13 KiB
Raw Permalink Blame History

Ежедневное обслуживание 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:

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 сформирован и проверяется:

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 команды из репозитория:

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:

./scripts/run_full_validation.sh --profile standard

Критерий: нет новых hard-fail проверок. Warning допустим только при известном и задокументированном operational constraint.

3.1. Primary recovery guard

Проверить, что автоматический recovery первичного AW API включен и не скрывает новые incident:

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

Проверить отсутствие неконтролируемого роста:

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-конфигурации:

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:

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

/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:

/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

Ты анализируешь 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:

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:

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.

Связанные документы