Date: 2026-01-19
Version tested: valerter 1.0.0-rc.5
Load generator: Rust (tools/load-generator)
| Component | Specification |
|---|---|
| CPU | Intel Core i7-14700 (20 cores) |
| RAM | 32 GB DDR5 |
| Storage | Samsung 990 PRO NVMe 1TB |
| OS | Linux (CachyOS 6.18) |
| VictoriaLogs | Docker container (local) |
Valerter is an alerting system, not a log forwarder. The goal is to send actionable notifications to humans, not to forward every single log line. This distinction is crucial for understanding the test results.
| Test Type | Purpose | Realistic? |
|---|---|---|
| With Throttle | Simulates production use | YES - This is how you should run valerter |
| Without Throttle | Stress test / robustness check | NO - Only to verify no crash under extreme load |
The throttle tests are the most important. They prove that valerter can handle massive log volumes while sending only the notifications you actually need.
| Test | Log Rate | Logs Processed | Notifications | Dropped | Status |
|---|---|---|---|---|---|
| Throttle 10k/s | 10,000/s | 150,000 | 25 | 0 | PASS |
| Throttle 50k/s | 50,000/s | 500,000 | 25 | 0 | PASS |
| Throttle 100k/s | 100,000/s | 500,000 | 25 | 0 | PASS |
Key insight: With throttle enabled, valerter handles 100,000 logs/sec while sending only 25 actionable notifications (5 per host). Zero drops, stable memory.
| Test | Log Rate | Notifications | Dropped | Crash? | Status |
|---|---|---|---|---|---|
| T1 Baseline | 100/s | 3,000 (100%) | 0 | No | PASS |
| T2 Moderate | 1,000/s | 7,843 (26%) | 25,157 | No | PASS |
| T3 Stress | 5,000/s | 13,098 (13%) | ~87k | No | PASS |
| T4 Extreme | 10,000/s | 18,957 (13%) | ~131k | No | PASS |
Key insight: Even without throttle, valerter doesn’t crash. It gracefully drops excess notifications to protect memory.
These tests simulate real-world usage where you want actionable alerts, not notification spam.
throttle:
key: "" # Group by host
count: 5 # Max 5 notifications per host
window: 60s # Per minute
With 5 unique hosts in the test data, maximum expected notifications = 5 hosts × 5 = 25 per minute.
| Metric | Value |
|---|---|
| Log rate | 10,000/sec |
| Duration | 15s |
| Total logs | 150,000 |
| Notifications sent | 25 |
| Throttled | 149,975 |
| Dropped | 0 |
| RSS Memory | 18.49 MB |
| Panics | 0 |
Result: Exactly 25 notifications as configured. Zero drops. System stable.
| Metric | Value |
|---|---|
| Log rate | 50,000/sec |
| Duration | 10s |
| Total logs | 500,000 |
| Notifications sent | 25 |
| Throttled | 499,975 |
| Dropped | 0 |
| RSS Memory | 18.64 MB |
| Panics | 0 |
Result: Half a million logs processed, only 25 notifications. Zero drops.
| Metric | Value |
|---|---|
| Log rate | 100,000/sec |
| Duration | 5s |
| Total logs | 500,000 |
| Notifications sent | 25 |
| Throttled | 499,975 |
| Dropped | 0 |
| RSS Memory | 20.11 MB |
| Panics | 0 |
Result: 100k logs/sec ingested, only 25 actionable notifications sent. Perfect throttle behavior.
In production, you don’t want 100,000 Mattermost messages per second. You want:
The throttle ensures your team gets actionable alerts without notification fatigue.
These tests verify that valerter doesn’t crash under extreme load, even in misconfigured scenarios.
Note: These tests are NOT realistic. In production, you should ALWAYS enable throttle.
To ensure that if someone misconfigures valerter (no throttle, or throttle too high), the system:
| Metric | Value |
|---|---|
| Log rate | 100/sec |
| Notifications sent | 3,000 (100%) |
| Dropped | 0 |
| RSS Memory | 16.65 MB |
Result: At low rates, 100% delivery is possible even without throttle.
| Metric | Value |
|---|---|
| Log rate | 1,000/sec |
| Notifications sent | 7,843 (26%) |
| Dropped | 25,157 |
| RSS Memory | 18.38 MB |
Result: HTTP notifiers can’t keep up. Valerter drops oldest alerts to prevent memory growth. No crash.
| Metric | Value |
|---|---|
| Log rate | 5,000/sec |
| Notifications sent | 13,098 (13%) |
| Dropped | ~87,000 |
| RSS Memory | 21.18 MB |
Result: Heavy backpressure. Queue drops working as designed. No crash.
| Metric | Value |
|---|---|
| Log rate | 10,000/sec |
| Notifications sent | 18,957 (13%) |
| Dropped | ~131,000 |
| RSS Memory | 21.83 MB |
Result: Extreme load. Memory bounded, no crash, no panic.
Even without throttle:
Tests that valerter recovers from VictoriaLogs outages.
Procedure:
docker stop valerter-perf-vldocker start valerter-perf-vlResults:
valerter_victorialogs_up = 1Verdict: PASS
| Component | Measured Throughput |
|---|---|
| Log ingestion | 100,000+ logs/sec |
| JSON parsing | 100,000+ logs/sec |
| Throttle evaluation | 100,000+ logs/sec |
| HTTP notification | ~50-100/sec per notifier |
Bottleneck: HTTP notification delivery (network latency). This is expected and mitigated by throttle.
| Scenario | RSS Memory |
|---|---|
| Idle | ~15 MB |
| With throttle (any load) | ~18-20 MB |
| Without throttle (extreme) | ~22 MB |
Memory is always bounded regardless of load.
# The metrics that matter in production
valerter_alerts_sent_total # Notifications actually delivered
valerter_alerts_throttled_total # Logs matched but throttled (expected)
valerter_alerts_dropped_total # Queue overflow (should be 0 with throttle)
valerter_victorialogs_up # Connection health
throttle:
key: "" # Or "", "", etc.
count: 10 # Max notifications per key
window: 60s # Per minute
| Metric | Expected | Action if abnormal |
|---|---|---|
valerter_alerts_dropped_total |
0 | Enable/tighten throttle |
valerter_alerts_throttled_total |
> 0 | Normal, throttle working |
valerter_victorialogs_up |
1 | Check VL connection |
- - Alert per machine+severity| File | Description |
|---|---|
tools/load-generator/ |
Rust load generator (100k+ logs/sec) |
scripts/perf-test-config.yaml |
Test configuration |
scripts/mock-mattermost.py |
Mock Mattermost webhook |
scripts/mock-webhook.py |
Mock generic webhook |
scripts/docker-compose-perf.yaml |
Infrastructure (VL + Mailhog) |
scripts/PERF-TEST-GUIDE.md |
Test execution guide |
Valerter handles 100,000 logs/sec while sending only the notifications you configure:
Even misconfigured, valerter doesn’t crash:
Overall status: PASS
The throttle feature is the key to production use. With proper throttle configuration, valerter transforms massive log volumes into actionable, human-friendly notifications.