跳到主要内容

历史报警存储

将达到指定等级的报警产生、确认和恢复事件写入数据库,供历史报警查询和报表使用。

转发组范围、离线缓存和启停操作见数据转发。本页只说明历史报警存储特有的表、等级过滤、双库镜像和调试功能。

保存并查询一条报警​

  1. 先给一个测试变量设置高限报警,不要用生产设备试报警。
  2. 打开“开发配置 → 数据转发”,新增 Demo_Alarm_Group,范围选“手动选择”并保存。重新编辑组,在“转发变量”选择这个测试变量,点击加号加入成员表,再保存组。
  3. 在该组下新增目标 Demo_Alarm_Target,插件选择“历史报警存储”。
  4. 目标属性中选择数据库类型 Sqlite,连接字符串填 Data Source=manual-alarm.sqlite;journal mode=WAL。保持历史报警表名 historyAlarm、最小报警等级 0,脚本留空、双库镜像关闭,其余保持默认。
  5. 保存并启用组和目标。数据库文件位于网关运行目录,该目录必须可写。
  6. 在仿真或测试变量中先产生一次报警,填写说明并确认,再让它恢复。目标启动以前已经发生的事件不能作为本次存储验证。
  7. 进入“数据与告警 → 报警查询 → 历史报警”,在“转发目标”中选择刚建的目标,选项按“组名/目标名”显示,例如 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 ServerServer=127.0.0.1,1433;Database=tgateway_alarm;User Id=history_user;Password=<密码>;TrustServerCertificate=True;
MySQLServer=127.0.0.1;Port=3306;Database=tgateway_alarm;Uid=history_user;Pwd=<密码>;
SQLiteData Source=DB/alarm.db;journal mode=WAL
PostgreSQLHost=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,与是否确认及实时列表是否显示无关。缩短保留期会删除相应旧数据,恢复较长天数不能找回已清理记录。自定义脚本应实现同样明确的保留规则。

目标变量属性​

该插件没有目标变量级附加参数。报警是否写入只由转发组范围和“最小报警等级”决定。

消息、模板与缓存​

缓存与容量​

参数默认值如何配置
启用失败重试缓存开启建议保持开启,数据库暂不可写时保留报警,恢复后自动补发。
缓存文件最大行数262144CacheDB 出站报警上限,超过后删除最旧数据。
上传分片大小2000每次写入或补发的最大报警数。
内存队列上限100000内存报警队列达到上限后先落盘;落盘失败保留已接收报警并拒绝新记录,由上游重试。
过滤离线数据关闭该字段由通用目标属性提供,但历史报警的接收条件实际由转发组范围和“最小报警等级”决定;需要排除离线来源时应在转发组或报警规则中处理。
并发上传数量1当前报警写入按自己的队列处理,改为 4 不表示建立四个报警写线程;应结合实际写入和积压观察。

“上传分片大小”在此表示一次从出站队列取出的报警批量,不是 HTTP 请求数。内存队列和持久行数属于不同阶段,不能相加作为可靠容量;保留重试数也属于持久待处理记录的一部分。

关闭失败重试后,已经尝试且失败的事件没有持久重试保障。启用后应在测试环境制造短时数据库不可写,产生新的完整生命周期,恢复后逐条检查并观察队列排空。文件达到上限会淘汰最旧行,可能使某次生命周期缺项;已经取出的在途批次仍可能成功。扩大容量不能恢复已淘汰事件。

目标调试​

进入“开发配置 → 数据转发”,选择当前转发组和目标后打开“调试”。

功能作用
转发管线查看转发组范围和进入目标的报警数据。
缓存出站查看待写报警、保留重试和最近错误。

转发管线​

历史报警存储转发管线

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

缓存出站​

历史报警存储缓存出站

“缓存出站”显示报警队列、CacheDB 待处理数量、保留重试数和最近错误。启用离线缓存后,数据库恢复时会继续写入待处理报警。

验证方法​

  1. 启用转发组和目标,确认目标在线。
  2. 使用允许测试的变量触发一条不低于“最小报警等级”的报警,确认并填写说明,再恢复该报警。
  3. 查询历史报警表,按相同报警身份和发生时间核对 Alarm、Confirm、ConfirmAndFinish,并比较确认说明;未确认就恢复的过程按实际事件类型核对。
  4. 提高存储门槛后,再产生低于门槛的新报警,确认实时过程正常但该目标没有新增对应事件。查询筛选不会改变存储门槛或补回未保存记录。

常见问题​

现象检查方法
报警没有入库检查报警是否实际触发、报警等级是否达到下限、目标是否在线。
目标无法启动检查数据库连接、表名、分表策略和账号权限。
数据库恢复后未补写检查是否启用离线缓存,并查看“缓存出站”和目标日志。
双库镜像保存或启动失败确认主库与备用库不同、数据库类型受支持,且未配置历史报警表脚本。

相关操作​

  • 数据转发:配置转发组、范围、触发、缓存、冗余和目标启停。
  • 报警配置:配置报警条件和等级。
  • 插件索引:查找其它采集或数据转发插件。