历史报警存储
将达到指定等级的报警产生、确认和恢复事件写入数据库,供历史报警查询和报表使用。
转发组范围、离线缓存和启停操作见数据转发。本页只说明历史报警存储特有的表、等级过滤、双库镜像和调试功能。
保存并查询一条报警
- 先给一个测试变量设置高限报警,不要用生产设备试报警。
- 打开“开发配置 → 数据转发”,新增
Demo_Alarm_Group,范围选“手动选择”并保存。重新编辑组,在“转发变量”选择这个测试变量,点击加号加入成员表,再保存组。 - 在该组下新增目标
Demo_Alarm_Target,插件选择“历史报警存储”。 - 目标属性中选择数据库类型
Sqlite,连接字符串填Data Source=manual-alarm.sqlite;journal mode=WAL。保持历史报警表名historyAlarm、最小报警等级0,脚本留空、双库镜像关闭,其余保持默认。 - 保存并启用组和目标。数据库文件位于网关运行目录,该目录必须可写。
- 在仿真或测试变量中先产生一次报警,填写说明并确认,再让它恢复。目标启动以前已经发生的事件不能作为本次存储验证。
- 进入“数据与告警 → 报警查询 → 历史报警”,在“转发目标”中选择刚建的目标,选项按“组名/目标名”显示,例如
Demo_Alarm_Group/Demo_Alarm_Target。选择覆盖本次操作的时间范围并确认,点击刷新图标,再核对变量、报警值与事件时间。
使用正式数据库时,将第 4 步改为实际数据库类型和连接字符串。要筛选严重报警再调整“最小报警等级”;它不是在这里设置变量的报警阈值。
目标基本信息
| 参数 | 默认值 | 如何配置 |
|---|---|---|
| 所属转发组 | - | 必须选择已保存的转发组。 |
| 目标名称 | - | 必填,同一转发组内不能重复。 |
| 启用 | 开启 | 关闭时不会初始化或写入报警表。 |
| 日志级别 | Info | 排查数据库或报警写入问题时临时使用 Debug。 |
| 启动超时 | 60 秒 | 页面可填 1~3600 秒。 |
目标属性
| 参数 | 默认值 | 如何配置 |
|---|---|---|
| 数据库类型 | SqlServer | 支持 SqlServer、MySql、Sqlite 和 PostgreSql。 |
| 分表策略 | 不分表 | 关系型数据库可按天、周、月、季度、年或自定义服务分表。 |
| 连接字符串 | 开发环境 SQL Server 示例 | 替换为实际数据库地址、账号和密码;账号需要建表、查询、插入和删除权限。 |
| 历史报警表名 | historyAlarm | 保存报警产生、确认和恢复事件的表名;多个目标建议使用独立名称。 |
| 保留天数 | 3650 | 正整数;小于 1 的值会归一为 1。清理按报警 EventTime 执行。 |
| 历史报警表脚本 | 空 | 从表达式选择器选择 Dynamic SQL 脚本,由脚本负责建表、写入和清理;留空使用标准表。 |
| 时区偏移 | +08:00 | 填 +08:00、-05:00 等固定偏移;留空表示 UTC。查询时使用相同约定。 |
| 最小报警等级 | 0 | 只接收 AlarmLevel >= 此值的事件;低于此值的发生、确认及恢复事件都会被忽略。 |
| 双库镜像 | 关闭 | 仅关系型标准表支持;填写备用库后主库和备用库同时写入。 |
关系型数据库连接字符串
| 数据库 | 示例 |
|---|---|
| SQL Server | Server=127.0.0.1,1433;Database=tgateway_alarm;User Id=history_user;Password=<密码>;TrustServerCertificate=True; |
| MySQL | Server=127.0.0.1;Port=3306;Database=tgateway_alarm;Uid=history_user;Pwd=<密码>; |
| SQLite | Data Source=DB/alarm.db;journal mode=WAL |
| PostgreSQL | Host=127.0.0.1;Port=5432;Database=tgateway_alarm;Username=history_user;Password=<密码>; |
“双库镜像”仅支持 SQL Server、MySQL、SQLite 和 PostgreSQL。启用时,主库与备用库必须是不同的数据库实例,且不能同时配置“历史报警表脚本”。镜像对话框中的自动检查、自动补齐和容量设置与历史数据存储相同。
时区与分表
存储时区决定新写入的物理时间;历史查询的显示时区用于还原、展示同一时刻。例如选择 +08:00 后,直接读取数据库的新事件时间相对 UTC 增加八小时。修改存储偏移不会批量改写旧行,应在工程开始时统一约定,查询时分别核对配置与事件的写入时间。
| 分表策略 | 报警事件的写入位置 |
|---|---|
None | 直接写基础表。 |
Day | 按事件时间的年月日分表。 |
Week | 后缀使用所属周的周一日期。 |
Month | 按事件时间的年月分表。 |
Quarter | 按年份和季度编号分表,季度不是固定九十天。 |
Year | 按事件时间的年份分表。 |
Custom | 依赖项目提供的自定义分表服务;默认服务没有规则时写基础表,选择该项不会自动生成业务后缀。 |
切换表名或策略影响后续事件,旧表不会自动合并。验证时重新产生一轮报警、确认和恢复,检查标准查询结果及实际物理表,不能只看表已创建。
历史报警表脚本
在“脚本管理”创建“动态 SQL-报警数据”脚本,编译保存后回到目标选择。“内存变量”计算脚本不能用于此处。
| 脚本职责 | 配置要求 |
|---|---|
DBInit | 建立脚本实际使用的报警表及索引。 |
DBSavable | 保存本批真实报警事件,保留报警身份、事件时间、类型及确认说明;值使用参数传入。 |
DBDeletable | 按保留天数清理旧记录,并处理取消。 |
完整示例见历史报警 SQL 脚本。绑定后,脚本接管建表、写入和清理;配置中的标准表名不代表仍向该表写入。标准查询不能推断任意自定义表结构,应使用实际数据库查询验证本次三个阶段。清空脚本绑定后恢复标准模型的后续写入,已有脚本表、数据和脚本注册仍保留。
双库与保留维护
双库验收应在主库和备用库分别定位同一次报警的发生、确认、恢复,比较稳定记录身份、事件时间、等级、文本和确认说明。只看到备用文件或目标在线不能证明已经双写。“自动检查间隔”设为 0 关闭定时检查,不关闭双写;关闭“同步到备用数据库”才停止后续双写,原备用数据保留。补齐范围和取消规则见双库维护。
保留天数按 EventTime 清理,小于 1 归一为 1,与是否确认及实时列表是否显示无关。缩短保留期会删除相应旧数据,恢复较长天数不能找回已清理记录。自定义脚本应实现同样明确的保留规则。
目标变量属性
该插件没有目标变量级附加参数。报警是否写入只由转发组范围和“最小报警等级”决定。
消息、模板与缓存
缓存与容量
| 参数 | 默认值 | 如何配置 |
|---|---|---|
| 启用失败重试缓存 | 开启 | 建议保持开启,数据库暂不可写时保留报警,恢复后自动补发。 |
| 缓存文件最大行数 | 262144 | CacheDB 出站报警上限,超过后删除最旧数据。 |
| 上传分片大小 | 2000 | 每次写入或补发的最大报警数。 |
| 内存队列上限 | 100000 | 内存报警队列达到上限后先落盘;落盘失败保留已接收报警并拒绝新记录,由上游重试。 |
| 过滤离线数据 | 关闭 | 该字段由通用目标属性提供,但历史报警的接收条件实际由转发组范围和“最小报警等级”决定;需要排除离线来源时应在转发组或报警规则中处理。 |
| 并发上传数量 | 1 | 当前报警写入按自己的队列处理,改为 4 不表示建立四个报警写线程;应结合实际写入和积压观察。 |
“上传分片大小”在此表示一次从出站队列取出的报警批量,不是 HTTP 请求数。内存队列和持久行数属于不同阶段,不能相加作为可靠容量;保留重试数也属于持久待处理记录的一部分。
关闭失败重试后,已经尝试且失败的事件没有持久重试保障。启用后应在测试环境制造短时数据库不可写,产生新的完整生命周期,恢复后逐条检查并观察队列排空。文件达到上限会淘汰最旧行,可能使某次生命周期缺项;已经取出的在途批次仍可能成功。扩大容量不能恢复已淘汰事件。
目标调试
进入“开发配置 → 数据转发”,选择当前转发组和目标后打开“调试”。
| 功能 | 作用 |
|---|---|
| 转发管线 | 查看转发组范围和进入目标的报警数据。 |
| 缓存出站 | 查看待写报警、保留重试和最近错误。 |
转发管线

