docs(proof): add operational evidence profile

This commit is contained in:
igor04091968
2026-06-03 10:16:50 +03:00
parent 1aa35b1f8e
commit bf4e38f35e
3 changed files with 247 additions and 0 deletions
+1
View File
@@ -53,6 +53,7 @@ runtime, OCR/content-analysis, 1C/AI/ETL integration и MCP/dev helpers. Эти
- [Установка для эксперта](INSTALL_FOR_EXPERT_RU.md)
- [Сценарий экспертной проверки](docs/EXPERT_TEST_SCENARIO_RU.md)
- [Release manifest 2026-06](docs/RELEASE_MANIFEST_2026-06.md)
- [Эксплуатационный профиль](docs/OPERATIONAL_PROOF_PROFILE_RU.md)
- [Сторонние компоненты](THIRD_PARTY_COMPONENTS.md)
- [Сторонние лицензии](THIRD_PARTY_LICENSES_RU.md)
- [Архитектура](docs/ARCHITECTURE_RU.md)
@@ -0,0 +1,98 @@
-- Operational proof snapshot for DetMir/AWatch-rus.
-- Output is aggregate-only: no users, company names, hosts, domains, paths,
-- evidence content, tokens, passwords or raw incident payloads.
SELECT
database,
count() AS tables_total,
sum(total_rows) AS rows_total,
formatReadableSize(sum(total_bytes)) AS compressed_size,
formatReadableSize(sum(total_bytes_uncompressed)) AS uncompressed_size
FROM system.tables
WHERE database = 'analytics_1c'
AND engine NOT IN ('View')
GROUP BY database;
SELECT
version() AS clickhouse_version,
uptime() AS uptime_seconds,
(SELECT count() FROM system.tables WHERE database = 'analytics_1c') AS analytics_objects,
formatReadableSize((
SELECT sum(total_bytes)
FROM system.tables
WHERE database = 'analytics_1c'
AND engine NOT IN ('View')
)) AS analytics_compressed_size;
SELECT
count() AS queries_logged,
min(event_time) AS first_query,
max(event_time) AS last_query,
quantile(0.5)(query_duration_ms) AS p50_ms,
quantile(0.95)(query_duration_ms) AS p95_ms,
max(query_duration_ms) AS max_ms
FROM system.query_log
WHERE event_time >= now() - INTERVAL 7 DAY
AND type = 'QueryFinish'
AND current_database = 'analytics_1c';
SELECT 'business_events' AS table_name, count() AS rows, min(ts) AS min_ts, max(ts) AS max_ts
FROM analytics_1c.business_events
UNION ALL
SELECT 'document_change_events', count(), min(ts), max(ts)
FROM analytics_1c.document_change_events
UNION ALL
SELECT 'detections', count(), min(ts), max(ts)
FROM analytics_1c.detections
UNION ALL
SELECT 'cases', count(), min(opened_at), max(opened_at)
FROM analytics_1c.cases
UNION ALL
SELECT 'company_health_signals', count(), min(generated_at), max(generated_at)
FROM analytics_1c.company_health_signals
UNION ALL
SELECT 'company_forecasts', count(), min(generated_at), max(generated_at)
FROM analytics_1c.company_forecasts
ORDER BY table_name;
SELECT
countDistinct(infobase) AS infobases,
countDistinct(user) AS users_in_reglog,
countDistinct(host) AS hosts_in_reglog,
count() AS reglog_events,
min(ts) AS min_ts,
max(ts) AS max_ts
FROM analytics_1c.reglog_events;
SELECT
countDistinct(infobase) AS infobases,
countDistinct(company_entity_key) AS company_entities,
countDistinct(document_id) AS documents,
countDistinct(user) AS users,
count() AS business_events,
min(ts) AS min_ts,
max(ts) AS max_ts
FROM analytics_1c.business_events;
SELECT
severity,
status,
count() AS detections
FROM analytics_1c.detections
GROUP BY severity, status
ORDER BY detections DESC;
SELECT
severity,
status,
count() AS cases
FROM analytics_1c.cases
GROUP BY severity, status
ORDER BY cases DESC;
SELECT
countDistinct(company_key) AS registry_companies,
countIf(key_contour = 1) AS key_contour_rows,
countDistinct(assignee_name) AS assignees,
max(ts) AS last_snapshot
FROM analytics_1c.company_registry;
+148
View File
@@ -0,0 +1,148 @@
# Эксплуатационный профиль DetMir
Документ фиксирует не функциональные обещания, а проверяемые эксплуатационные
показатели. Это материал для коммерческих презентаций, пилотов и экспертных
обсуждений: сколько данных система уже обрабатывает, как быстро отвечает
аналитический слой, какие классы инцидентов/сигналов фиксируются и где лежат
проверочные артефакты.
Снимок ниже обезличен: не раскрываются имена пользователей, компаний, хостов,
пути, домены, токены, evidence-файлы и содержимое инцидентов.
## Снимок 2026-06-03
Источник: агрегированные запросы ClickHouse `analytics_1c`, системный
`query_log`, runbook DetMir/AWatch-rus.
### Масштаб данных
| Метрика | Значение |
|---|---:|
| ClickHouse objects в `analytics_1c` | 46 |
| MergeTree tables | 24 |
| Всего строк в MergeTree tables | 764 098 |
| Compressed size | 12.04 MiB |
| Uncompressed size | 252.31 MiB |
| ClickHouse uptime на момент снимка | 782 640 секунд |
### Нагрузка ClickHouse за 7 дней
| Метрика | Значение |
|---|---:|
| Завершенных query в `analytics_1c` | 60 588 |
| P50 query duration | 12 ms |
| P95 query duration | 208.45 ms |
| Max query duration | 2 039 ms |
| Окно query log | 2026-05-27 07:12:59 -> 2026-06-03 07:12:42 |
Практический вывод: аналитический слой уже выдерживает десятки тысяч запросов
за неделю с медианной задержкой около десятков миллисекунд.
### Объем бизнес/аудит-событий
| Поток | Строк | Диапазон данных |
|---|---:|---|
| `reglog_events` | 8 070 | 2026-05-04 -> 2026-06-03 |
| `business_events` | 4 265 | 2026-05-22 -> 2026-06-03 |
| `document_change_events` | 8 280 | 2026-05-22 -> 2026-06-03 |
| `company_health_signals` | 156 189 | 2026-05-22 -> 2026-06-03 |
| `company_forecasts` | 194 228 | 2026-05-22 -> 2026-06-03 |
| `detections` | 162 966 | 2026-05-15 -> 2026-06-03 |
| `cases` | 162 966 | 2026-05-15 -> 2026-06-03 |
Важно для продаж: `detections` и `cases` в этом срезе являются
автоматически сформированным detection/case-oriented потоком. Для внешней
демонстрации их нужно называть именно так: `derived detections/cases`, а не
ручные подтвержденные инциденты.
### Покрытие источников
| Метрика | Значение |
|---|---:|
| Учетных информационных баз в `reglog_events` | 43 |
| Уникальных пользователей в `reglog_events` | 7 |
| Уникальных hosts в `reglog_events` | 1 |
| Учетных информационных баз в `business_events` | 43 |
| Company/entity keys в `business_events` | 44 |
| Уникальных документов в `business_events` | 1 838 |
| Пользователей в `business_events` | 7 |
| Registry companies | 47 |
| Registry assignees | 7 |
### Severity distribution
`detections`:
| Severity | Status | Count |
|---|---|---:|
| critical | open | 107 359 |
| high | open | 45 784 |
| medium | open | 9 823 |
`cases`:
| Severity | Status | Count |
|---|---|---:|
| critical | open | 107 359 |
| high | open | 45 784 |
| medium | open | 9 823 |
Коммерчески корректная формулировка:
> DetMir уже формирует case-oriented поток технических сигналов и
> расследовательских карточек по правилам, severity и статусам. Для пилота с
> заказчиком отдельно настраивается политика дедупликации, подтверждения и
> закрытия cases под регламент заказчика.
## ActivityWatch/AW-RUS эксплуатационные факты
Из runbook DetMir/AWatch-rus:
- зафиксирован и устранен uncontrolled growth в `aw-session-events`;
- основной источник роста давал около `6.9M` process-level rows;
- controlled trim удалил `6 906 190` шумных `process_start/process_stop`
событий;
- logon/session evidence сохранены: после trim осталось `174` logon-события;
- AW SQLite DB был уменьшен примерно с `6.8G` до `350M`;
- integrity check до и после maintenance: `ok`;
- DB health guard после стабилизации: DB около `352MiB`, WAL около `4MiB`,
recent process events `0`, latest event type `logon`, health OK.
Коммерческий вывод:
> Система не только собирает телеметрию, но и уже прошла реальную эксплуатационную
> стабилизацию: обнаружен источник взрывного роста событий, введены безопасный
> trim, SQLite integrity gate, DB health guard и weekly maintenance.
## Что показывать заказчику
Лучше работают не абстрактные описания, а 5 чисел:
1. Объем обработанных строк в ClickHouse.
2. Число источников/пользователей/информационных баз.
3. P50/P95 задержки аналитических запросов.
4. Число сформированных detections/cases по severity.
5. Uptime и история устраненных эксплуатационных проблем.
## Что не говорить без уточнения
- Не называть auto-generated `cases` подтвержденными ИБ-инцидентами без ручной
валидации.
- Не раскрывать реальные имена пользователей, компаний, hosts, paths, domains
и evidence.
- Не обещать сертифицированную DLP/SIEM/EDR/СЗИ.
- Не использовать абсолютные цифры без даты снимка и источника.
## Как обновлять снимок
Использовать SQL pack:
- `clickhouse-1c/ops/operational_proof_snapshot.sql`
Порядок:
1. Выполнить SQL pack на актуальном ClickHouse.
2. Сохранить агрегированный вывод в приватный customer/proof report.
3. Для публичного repo переносить только обезличенные агрегаты.
4. Если цифры используются в коммерческой презентации, рядом указывать дату
снимка и scope.