feat: 新增设备 API 拉取采集及配套处理能力
- 接入 NDRServer 告警和流量日志,支持凭据与任务管理 - 支持分页拉取、窗口拆分、调度优先级及 WAL 持久化后推进断点 - 增加迟到告警规则重放,优化多条泛化规则选择和事件时间处理 - 补充回归测试、数据库升级脚本及部署文档
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
# 新消息写 V2;升级期间同时读取 V1/V2,避免切换窗口丢失旧点。
|
||||
INFLUXDB_RAW_WRITE_SCHEMA=V2
|
||||
INFLUXDB_RAW_READ_MODE=V1_V2
|
||||
INFLUXDB_RAW_V1_BUCKET=yelangbucket
|
||||
INFLUXDB_RAW_V2_BUCKET=yelangbucket_v2
|
||||
INFLUXDB_RAW_UUID_BUCKET_COUNT=4096
|
||||
INFLUXDB_RAW_LEGACY_POINT_TIME_FALLBACK_ENABLED=true
|
||||
INFLUXDB_RAW_QUERY_MAX_ROWS=10000
|
||||
|
||||
# 标准化告警和迟到事实通知在同一个达梦事务中提交。
|
||||
ANALYSIS_LATE_REPLAY_OUTBOX_ENABLED=true
|
||||
|
||||
# 同设备多条泛化规则只选择一个确定性胜出规则。
|
||||
NORMALIZATION_RULE_SELECTION_ENABLED=true
|
||||
NORMALIZATION_RULE_SELECTION_SHADOW_ENABLED=true
|
||||
NORMALIZATION_RULE_SELECTION_AMBIGUOUS_FALLBACK=LOWEST_RULE_ID
|
||||
NORMALIZATION_RULE_SELECTION_DETAIL_LOG_ENABLED=false
|
||||
NORMALIZATION_RULE_SELECTION_EXPLICIT_ENABLED=true
|
||||
NORMALIZATION_RULE_SELECTION_AUTOMATIC_FALLBACK_ENABLED=true
|
||||
@@ -0,0 +1,16 @@
|
||||
# 与 syslog-consumer-rule 使用相同的 V1/V2 Bucket 契约。
|
||||
INFLUXDB_RAW_WRITE_SCHEMA=V2
|
||||
INFLUXDB_RAW_READ_MODE=V1_V2
|
||||
INFLUXDB_RAW_V1_BUCKET=yelangbucket
|
||||
INFLUXDB_RAW_V2_BUCKET=yelangbucket_v2
|
||||
INFLUXDB_RAW_UUID_BUCKET_COUNT=4096
|
||||
INFLUXDB_RAW_LEGACY_POINT_TIME_FALLBACK_ENABLED=true
|
||||
INFLUXDB_RAW_QUERY_MAX_ROWS=10000
|
||||
|
||||
# 独立重放已经完成、但后来到达了告警事实的规则窗口。
|
||||
ANALYSIS_LATE_REPLAY_ENABLED=true
|
||||
ANALYSIS_LATE_REPLAY_SCAN_INTERVAL_MS=5000
|
||||
ANALYSIS_LATE_REPLAY_LEASE_SECONDS=1800
|
||||
ANALYSIS_LATE_REPLAY_MAX_BUCKETS_PER_SCAN=100
|
||||
ANALYSIS_LATE_REPLAY_MAX_WINDOWS_PER_SCAN=10
|
||||
ANALYSIS_LATE_REPLAY_RETRY_DELAY_SECONDS=30
|
||||
@@ -0,0 +1,25 @@
|
||||
# TCP 和 UDP 当前共用一个网络监听开关;API 拉取使用另一个独立开关。
|
||||
# 组合方式和生效步骤见 config/接入方式开关说明.md。
|
||||
# 修改环境变量后需要重新创建容器,仅执行 docker restart 不会加载 Compose 新配置。
|
||||
SYSLOG_SERVER_ENABLED=true
|
||||
DEVICE_API_ENABLED=false
|
||||
|
||||
# 只允许经过批准的设备域名或 IP,多个值使用英文逗号分隔。
|
||||
DEVICE_API_ALLOWED_HOSTS=<ndr.example.com>
|
||||
DEVICE_API_INSTANCE_ID=<当前实例稳定标识>
|
||||
DEVICE_API_SCAN_INTERVAL_MS=5000
|
||||
DEVICE_API_LEASE_SECONDS=120
|
||||
DEVICE_API_GLOBAL_CONCURRENCY=4
|
||||
DEVICE_API_PER_HOST_CONCURRENCY=1
|
||||
DEVICE_API_MAX_PAGES_PER_SLICE=20
|
||||
DEVICE_API_SLOW_PAGE_THRESHOLD_MS=1000
|
||||
DEVICE_API_BACKPRESSURE_TIMEOUT_MS=120000
|
||||
|
||||
# 已完成并投递成功的 WAL 分段保留天数;按磁盘容量规划调整。
|
||||
SYSLOG_WAL_RETENTION_DAYS=2
|
||||
SYSLOG_WAL_DISK_HIGH_WATERMARK_PERCENT=90
|
||||
SYSLOG_WAL_MIN_FREE_BYTES=10737418240
|
||||
SYSLOG_POINT_TIME_WRITE_ENABLED=true
|
||||
|
||||
# 自签名设备证书示例。路径必须通过 volume 挂载进入容器。
|
||||
JAVA_OPTS=-Djavax.net.ssl.trustStore=/app/ssl/syslog-serve-cacerts -Djavax.net.ssl.trustStorePassword=<PASSWORD>
|
||||
@@ -0,0 +1,148 @@
|
||||
# TCP、UDP 和 API 拉取开关说明
|
||||
|
||||
接入开关都配置在 `syslog-serve` 服务中。修改开关不会删除任务、凭据、checkpoint 或历史日志。
|
||||
|
||||
## 1. 两个全局开关
|
||||
|
||||
| 环境变量 | 控制内容 | `true` | `false` |
|
||||
| --- | --- | --- | --- |
|
||||
| `SYSLOG_SERVER_ENABLED` | 网络监听 | 同时打开 TCP 和 UDP Syslog 监听 | 同时关闭 TCP 和 UDP Syslog 监听 |
|
||||
| `DEVICE_API_ENABLED` | 设备 API 拉取调度器 | 允许调度已启用的 API 任务 | 停止调度所有 API 拉取任务 |
|
||||
|
||||
当前版本的 TCP 和 UDP 共用 `SYSLOG_SERVER_ENABLED`,不能通过两个独立环境变量分别打开或关闭。
|
||||
|
||||
`SYSLOG_SERVER_ENABLED` 与 `DEVICE_API_ENABLED` 互不排斥,可以同时打开,也可以只打开其中一种。
|
||||
|
||||
## 2. 常用配置组合
|
||||
|
||||
| 使用方式 | `SYSLOG_SERVER_ENABLED` | `DEVICE_API_ENABLED` |
|
||||
| --- | --- | --- |
|
||||
| 只接收 TCP/UDP 推送 | `true` | `false` |
|
||||
| 只使用 API 拉取 | `false` | `true` |
|
||||
| TCP/UDP 和 API 同时使用 | `true` | `true` |
|
||||
| 暂停所有日志接入 | `false` | `false` |
|
||||
|
||||
例如,只使用 API 拉取:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
syslog-serve:
|
||||
environment:
|
||||
- SYSLOG_SERVER_ENABLED=false
|
||||
- DEVICE_API_ENABLED=true
|
||||
```
|
||||
|
||||
例如,同时使用设备推送和 API 拉取:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
syslog-serve:
|
||||
environment:
|
||||
- SYSLOG_SERVER_ENABLED=true
|
||||
- DEVICE_API_ENABLED=true
|
||||
```
|
||||
|
||||
## 3. 修改后如何生效
|
||||
|
||||
环境变量在 `syslog-serve` 启动时读取。修改 Compose 文件后,需要重新创建容器:
|
||||
|
||||
```bash
|
||||
docker compose -f <Compose文件路径> up -d --force-recreate syslog-serve
|
||||
```
|
||||
|
||||
如果 Compose 中的服务名不是 `syslog-serve`,请换成现场实际服务名。
|
||||
|
||||
只执行下面的命令不能加载刚修改的 Compose 环境变量:
|
||||
|
||||
```bash
|
||||
docker restart syslog-serve-dm
|
||||
```
|
||||
|
||||
`docker restart` 只重启原容器,仍会使用创建该容器时保存的旧环境变量。
|
||||
|
||||
## 4. API 拉取有两层开关
|
||||
|
||||
API 拉取必须同时满足:
|
||||
|
||||
1. 全局开关 `DEVICE_API_ENABLED=true`;
|
||||
2. 具体任务的 `enabled=true`。
|
||||
|
||||
因此,把全局开关改成 `true` 不会自动恢复已经暂停的任务。任务仍需通过管理接口恢复。
|
||||
|
||||
查询任务当前版本:
|
||||
|
||||
```bash
|
||||
export SYSLOG_SERVE_BASE_URL=http://127.0.0.1:8189/syslogserve
|
||||
|
||||
curl -sS \
|
||||
"${SYSLOG_SERVE_BASE_URL}/api/api-pull-tasks/<taskId>"
|
||||
```
|
||||
|
||||
响应中的 `configVersion` 是任务当前版本。恢复任务:
|
||||
|
||||
```bash
|
||||
curl -sS -X POST \
|
||||
"${SYSLOG_SERVE_BASE_URL}/api/api-pull-tasks/<taskId>/resume" \
|
||||
-H 'Content-Type: application/json' \
|
||||
--data-binary '{"configVersion":<当前版本>}'
|
||||
```
|
||||
|
||||
暂停任务:
|
||||
|
||||
```bash
|
||||
curl -sS -X POST \
|
||||
"${SYSLOG_SERVE_BASE_URL}/api/api-pull-tasks/<taskId>/pause" \
|
||||
-H 'Content-Type: application/json' \
|
||||
--data-binary '{"configVersion":<当前版本>}'
|
||||
```
|
||||
|
||||
每次恢复或暂停成功后,`configVersion` 都会增加。再次操作前要重新查询任务,不能一直使用旧版本号。
|
||||
|
||||
## 5. 检查配置是否生效
|
||||
|
||||
先查看容器实际使用的环境变量:
|
||||
|
||||
```bash
|
||||
docker inspect syslog-serve-dm \
|
||||
--format '{{range .Config.Env}}{{println .}}{{end}}' \
|
||||
| grep -E '^(SYSLOG_SERVER_ENABLED|DEVICE_API_ENABLED)='
|
||||
```
|
||||
|
||||
再查看启动日志:
|
||||
|
||||
```bash
|
||||
docker logs --since 5m syslog-serve-dm 2>&1 \
|
||||
| grep -E 'TCP Syslog server started|UDP Syslog server started|Both TCP and UDP|设备 API 拉取调度器配置'
|
||||
```
|
||||
|
||||
判断方法:
|
||||
|
||||
- 出现 `TCP Syslog server started` 和 `UDP Syslog server started`,表示网络监听已打开;
|
||||
- 没有 TCP/UDP 启动记录,并且容器环境中 `SYSLOG_SERVER_ENABLED=false`,表示网络监听已关闭;
|
||||
- 出现 `设备 API 拉取调度器配置: enabled=true`,表示 API 全局开关已打开;
|
||||
- 出现 `设备 API 拉取调度器配置: enabled=false`,表示 API 全局开关已关闭。
|
||||
|
||||
最后还要查询具体 API 任务:
|
||||
|
||||
```bash
|
||||
curl -sS \
|
||||
"${SYSLOG_SERVE_BASE_URL}/api/api-pull-tasks/<taskId>/runtime"
|
||||
```
|
||||
|
||||
响应中的 `enabled=true` 表示该任务已启用;`committedWindowEnd` 持续向后变化,才表示任务正在正常推进。
|
||||
|
||||
## 6. 端口配置注意事项
|
||||
|
||||
当 `SYSLOG_SERVER_ENABLED=true` 时,Compose 还需要发布 TCP 和 UDP 端口,例如:
|
||||
|
||||
```yaml
|
||||
ports:
|
||||
- "514:514/tcp"
|
||||
- "514:514/udp"
|
||||
```
|
||||
|
||||
端口映射和程序开关是两件事:
|
||||
|
||||
- 只有端口映射、但 `SYSLOG_SERVER_ENABLED=false`,程序不会监听 TCP/UDP;
|
||||
- `SYSLOG_SERVER_ENABLED=true`、但没有正确映射或开放端口,容器外设备仍无法连接;
|
||||
- 只使用 API 拉取时,可以保留端口映射,但建议同时从 Compose 和防火墙中关闭不需要的入口。
|
||||
Reference in New Issue
Block a user