“转发管线”用于确认转发组范围、目标状态和进入目标的报警数据。
缓存出站

“缓存出站”显示报警队列、CacheDB 待处理数量、保留重试数和最近错误。启用离线缓存后,数据库恢复时会继续写入待处理报警。
验证方法
- 启用转发组和目标,确认目标在线。
- 使用允许测试的变量触发一条不低于“最小报警等级”的报警,确认并填写说明,再恢复该报警。
- 查询历史报警表,按相同报警身份和发生时间核对
Alarm、Confirm、ConfirmAndFinish,并比较确认说明;未确认就恢复的过程按实际事件类型核对。 - 提高存储门槛后,再产生低于门槛的新报警,确认实时过程正常但该目标没有新增对应事件。查询筛选不会改变存储门槛或补回未保存记录。
常见问题
| 现象 | 检查方法 |
|---|---|
| 报警没有入库 | 检查报警是否实际触发、报警等级是否达到下限、目标是否在线。 |
| 目标无法启动 | 检查数据库连接、表名、分表策略和账号权限。 |
| 数据库恢复后未补写 | 检查是否启用离线缓存,并查看“缓存出站”和目标日志。 |
| 双库镜像保存或启动失败 | 确认主库与备用库不同、数据库类型受支持,且未配置历史报警表脚本。 |