Initialize repository snapshot
This commit is contained in:
101
docs/observability/README.md
Normal file
101
docs/observability/README.md
Normal file
@@ -0,0 +1,101 @@
|
||||
# Observability - VaultMesh
|
||||
|
||||
This directory contains a Prometheus exporter for VaultMesh and a Grafana dashboard.
|
||||
|
||||
## Metrics Exposed
|
||||
|
||||
| Metric | Type | Labels | Description |
|
||||
|--------|------|--------|-------------|
|
||||
| `vaultmesh_receipts_total` | Counter | `module` | Number of receipts emitted |
|
||||
| `vaultmesh_receipts_failed_total` | Counter | `module`, `reason` | Failed receipt emissions |
|
||||
| `vaultmesh_anchor_age_seconds` | Gauge | - | Seconds since last guardian anchor |
|
||||
| `vaultmesh_emit_seconds` | Histogram | `module` | Receipt emit latency |
|
||||
|
||||
## Quick Start (Local)
|
||||
|
||||
### Option 1: Run exporter directly
|
||||
|
||||
```bash
|
||||
cd vaultmesh-observability
|
||||
cargo run --release
|
||||
```
|
||||
|
||||
Exposes metrics at `http://0.0.0.0:9108/metrics`
|
||||
|
||||
### Option 2: Using Docker Compose
|
||||
|
||||
```bash
|
||||
cd docs/observability
|
||||
docker-compose up --build
|
||||
```
|
||||
|
||||
Services:
|
||||
- **Exporter**: http://localhost:9108/metrics
|
||||
- **Prometheus**: http://localhost:9090
|
||||
- **Grafana**: http://localhost:3000 (admin/admin)
|
||||
|
||||
## Importing the Dashboard
|
||||
|
||||
1. Open Grafana at http://localhost:3000
|
||||
2. Go to Dashboards → Import
|
||||
3. Upload `dashboards/receipts.json`
|
||||
4. Select the Prometheus data source
|
||||
5. Click Import
|
||||
|
||||
## CI Smoke Test
|
||||
|
||||
The smoke test verifies the exporter responds on `/metrics`:
|
||||
|
||||
```bash
|
||||
cargo test -p vaultmesh-observability --tests
|
||||
```
|
||||
|
||||
Add to `.gitlab-ci.yml`:
|
||||
|
||||
```yaml
|
||||
observability-smoke:
|
||||
stage: test
|
||||
image: rust:1.75
|
||||
script:
|
||||
- cargo test -p vaultmesh-observability --tests -- --nocapture
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Description |
|
||||
|----------|---------|-------------|
|
||||
| `VAULTMESH_METRICS_ADDR` | `0.0.0.0:9108` | Listen address for metrics server |
|
||||
|
||||
## Guardian Metrics Integration Test
|
||||
|
||||
The Guardian engine has an integration test that verifies metrics are emitted after anchors:
|
||||
|
||||
```bash
|
||||
cargo test -p vaultmesh-guardian --features metrics --test metrics_integration
|
||||
```
|
||||
|
||||
This test:
|
||||
- Starts ObservabilityEngine on a test port
|
||||
- Creates Guardian with observability enabled
|
||||
- Performs an anchor
|
||||
- Verifies `/metrics` contains `vaultmesh_anchor_age_seconds 0` (fresh anchor)
|
||||
|
||||
## Integration with Other Engines
|
||||
|
||||
Other VaultMesh engines can record metrics by calling:
|
||||
|
||||
```rust
|
||||
use vaultmesh_observability::ObservabilityEngine;
|
||||
use std::sync::Arc;
|
||||
|
||||
let engine = Arc::new(ObservabilityEngine::new());
|
||||
|
||||
// Record successful receipt emission
|
||||
engine.observe_emitted("guardian", latency_seconds);
|
||||
|
||||
// Record failure
|
||||
engine.observe_failed("treasury", "io_error");
|
||||
|
||||
// Update anchor age (0 = just anchored)
|
||||
engine.set_anchor_age(0.0);
|
||||
```
|
||||
Reference in New Issue
Block a user