Skip to content

Observability

Файлы: backend/src/observability/metrics.rs, observability/network_topology.rs

Prometheus-метрики для мониторинга P2P, паринга, vault, файловой синхронизации, S3, identity, устройств, Stronghold и сетевой топологии. Данные собираются VictoriaMetrics и визуализируются в Grafana.

Архитектура

plantuml Diagram

Инициализация

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_activeGaugeТекущее количество активных пиров
kontinuum_p2p_peers_discovered_totalCounterВсего обнаруженных пиров (кумулятивно)

Pairing

МетрикаТипLabelsОписание
kontinuum_pairing_attempts_totalCounterstatus: success / failureПопытки паринга
kontinuum_pairing_duration_msHistogramДлительность паринга (мс)

Vault

МетрикаТипLabelsОписание
kontinuum_vault_unlock_attempts_totalCounterstatus: success / failureПопытки разблокировки
kontinuum_vault_unlock_duration_msHistogramДлительность разблокировки (мс)

File Sync

МетрикаТипLabelsОписание
kontinuum_file_sync_bytes_totalCounterdirection: upload / downloadБайты синхронизации

S3

МетрикаТипLabelsОписание
kontinuum_s3_operations_totalCounteroperation: list_buckets / create_bucket / upload / download / delete / list_objects; status: success / failureОперации S3

Identity

МетрикаТипLabelsОписание
kontinuum_identity_operations_totalCounteroperation: create / update_name; status: success / failureОперации с identity

Device

МетрикаТипLabelsОписание
kontinuum_device_operations_totalCounteroperation: create / update_name; status: success / failureОперации с устройствами
kontinuum_devices_totalGaugeТекущее количество устройств

Stronghold

МетрикаТипLabelsОписание
kontinuum_stronghold_operations_totalCounteroperation: init / sign / load_key; status: success / failureОперации Stronghold

Network Topology (Grafana Node Graph)

МетрикаТипLabelsОписание
kontinuum_network_nodeGaugeid, title, subtitle, node_type, statusУзел в графе сети
kontinuum_network_edgeGaugeid, 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.jsonQuick stats: peers, devices, pairing
p2p-network-health.jsonP2P peer activity, connection trends
backend-operations.jsonВсе operation counters и duration histograms
vault-security.jsonVault unlock attempts и duration
sync-performance.jsonFile sync bytes by direction
spaces-sharing.jsonSpaces и sharing operations
network-topology.jsonNetwork topology Node Graph
logs.jsonLoki log queries

Доступ

Примеры 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