# Observability

## Metrics

### PromEx (`Aprsme.PromEx`)

Prometheus-compatible metrics exposed at `/metrics` (PromEx plugin).
Custom plugin: `Aprsme.PromEx.Plugins.Aprsme`

<!-- TODO: Document key metrics (packet rates, DB query times, broadcast latency) -->

### Telemetry

`telemetry_metrics` + `telemetry_poller` for application-level metrics:
- `Aprsme.Telemetry.DatabaseMetrics` — DB query performance
- `Aprsme.ApiMetrics` — API usage tracking

## Error Tracking

### ErrorTracker

Self-hosted error tracking dashboard at `/errors` (authenticated).
Configuration: `error_tracker` hex package.

### Error Handling

- `Aprsme.ErrorHandler` — Application error handling
- `Aprsme.ErrorNotifier` — Telemetry-based error notification

## Logging

### Log Sanitization

`Aprsme.LogSanitizer` — Strips PII from log output.

### Log Filtering

`AprsmeWeb.Plugs.LogFilter` — Filters noisy paths (`/health`, `/ready`, `/`) from access logs.

## Monitoring

### Connection Monitor

`Aprsme.ConnectionMonitor` — Monitors APRS-IS connection health.

### Status Page

`/status` (StatusLive.Index) — Real-time system status dashboard:
- APRS-IS connection state
- Uptime
- Health score
- Cluster status (when clustered)

### Analytics

`Aprsme.PlausibleAnalytics` — Plausible analytics integration for page views.

## Signal Handling

- `Aprsme.SignalHandler` — OS signal handling (SIGTERM, SIGINT)
- `Aprsme.ShutdownHandler` — Graceful shutdown coordination

## Deployment Notifications

`Aprsme.DeploymentNotifier` — Notifies external systems of deploy events.
