feat(syslog): 优化大日志通道并增加异常连续消费兜底
- 128 KiB 及以上日志默认进入大日志 Topic - InfluxDB 原文及达梦大字段超过 256 KiB 时截断保存 - 截断内容追加 HB_XDR_TRUNCATED 标记 - InfluxDB 写入失败时继续执行规则解析和达梦写入 - 未知或系统性异常优先写入普通/大日志 DLT - DLT 写入失败时记录特殊告警并提交 offset,避免阻塞后续消息 - DLT 失败等待时间默认限制为 1 秒 - 增加连续性放行、DLT 成功及失败监控指标 - 更新 Docker Compose、v3 升级文档及相关测试
This commit is contained in:
+52
@@ -98,6 +98,58 @@ class SyslogWalServiceTest {
|
||||
assertEquals(null, attempt.getDurableStage());
|
||||
}
|
||||
|
||||
@Test
|
||||
void oversizedMessageIsRejectedBeforeEnteringWal() {
|
||||
AppProperties properties = properties(tempDirectory);
|
||||
properties.setSyslogMessageMaxBytes(4L);
|
||||
properties.setSyslogWalMaxPendingBytes(16L);
|
||||
service = new SyslogWalService(properties, new ObjectMapper());
|
||||
service.initialize();
|
||||
|
||||
SyslogWalService.AdmissionResult result = service.tryAppend(
|
||||
event("20260811-too-large", "12345"));
|
||||
|
||||
assertEquals(SyslogWalService.AdmissionResult.OVERSIZED, result);
|
||||
assertEquals(1L, service.getOversizedCount());
|
||||
assertEquals(0, service.getQueueSize());
|
||||
assertEquals(0L, service.getPendingAppendBytes());
|
||||
}
|
||||
|
||||
@Test
|
||||
void pendingByteBudgetBackpressuresEvenWhenRecordQueueHasCapacity() {
|
||||
AppProperties properties = properties(tempDirectory);
|
||||
properties.setSyslogMessageMaxBytes(5L);
|
||||
properties.setSyslogWalMaxPendingBytes(5L);
|
||||
properties.setSyslogWalFlushRecords(100);
|
||||
properties.setSyslogWalFlushIntervalMs(10000L);
|
||||
service = new SyslogWalService(properties, new ObjectMapper());
|
||||
service.initialize();
|
||||
|
||||
assertEquals(SyslogWalService.AdmissionResult.ACCEPTED,
|
||||
service.tryAppend(event("20260811-first", "12345")));
|
||||
assertEquals(SyslogWalService.AdmissionResult.BACKPRESSURE,
|
||||
service.tryAppend(event("20260811-second", "x")));
|
||||
assertEquals(5L, service.getPendingAppendBytes());
|
||||
assertEquals(1L, service.getBackpressureCount());
|
||||
}
|
||||
|
||||
@Test
|
||||
void disabledHardLimitLetsOneOverBudgetRecordMakeProgressExclusively() {
|
||||
AppProperties properties = properties(tempDirectory);
|
||||
properties.setSyslogMessageMaxBytes(0L);
|
||||
properties.setSyslogWalMaxPendingBytes(4L);
|
||||
properties.setSyslogWalFlushRecords(100);
|
||||
properties.setSyslogWalFlushIntervalMs(10000L);
|
||||
service = new SyslogWalService(properties, new ObjectMapper());
|
||||
service.initialize();
|
||||
|
||||
assertEquals(SyslogWalService.AdmissionResult.ACCEPTED,
|
||||
service.tryAppend(event("20260811-over-budget", "12345")));
|
||||
assertEquals(SyslogWalService.AdmissionResult.BACKPRESSURE,
|
||||
service.tryAppend(event("20260811-waits", "x")));
|
||||
assertEquals(5L, service.getPendingAppendBytes());
|
||||
}
|
||||
|
||||
@Test
|
||||
void forceBeforeCursorAndPersistSchemaV2() throws Exception {
|
||||
service = new SyslogWalService(properties(tempDirectory), new ObjectMapper());
|
||||
|
||||
Reference in New Issue
Block a user