0e9e6656db
- 128 KiB 及以上日志默认进入大日志 Topic - InfluxDB 原文及达梦大字段超过 256 KiB 时截断保存 - 截断内容追加 HB_XDR_TRUNCATED 标记 - InfluxDB 写入失败时继续执行规则解析和达梦写入 - 未知或系统性异常优先写入普通/大日志 DLT - DLT 写入失败时记录特殊告警并提交 offset,避免阻塞后续消息 - DLT 失败等待时间默认限制为 1 秒 - 增加连续性放行、DLT 成功及失败监控指标 - 更新 Docker Compose、v3 升级文档及相关测试
148 lines
4.6 KiB
Markdown
148 lines
4.6 KiB
Markdown
# v3 新增变量配置
|
||
|
||
应用侧只需要修改两个 Docker Compose 文件。变量放到对应服务的 `environment:` 下,不要修改 JAR 中的
|
||
`application.properties`;Kafka Broker 参数单独按第 4 节核对。
|
||
|
||
## 1. syslog-serve
|
||
|
||
配置文件:
|
||
|
||
```text
|
||
syslog-serve/docker-compose/docker-compose-serve-prod.yaml
|
||
```
|
||
|
||
在 `services.syslog-serve.environment` 中增加:
|
||
|
||
```yaml
|
||
# 开启 Syslog TCP/UDP 监听,字符集按现场设备实际编码调整。
|
||
- SYSLOG_SERVER_ENABLED=true
|
||
- SYSLOG_CHARSET=UTF-8
|
||
|
||
# 单条最多接收 6 MiB,超过 256 KiB 时发送到大日志 Topic。
|
||
- SYSLOG_MAX_FRAME_LENGTH=6291456
|
||
- SYSLOG_MESSAGE_MAX_BYTES=6291456
|
||
- SYSLOG_LARGE_MESSAGE_THRESHOLD_BYTES=262144
|
||
|
||
# WAL 和 Kafka 投递最多各占用 256 MiB 在途内存。
|
||
- SYSLOG_WAL_MAX_PENDING_BYTES=268435456
|
||
- SYSLOG_DISPATCH_MAX_INFLIGHT_BYTES=268435456
|
||
|
||
# 大日志 Kafka Topic 及 Producer 请求上限。
|
||
- KAFKA_PRODUCER_LARGE_TOPIC=agent-01-syslog-topic.large
|
||
- KAFKA_PRODUCER_MAX_REQUEST_SIZE=33554432
|
||
```
|
||
|
||
其中:
|
||
|
||
- `SYSLOG_MAX_FRAME_LENGTH`:TCP 单帧最大长度;
|
||
- `SYSLOG_MESSAGE_MAX_BYTES`:所有来源的单条日志硬上限,超过后拒绝;
|
||
- `SYSLOG_LARGE_MESSAGE_THRESHOLD_BYTES`:超过该值后走大日志 Topic;
|
||
- `SYSLOG_WAL_MAX_PENDING_BYTES`、`SYSLOG_DISPATCH_MAX_INFLIGHT_BYTES`:限制 JVM 在途数据量。
|
||
|
||
`SYSLOG_MAX_FRAME_LENGTH` 必须大于或等于 `SYSLOG_MESSAGE_MAX_BYTES`。如果设备发送 GBK,应将
|
||
`SYSLOG_CHARSET` 改为 `GBK`。
|
||
|
||
## 2. syslog-consumer-rule
|
||
|
||
配置文件:
|
||
|
||
```text
|
||
syslog-consumer-rule/docker-compose/docker-compose-consumer-rule-prod.yaml
|
||
```
|
||
|
||
在 `services.syslog-consumer-rule.environment` 中增加,三台实例保持一致:
|
||
|
||
```yaml
|
||
# 大日志独立消费通道。
|
||
- KAFKA_CONSUMER_LARGE_TOPIC=agent-01-syslog-topic.large
|
||
- SYSLOG_LARGE_LISTENER_ENABLED=true
|
||
- SYSLOG_LARGE_LISTENER_CONCURRENCY=1
|
||
- SYSLOG_LARGE_LISTENER_MAX_POLL_RECORDS=5
|
||
- SYSLOG_LARGE_LISTENER_MAX_PARTITION_FETCH_BYTES=33554432
|
||
- SYSLOG_LARGE_LISTENER_FETCH_MAX_BYTES=67108864
|
||
|
||
# 大日志规则处理批次和独立线程池。
|
||
- SYSLOG_LARGE_PROCESSING_BATCH_MAX_BYTES=8388608
|
||
- SYSLOG_LARGE_PROCESSOR_CORE_POOL_SIZE=1
|
||
- SYSLOG_LARGE_PROCESSOR_MAX_POOL_SIZE=2
|
||
- SYSLOG_LARGE_PROCESSOR_QUEUE_CAPACITY=10
|
||
|
||
# Retry、DLT、Replay 也允许传输大日志。
|
||
- KAFKA_RELIABILITY_MAX_REQUEST_SIZE=33554432
|
||
|
||
# InfluxDB 原文最多保存 1 MiB,单批写入最多 8 MiB。
|
||
- INFLUXDB_RAW_MESSAGE_MAX_UTF8_BYTES=1048576
|
||
- INFLUXDB_RAW_WRITE_BATCH_MAX_BYTES=8388608
|
||
|
||
# 达梦正常日志大字段最多保存 64 KiB,非标日志原文最多保存 256 KiB。
|
||
- DM_NORMAL_LARGE_FIELD_MAX_UTF8_BYTES=65536
|
||
- DM_NON_NORMAL_LARGE_FIELD_MAX_UTF8_BYTES=262144
|
||
```
|
||
|
||
被截断的数据会以以下标记结尾:
|
||
|
||
```text
|
||
...[HB_XDR_TRUNCATED original_utf8_bytes=原始字节数]
|
||
```
|
||
|
||
以下三个存储上限配置为 `0` 时表示不截断:
|
||
|
||
```text
|
||
INFLUXDB_RAW_MESSAGE_MAX_UTF8_BYTES
|
||
DM_NORMAL_LARGE_FIELD_MAX_UTF8_BYTES
|
||
DM_NON_NORMAL_LARGE_FIELD_MAX_UTF8_BYTES
|
||
```
|
||
|
||
规则解析始终使用完整原文,只在写入 InfluxDB 或达梦时截断。
|
||
|
||
## 3. 日统计投影
|
||
|
||
日统计投影默认开启,一般不需要新增配置。只需确认现场没有配置:
|
||
|
||
```text
|
||
STATS_PROJECTION_ASYNC_ENABLED=false
|
||
```
|
||
|
||
如果现场需要显式写明,可以在 `syslog-consumer-rule` 的 `environment` 中配置:
|
||
|
||
```yaml
|
||
- STATS_PROJECTION_ASYNC_ENABLED=true
|
||
- STATS_PROJECTION_TOPIC=agent-01-syslog-topic.STATS.PROJECTION
|
||
- STATS_PROJECTION_GROUP_ID=agent-01-syslog-group-dm-stats-projection
|
||
```
|
||
|
||
## 4. Kafka 配置
|
||
|
||
每个 Kafka Broker 的 `replica.fetch.max.bytes` 必须不小于 32 MiB:
|
||
|
||
```properties
|
||
replica.fetch.max.bytes=33554432
|
||
```
|
||
|
||
然后执行:
|
||
|
||
```bash
|
||
bash upgrade-doc/v3/kafka/02-create-large-log-topics.sh
|
||
```
|
||
|
||
生产者和消费者的大日志 Topic 名称必须完全相同:
|
||
|
||
```text
|
||
KAFKA_PRODUCER_LARGE_TOPIC=agent-01-syslog-topic.large
|
||
KAFKA_CONSUMER_LARGE_TOPIC=agent-01-syslog-topic.large
|
||
```
|
||
|
||
## 5. 使配置生效
|
||
|
||
在现场对应的部署目录先检查 Compose,再重建容器:
|
||
|
||
```bash
|
||
docker compose -f docker-compose-serve-prod.yaml config
|
||
docker compose -f docker-compose-serve-prod.yaml up -d --force-recreate syslog-serve
|
||
|
||
docker compose -f docker-compose-consumer-rule-prod.yaml config
|
||
docker compose -f docker-compose-consumer-rule-prod.yaml up -d --force-recreate syslog-consumer-rule
|
||
```
|
||
|
||
建议先升级三台 `syslog-consumer-rule`,确认大日志消费者正常后,再升级 `syslog-serve`。
|