Observability
Файлы:
backend/src/observability/metrics.rs,observability/network_topology.rs
Prometheus-метрики для мониторинга P2P, паринга, vault, файловой синхронизации, S3, identity, устройств, Stronghold и сетевой топологии. Данные собираются VictoriaMetrics и визуализируются в Grafana.
Архитектура
Инициализация
rust
// backend/src/observability/metrics.rs
pub fn init_metrics_exporter(addr: SocketAddr) -> Result<()> {
PrometheusBuilder::new()
.with_http_listener(addr)
.install()?;
register_all_metrics();
Ok(())
}- Env var:
METRICS_PORT(если не задан — метрики отключены) - Endpoint:
GET http://0.0.0.0:{METRICS_PORT}/metrics - Тестовые порты: 9091–9095 (по одному на каждый headless backend)
Реестр метрик
P2P Network
| Метрика | Тип | Labels | Описание |
|---|---|---|---|
kontinuum_p2p_peers_active | Gauge | — | Текущее количество активных пиров |
kontinuum_p2p_peers_discovered_total | Counter | — | Всего обнаруженных пиров (кумулятивно) |
Pairing
| Метрика | Тип | Labels | Описание |
|---|---|---|---|
kontinuum_pairing_attempts_total | Counter | status: success / failure | Попытки паринга |
kontinuum_pairing_duration_ms | Histogram | — | Длительность паринга (мс) |
Vault
| Метрика | Тип | Labels | Описание |
|---|---|---|---|
kontinuum_vault_unlock_attempts_total | Counter | status: success / failure | Попытки разблокировки |
kontinuum_vault_unlock_duration_ms | Histogram | — | Длительность разблокировки (мс) |
File Sync
| Метрика | Тип | Labels | Описание |
|---|---|---|---|
kontinuum_file_sync_bytes_total | Counter | direction: upload / download | Байты синхронизации |
S3
| Метрика | Тип | Labels | Описание |
|---|---|---|---|
kontinuum_s3_operations_total | Counter | operation: list_buckets / create_bucket / upload / download / delete / list_objects; status: success / failure | Операции S3 |
Identity
| Метрика | Тип | Labels | Описание |
|---|---|---|---|
kontinuum_identity_operations_total | Counter | operation: create / update_name; status: success / failure | Операции с identity |
Device
| Метрика | Тип | Labels | Описание |
|---|---|---|---|
kontinuum_device_operations_total | Counter | operation: create / update_name; status: success / failure | Операции с устройствами |
kontinuum_devices_total | Gauge | — | Текущее количество устройств |
Stronghold
| Метрика | Тип | Labels | Описание |
|---|---|---|---|
kontinuum_stronghold_operations_total | Counter | operation: init / sign / load_key; status: success / failure | Операции Stronghold |
Network Topology (Grafana Node Graph)
| Метрика | Тип | Labels | Описание |
|---|---|---|---|
kontinuum_network_node | Gauge | id, title, subtitle, node_type, status | Узел в графе сети |
kontinuum_network_edge | Gauge | id, source, target, edge_type | Ребро в графе сети |
Recording API
Публичные функции для записи метрик:
| Функция | Вызывается из |
|---|---|
record_peer_discovered() | p2p/network.rs |
record_peer_connected() | p2p/network.rs |
record_peer_disconnected() | p2p/network.rs |
record_pairing_attempt(success: bool) | services/pairing.rs, pairing/manager.rs |
record_pairing_duration(duration_ms: u64) | services/pairing.rs, pairing/manager.rs |
record_vault_unlock_attempt(success: bool) | services/vault.rs, vault/manager.rs |
record_vault_unlock_duration(duration_ms: u64) | services/vault.rs, vault/manager.rs |
record_file_sync_bytes(bytes: u64, direction: &str) | services/sync_cmd.rs, services/s3.rs |
record_s3_operation(operation: &str, success: bool) | services/s3.rs |
record_identity_operation(operation: &str, success: bool) | services/identity.rs |
record_device_operation(operation: &str, success: bool) | services/devices.rs |
set_devices_total(count: usize) | services/devices.rs |
record_stronghold_operation(operation: &str, success: bool) | services/stronghold.rs, services/signing.rs |
update_network_node(...) | observability/network_topology.rs |
update_network_edge(...) | observability/network_topology.rs |
clear_network_topology() | observability/network_topology.rs |
Grafana дашборды
Дашборды в infra/shared/grafana/dashboards/:
| Дашборд | Описание |
|---|---|
overview.json | Quick stats: peers, devices, pairing |
p2p-network-health.json | P2P peer activity, connection trends |
backend-operations.json | Все operation counters и duration histograms |
vault-security.json | Vault unlock attempts и duration |
sync-performance.json | File sync bytes by direction |
spaces-sharing.json | Spaces и sharing operations |
network-topology.json | Network topology Node Graph |
logs.json | Loki log queries |
Доступ
- URL: http://localhost:3000
- Credentials: admin / admin
- Datasources: VictoriaMetrics (
:8428), Loki (:3100)
Примеры PromQL-запросов
promql
# Активные пиры
sum(kontinuum_p2p_peers_active)
# Rate паринг-попыток
sum(rate(kontinuum_pairing_attempts_total[5m]))
# 95-й перцентиль длительности паринга
histogram_quantile(0.95, kontinuum_pairing_duration_ms_bucket)
# Sync throughput по направлению
sum(rate(kontinuum_file_sync_bytes_total[5m])) by (direction)
# S3 ошибки
sum(rate(kontinuum_s3_operations_total{status="failure"}[5m])) by (operation)Loki-запросы
logql
{job="kontinuum-backend"}
{job="kontinuum-backend", instance="backend-1"}
{job="kontinuum-backend"} |= "ERROR"
{job="kontinuum-backend"} |= "PAIRING"Ссылки: Тестирование: Observability