alibaba/Sentinel · error · IllegalArgumentException
Interval should be less than 5 min:
Error message
Interval should be less than 5 min:
What it means
The final rule of StatLoggerBuilder.validateInterval: flush intervals above 5 minutes (300 seconds) are rejected. EagleEye stat loggers are designed for near-real-time monitoring output, and long intervals would also delay file rolling and daemon flushing disproportionately, so the builder throws IllegalArgumentException for any value over 300.
Source
Thrown at sentinel-core/src/main/java/com/alibaba/csp/sentinel/eagleeye/StatLoggerBuilder.java:110
return StatLogController.createLoggerIfNotExists(this);
}
static void validateInterval(final long intervalSeconds) throws IllegalArgumentException {
if (intervalSeconds < 1) {
throw new IllegalArgumentException("Interval cannot be less than 1" + intervalSeconds);
} else if (intervalSeconds < 60) {
if (60 % intervalSeconds != 0) {
throw new IllegalArgumentException("Invalid second interval (cannot divide by 60): " + intervalSeconds);
}
} else if (intervalSeconds <= 5 * 60) {
if (intervalSeconds % 60 != 0) {
throw new IllegalArgumentException("Invalid second interval (cannot divide by 60): " + intervalSeconds);
}
if (60 % intervalSeconds != 0) {
throw new IllegalArgumentException("Invalid second interval (cannot divide by 60): " + intervalSeconds);
}
} else if (intervalSeconds > 5 * 60) {
throw new IllegalArgumentException("Interval should be less than 5 min: " + intervalSeconds);
}
}
}
View on GitHub (pinned to a3f40ba8e9)
Solutions
- Keep the interval at or below 300 seconds — and given the other rules, effectively at most 60 seconds.
- If a milliseconds config feeds the builder, divide by 1000 and clamp to [1, 60].
- If coarse aggregation is truly needed, aggregate downstream from the stat files instead of stretching the flush interval.
Example fix
// before builder.intervalSeconds(600); // > 300 -> throws // after builder.intervalSeconds(60);
Defensive patterns
Strategy: validation
Validate before calling
int sec = Math.toIntExact(Math.min(Math.max(1, intervalMillis / 1000), 60)); builder.intervalSeconds(sec);
Prevention
- Clamp configured intervals to [1, 60] seconds before calling the builder.
- Double-check ms-vs-s units on every interval config migration.
- Move coarse aggregation downstream instead of stretching flush intervals.
When it happens
Trigger: Calling intervalSeconds(n) with n > 300 — e.g. 360 (6 min), 600 (10 min), or a milliseconds-vs-seconds unit mistake (e.g. passing 6000 intending 6000ms = 6s, or 600 for '10 minutes').
Common situations: Unit confusion: a milliseconds value from config is passed where seconds are expected, producing large numbers. Aggressive batching strategies that want 10-15 minute flushes. Defaults migrated from log-rotation policies measured in minutes.
Related errors
- Invalid second interval (cannot divide by 60):
- Max entry count should be at least 1:
- Interval cannot be less than 1
- keys empty or null: ${keys}
- keys empty or null
AI-assisted analysis of alibaba/Sentinel@a3f40ba8e9 (2026-08-14).
Data as JSON: /api/errors/4d59301f750ff362.
Report an issue: GitHub.