Definition
Behavioral drift is the gradual, often imperceptible divergence of a system's actual behavior from its intended or documented behavior. Unlike sudden failures that trigger immediate alerts, drift occurs slowly -- through accumulated configuration changes, dependency updates, data distribution shifts, environmental changes, or the compounding effects of minor code modifications. Left undetected, behavioral drift can silently degrade system reliability, security posture, and data quality until a threshold is crossed and visible failure occurs.
In the Prismatic Platform, behavioral drift is actively monitored by the Blue Team's blue-drift-detector agent, which performs continuous baseline comparison across four drift dimensions: behavioral, configuration, dependency, and performance.
Technical Deep Dive
Drift Dimensions
| Dimension | What Drifts | Detection Method | Example |
|---|---|---|---|
| Behavioral | System outputs for same inputs | Output comparison | API response shape changes |
| Configuration | Runtime settings | Config snapshot diff | Timeout values altered |
| Dependency | Library versions and behavior | Version tracking + testing | Library update changes semantics |
| Performance | Latency, throughput, resource usage | Statistical baseline comparison | Response time increases 5% per week |
Drift Detection Model
Baseline (known-good state)
↓
Current Observation
↓
Delta = |Current - Baseline|
↓
Drift Score = Delta / Baseline_StdDev
↓
Score > Threshold? → AlertArchitecture and Implementation
defmodule PrismaticMonitoring.DriftDetector do
@moduledoc """
Multi-dimensional drift detection for the Prismatic Platform.
Maintains rolling baselines and computes drift scores against
them for behavioral, configuration, dependency, and performance dimensions.
"""
use GenServer
@type drift_report :: %{
dimension: :behavioral | :configuration | :dependency | :performance,
drift_score: float(),
is_drifting: boolean(),
details: map(),
detected_at: DateTime.t()
}
@drift_threshold 2.5
@spec check_all() :: {:ok, [drift_report()]}
def check_all do
GenServer.call(__MODULE__, :check_all)
end
@impl GenServer
def init(_opts) do
schedule_periodic_check()
{:ok, %{baselines: %{}, history: %{}}}
end
@impl GenServer
def handle_call(:check_all, _from, state) do
reports = [
check_behavioral_drift(state),
check_configuration_drift(state),
check_dependency_drift(state),
check_performance_drift(state)
]
drifting = Enum.filter(reports, & &1.is_drifting)
if length(drifting) > 0 do
Enum.each(drifting, fn report ->
:telemetry.execute(
[:prismatic, :drift, :detected],
%{score: report.drift_score},
%{dimension: report.dimension}
)
end)
end
{:reply, {:ok, reports}, state}
end
@impl GenServer
def handle_info(:periodic_check, state) do
{_reply, _from, new_state} = handle_call(:check_all, nil, state)
schedule_periodic_check()
{:noreply, new_state}
end
@spec check_performance_drift(map()) :: drift_report()
defp check_performance_drift(state) do
baseline = Map.get(state.baselines, :performance, %{mean: 100, stddev: 20})
current = collect_performance_metrics()
drift_score = if baseline.stddev > 0, do: abs(current - baseline.mean) / baseline.stddev, else: 0.0
%{
dimension: :performance,
drift_score: Float.round(drift_score, 4),
is_drifting: drift_score > @drift_threshold,
details: %{current: current, baseline_mean: baseline.mean},
detected_at: DateTime.utc_now()
}
end
defp schedule_periodic_check, do: Process.send_after(self(), :periodic_check, :timer.minutes(5))
endUsage in Prismatic Platform
- Blue Team Defense:
blue-drift-detectoragent monitors all four drift dimensions continuously - Quality Floor Guardian: Detects quality score drift across 115 umbrella applications
- Perimeter EASM: Monitors security rating drift over time for watched domains
- Red Team Simulation:
red-drift-induceragent simulates sub-threshold drift attacks - Purple Team Synthesis: Maps drift findings to defense improvements through closure analysis
Best Practices
- Establish baselines from known-good states: Never start drift detection without a validated baseline.
- Monitor multiple dimensions simultaneously: Behavioral, configuration, dependency, and performance drift often correlate.
- Set appropriate thresholds per dimension: Performance drift tolerance differs from security drift tolerance.
- Track drift rates, not just absolute values: A system drifting 1% per week will cross thresholds in months.
- Automate baseline updates: After verified changes, update baselines to reflect the new intended behavior.
Related Terms
- Configuration Drift -- configuration-specific drift dimension
- Anomaly Detection -- detection methods applicable to drift
- Alert -- notifications triggered when drift exceeds thresholds
- Benchmark -- performance baselines for drift comparison
- Consistency -- the property that drift erodes
See Also
- Blue Team Defense -- team responsible for drift detection
- Quality Floor Guardian -- autonomous quality drift monitoring
Connect & Contribute
Created by Tomas Korcak (korczis) | Open Source under GHL