必须 ambari plus monitor 数据库初始化文件
必须ambari plus monitor 数据库初始化文件
Ambari Plus Monitor 会在元数据库里保存集群、主机、服务、组件、指标定义、告警规则、通知记录和同步任务等数据。安装 Monitor 服务前,必须先把这份初始化 SQL 导入到 Ambari Server 使用的同一个 ambari 库里。
必须
本文 SQL 要导入 Ambari 官方表所在的同一个库。本文示例库名是 ambari,不要单独创建 monitor、ambari_monitor 或其他库,否则 Monitor 安装后读不到平台已有的集群与租户上下文。
两类数据库不要混淆
本文初始化的是 Monitor 元数据库,也就是 MySQL / MariaDB 中的 ambari 库。IoTDB 的 root.monitor 用于保存时序指标,属于另一套存储。Ambari Plus 3.0.2 的 IoTDB 自建用户、角色授权和预创建数据库操作,请按 IoTDB 安装与部署 处理,不要把 IoTDB 授权语句放到 MySQL 中执行。
# 1. 放置初始化文件
把初始化文件放到 hadoop1.test.com 上,例如:
mkdir -p /data/modules/monitor
cd /data/modules/monitor
ls -lh Ambari-Plus-Monitor-DDL-MySQL-CREATE.sql
2
3
我习惯把所有安装前置 SQL 放在 /data/modules 下,这样后面排查或重装时不用到处找文件。
# 2. 导入到 ambari 库
本文示例环境使用 hadoop1.test.com 上的 MySQL / MariaDB,基础演示账号为 root / root。导入时连接 ambari 库:
mysql -uroot -p ambari < Ambari-Plus-Monitor-DDL-MySQL-CREATE.sql
注意
root / root 只适合教程环境快速跑通。生产环境建议创建专用数据库用户,并使用高复杂度密码和最小权限授权。
# 3. 验证初始化结果
导入后先看 Monitor 表数量,再抽查关键表和指标定义数据。
mysql -uroot -p -D ambari -N -e \
"SELECT COUNT(*) FROM information_schema.tables \
WHERE table_schema='ambari' AND table_name LIKE 'monitor\\_%';"
mysql -uroot -p -D ambari -N -e \
"SHOW TABLES LIKE 'monitor_cluster'; \
SHOW TABLES LIKE 'monitor_metric_definition'; \
SELECT COUNT(*) FROM monitor_metric_definition;"
2
3
4
5
6
7
8
本文环境里可以看到 38 张 Monitor 相关表,monitor_metric_definition 里已经有指标定义数据。

# 4. 初始化 SQL
下面的 SQL 可以保存为 Ambari-Plus-Monitor-DDL-MySQL-CREATE.sql 后执行。它只负责 Monitor 元数据结构和基线数据,库名由你执行时连接的数据库决定。
展开查看 Ambari Plus Monitor 初始化 SQL
SET NAMES utf8mb4;
CREATE TABLE IF NOT EXISTS `monitor_cluster` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`cluster_name` VARCHAR(128) NOT NULL COMMENT '集群名称',
`display_name` VARCHAR(128) DEFAULT NULL COMMENT '展示名称',
`ambari_cluster_id` VARCHAR(128) DEFAULT NULL COMMENT 'Ambari 集群ID',
`environment` VARCHAR(64) DEFAULT NULL COMMENT '环境标识,如 dev/prd',
`version` VARCHAR(64) DEFAULT NULL COMMENT '集群版本',
`security_type` VARCHAR(64) DEFAULT NULL COMMENT '安全模式',
`description` TEXT COMMENT '描述信息',
`health_score` INT NOT NULL DEFAULT 100 COMMENT '健康分',
`health_status` VARCHAR(32) NOT NULL DEFAULT 'HEALTHY' COMMENT '健康状态',
`total_hosts` INT NOT NULL DEFAULT 0 COMMENT '主机总数',
`total_services` INT NOT NULL DEFAULT 0 COMMENT '服务总数',
`total_components` INT NOT NULL DEFAULT 0 COMMENT '组件总数',
`alert_count` INT NOT NULL DEFAULT 0 COMMENT '当前告警数',
`tenant_id` BIGINT DEFAULT NULL COMMENT '租户ID',
`extra_info` TEXT COMMENT '扩展信息(JSON)',
`sync_time` DATETIME DEFAULT NULL COMMENT '最近一次同步时间',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_cluster_name` (`cluster_name`),
KEY `idx_cluster_tenant` (`tenant_id`),
KEY `idx_cluster_health` (`health_status`),
KEY `idx_cluster_sync` (`sync_time`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '监控集群元数据表';
CREATE TABLE IF NOT EXISTS `monitor_host` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`host_name` VARCHAR(255) NOT NULL COMMENT '主机名',
`ip_address` VARCHAR(64) DEFAULT NULL COMMENT 'IP地址',
`cluster_id` BIGINT NOT NULL COMMENT '所属集群ID',
`rack` VARCHAR(128) DEFAULT NULL COMMENT '机架',
`os_type` VARCHAR(64) DEFAULT NULL COMMENT '操作系统类型',
`cpu_arch` VARCHAR(64) DEFAULT NULL COMMENT 'CPU 架构',
`cpu_cores` INT DEFAULT NULL COMMENT 'CPU 核数',
`memory_gb` INT DEFAULT NULL COMMENT '内存大小(GB)',
`disk_gb` BIGINT DEFAULT NULL COMMENT '磁盘大小(GB)',
`agent_status` VARCHAR(32) NOT NULL DEFAULT 'UNKNOWN' COMMENT 'Agent 状态',
`agent_heartbeat_time` DATETIME DEFAULT NULL COMMENT 'Agent 最近心跳时间',
`health_score` INT NOT NULL DEFAULT 100 COMMENT '健康分',
`health_status` VARCHAR(32) NOT NULL DEFAULT 'HEALTHY' COMMENT '健康状态',
`cpu_usage` DOUBLE DEFAULT NULL COMMENT 'CPU 使用率',
`memory_usage` DOUBLE DEFAULT NULL COMMENT '内存使用率',
`disk_usage` DOUBLE DEFAULT NULL COMMENT '磁盘使用率',
`load1` DOUBLE DEFAULT NULL COMMENT '1分钟平均负载',
`load5` DOUBLE DEFAULT NULL COMMENT '5分钟平均负载',
`load15` DOUBLE DEFAULT NULL COMMENT '15分钟平均负载',
`running_component_count` INT NOT NULL DEFAULT 0 COMMENT '运行中组件实例数',
`alert_count` INT NOT NULL DEFAULT 0 COMMENT '当前告警数',
`tenant_id` BIGINT DEFAULT NULL COMMENT '租户ID',
`extra_info` TEXT COMMENT '扩展信息(JSON)',
`sync_time` DATETIME DEFAULT NULL COMMENT '最近一次同步时间',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_host_cluster_name` (`cluster_id`, `host_name`),
KEY `idx_host_name` (`host_name`),
KEY `idx_host_cluster` (`cluster_id`),
KEY `idx_host_health` (`health_status`),
KEY `idx_host_agent` (`agent_status`),
KEY `idx_host_sync` (`sync_time`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '监控主机元数据表';
CREATE TABLE IF NOT EXISTS `monitor_service` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`service_name` VARCHAR(128) NOT NULL COMMENT '服务名称',
`display_name` VARCHAR(128) DEFAULT NULL COMMENT '展示名称',
`cluster_id` BIGINT NOT NULL COMMENT '所属集群ID',
`version` VARCHAR(64) DEFAULT NULL COMMENT '服务版本',
`service_status` VARCHAR(32) NOT NULL DEFAULT 'UNKNOWN' COMMENT '服务状态',
`health_score` INT NOT NULL DEFAULT 100 COMMENT '健康分',
`health_status` VARCHAR(32) NOT NULL DEFAULT 'HEALTHY' COMMENT '健康状态',
`total_components` INT NOT NULL DEFAULT 0 COMMENT '组件总数',
`running_components` INT NOT NULL DEFAULT 0 COMMENT '运行中组件数',
`alert_count` INT NOT NULL DEFAULT 0 COMMENT '当前告警数',
`extra_info` TEXT COMMENT '扩展信息(JSON)',
`sync_time` DATETIME DEFAULT NULL COMMENT '最近一次同步时间',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_service_cluster_name` (`cluster_id`, `service_name`),
KEY `idx_service_cluster` (`cluster_id`),
KEY `idx_service_health` (`health_status`),
KEY `idx_service_sync` (`sync_time`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '监控服务元数据表';
CREATE TABLE IF NOT EXISTS `monitor_component` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`component_name` VARCHAR(128) NOT NULL COMMENT '组件名称',
`display_name` VARCHAR(128) DEFAULT NULL COMMENT '展示名称',
`service_id` BIGINT NOT NULL COMMENT '所属服务ID',
`cluster_id` BIGINT NOT NULL COMMENT '所属集群ID',
`category` VARCHAR(64) DEFAULT NULL COMMENT '组件分类',
`version` VARCHAR(64) DEFAULT NULL COMMENT '组件版本',
`component_status` VARCHAR(32) NOT NULL DEFAULT 'UNKNOWN' COMMENT '组件状态',
`health_score` INT NOT NULL DEFAULT 100 COMMENT '健康分',
`health_status` VARCHAR(32) NOT NULL DEFAULT 'HEALTHY' COMMENT '健康状态',
`total_instances` INT NOT NULL DEFAULT 0 COMMENT '实例总数',
`running_instances` INT NOT NULL DEFAULT 0 COMMENT '运行中实例数',
`alert_count` INT NOT NULL DEFAULT 0 COMMENT '当前告警数',
`dependencies` TEXT COMMENT '依赖信息(JSON)',
`data_source_type` VARCHAR(64) DEFAULT NULL COMMENT '指标来源类型',
`template_id` BIGINT DEFAULT NULL COMMENT '模板ID',
`extra_info` TEXT COMMENT '扩展信息(JSON)',
`sync_time` DATETIME DEFAULT NULL COMMENT '最近一次同步时间',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_component_service_name` (`service_id`, `component_name`),
KEY `idx_component_name` (`component_name`),
KEY `idx_component_cluster` (`cluster_id`),
KEY `idx_component_category` (`category`),
KEY `idx_component_health` (`health_status`),
KEY `idx_component_status` (`component_status`),
KEY `idx_component_sync` (`sync_time`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '监控组件元数据表';
CREATE TABLE IF NOT EXISTS `monitor_component_instance` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`component_id` BIGINT NOT NULL COMMENT '所属组件ID',
`cluster_id` BIGINT NOT NULL COMMENT '所属集群ID',
`host_id` BIGINT DEFAULT NULL COMMENT '所属主机ID',
`host_name` VARCHAR(255) NOT NULL COMMENT '主机名',
`instance_name` VARCHAR(255) DEFAULT NULL COMMENT '实例名称',
`role` VARCHAR(128) DEFAULT NULL COMMENT '实例角色',
`process_id` VARCHAR(64) DEFAULT NULL COMMENT '进程ID',
`port` INT DEFAULT NULL COMMENT '端口',
`status` VARCHAR(32) NOT NULL DEFAULT 'UNKNOWN' COMMENT '实例状态',
`health_score` INT NOT NULL DEFAULT 100 COMMENT '健康分',
`health_status` VARCHAR(32) NOT NULL DEFAULT 'HEALTHY' COMMENT '健康状态',
`heap_used_mb` BIGINT DEFAULT NULL COMMENT 'JVM 已用堆内存(MB)',
`heap_max_mb` BIGINT DEFAULT NULL COMMENT 'JVM 最大堆内存(MB)',
`cpu_usage` DOUBLE DEFAULT NULL COMMENT 'CPU 使用率',
`alert_count` INT NOT NULL DEFAULT 0 COMMENT '当前告警数',
`extra_info` TEXT COMMENT '扩展信息(JSON)',
`sync_time` DATETIME DEFAULT NULL COMMENT '最近一次同步时间',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_instance_component_host` (`component_id`, `host_name`),
KEY `idx_instance_host` (`host_id`),
KEY `idx_instance_cluster` (`cluster_id`),
KEY `idx_instance_name` (`instance_name`),
KEY `idx_instance_status` (`status`),
KEY `idx_instance_sync` (`sync_time`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '监控组件实例元数据表';
-- ============================================================
-- 统一服务快照表
-- ============================================================
CREATE TABLE IF NOT EXISTS `monitor_service_snapshot` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键 ID',
`cluster_id` BIGINT NOT NULL COMMENT '集群 ID',
`cluster_name` VARCHAR(128) NOT NULL COMMENT '集群名称',
`service_id` BIGINT NOT NULL COMMENT '服务 ID',
`service_name` VARCHAR(64) NOT NULL COMMENT '服务名称(HDFS/YARN/KAFKA/HIVE/HBASE/SPARK/FLINK)',
`health_score` INT DEFAULT 100 COMMENT '健康分(0-100)',
`risk_level` VARCHAR(16) DEFAULT 'UNKNOWN' COMMENT '风险等级(HIGH/MEDIUM/LOW/UNKNOWN)',
`metrics_json` JSON DEFAULT NULL COMMENT '服务特有指标 JSON',
`snapshot_time` DATETIME NOT NULL COMMENT '快照时间点',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_service_snapshot_time` (`cluster_id`, `service_name`, `snapshot_time`),
KEY `idx_cluster_service` (`cluster_id`, `service_name`),
KEY `idx_snapshot_time` (`snapshot_time`),
KEY `idx_cluster_service_time` (`cluster_id`, `service_name`, `snapshot_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='统一的服务快照表';
CREATE TABLE IF NOT EXISTS `monitor_alert_rule` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`rule_name` VARCHAR(128) NOT NULL COMMENT '规则名称',
`display_name` VARCHAR(128) DEFAULT NULL COMMENT '展示名称',
`rule_type` VARCHAR(64) NOT NULL COMMENT '规则类型',
`rule_group_id` BIGINT DEFAULT NULL COMMENT '规则分组ID',
`component_name` VARCHAR(128) DEFAULT NULL COMMENT '组件名称',
`metric_name` VARCHAR(255) DEFAULT NULL COMMENT '指标名称',
`expression` TEXT COMMENT '规则表达式',
`condition` VARCHAR(64) DEFAULT NULL COMMENT '比较条件',
`threshold` DOUBLE DEFAULT NULL COMMENT '阈值',
`duration` INT NOT NULL DEFAULT 0 COMMENT '持续时长(秒)',
`severity` VARCHAR(16) NOT NULL DEFAULT 'P3' COMMENT '告警级别',
`message_template` TEXT COMMENT '告警消息模板',
`description` TEXT COMMENT '规则描述',
`enabled` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用',
`labels` TEXT COMMENT '标签(JSON)',
`annotations` TEXT COMMENT '注解(JSON)',
`extra_info` TEXT COMMENT '扩展信息(JSON)',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_rule_enabled` (`enabled`),
KEY `idx_rule_name` (`rule_name`),
KEY `idx_rule_component_metric` (`component_name`, `metric_name`),
KEY `idx_rule_severity` (`severity`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '监控告警规则表';
CREATE TABLE IF NOT EXISTS `monitor_alert_event` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`fingerprint` VARCHAR(255) NOT NULL COMMENT '告警指纹,用于去重',
`rule_id` BIGINT DEFAULT NULL COMMENT '规则ID',
`rule_name` VARCHAR(128) DEFAULT NULL COMMENT '规则名称',
`severity` VARCHAR(16) NOT NULL DEFAULT 'P3' COMMENT '告警级别',
`status` VARCHAR(32) NOT NULL DEFAULT 'FIRING' COMMENT '告警状态',
`cluster_id` BIGINT DEFAULT NULL COMMENT '集群ID',
`cluster_name` VARCHAR(128) DEFAULT NULL COMMENT '集群名称',
`service_name` VARCHAR(128) DEFAULT NULL COMMENT '服务名称',
`component_name` VARCHAR(128) DEFAULT NULL COMMENT '组件名称',
`host_name` VARCHAR(255) DEFAULT NULL COMMENT '主机名',
`instance_name` VARCHAR(255) DEFAULT NULL COMMENT '实例名称',
`event_source` VARCHAR(32) NOT NULL DEFAULT 'THRESHOLD_ENGINE' COMMENT '告警来源: THRESHOLD_ENGINE/AMBARI_OFFICIAL',
`source_ref` VARCHAR(255) DEFAULT NULL COMMENT '来源侧稳定标识',
`source_state` VARCHAR(32) DEFAULT NULL COMMENT '来源侧状态',
`maintenance_state` VARCHAR(32) DEFAULT NULL COMMENT 'Ambari维护状态',
`title` VARCHAR(255) DEFAULT NULL COMMENT '告警标题',
`message` TEXT COMMENT '告警内容',
`current_value` DOUBLE DEFAULT NULL COMMENT '当前值',
`threshold` DOUBLE DEFAULT NULL COMMENT '阈值',
`fired_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '触发时间',
`resolved_time` DATETIME DEFAULT NULL COMMENT '恢复时间',
`acknowledged_time` DATETIME DEFAULT NULL COMMENT '确认时间',
`acknowledged_by` VARCHAR(128) DEFAULT NULL COMMENT '确认人',
`labels` TEXT COMMENT '标签(JSON)',
`annotations` TEXT COMMENT '注解(JSON)',
`extra_info` TEXT COMMENT '扩展信息(JSON)',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_event_fingerprint_status` (`fingerprint`, `status`),
KEY `idx_event_status_severity` (`status`, `severity`),
KEY `idx_event_cluster` (`cluster_name`),
KEY `idx_event_service` (`service_name`),
KEY `idx_event_component` (`component_name`),
KEY `idx_event_host` (`host_name`),
KEY `idx_event_source` (`event_source`, `source_ref`),
KEY `idx_event_rule` (`rule_id`),
KEY `idx_event_fired_time` (`fired_time`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '监控告警事件表';
CREATE TABLE IF NOT EXISTS `monitor_official_alert_snapshot` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`cluster_name` VARCHAR(128) NOT NULL COMMENT '集群名称',
`ambari_alert_id` BIGINT DEFAULT NULL COMMENT 'Ambari Alert/id',
`definition_id` BIGINT NOT NULL COMMENT 'Ambari Alert/definition_id',
`definition_name` VARCHAR(255) DEFAULT NULL COMMENT 'Ambari告警定义名称',
`label` VARCHAR(255) DEFAULT NULL COMMENT 'Ambari告警展示名称',
`state` VARCHAR(32) NOT NULL COMMENT 'Ambari状态: OK/WARNING/CRITICAL/UNKNOWN',
`service_name` VARCHAR(128) DEFAULT NULL COMMENT '服务名称',
`component_name` VARCHAR(128) DEFAULT NULL COMMENT '组件名称',
`host_name` VARCHAR(255) NOT NULL DEFAULT '*' COMMENT '主机名,集群级告警为*',
`instance_name` VARCHAR(255) NOT NULL DEFAULT '*' COMMENT '实例名,无实例为*',
`alert_scope` VARCHAR(32) DEFAULT NULL COMMENT 'Ambari Alert/scope',
`maintenance_state` VARCHAR(32) DEFAULT NULL COMMENT 'Ambari维护状态',
`alert_text` TEXT COMMENT '告警正文',
`original_timestamp` BIGINT DEFAULT NULL COMMENT 'Ambari原始触发时间戳',
`latest_timestamp` BIGINT DEFAULT NULL COMMENT 'Ambari最新时间戳',
`occurrences` INT DEFAULT NULL COMMENT 'Ambari occurrence次数',
`raw_json` TEXT COMMENT '原始JSON',
`sync_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '同步时间',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_official_alert_scope` (`cluster_name`, `definition_id`, `host_name`, `instance_name`),
KEY `idx_official_alert_state` (`cluster_name`, `state`),
KEY `idx_official_alert_service` (`cluster_name`, `service_name`, `component_name`),
KEY `idx_official_alert_host` (`cluster_name`, `host_name`),
KEY `idx_official_alert_sync` (`sync_time`)
) DEFAULT CHARSET = utf8mb4 COMMENT = 'Ambari内置健康告警快照表';
CREATE TABLE IF NOT EXISTS `monitor_health_snapshot` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`object_type` VARCHAR(32) NOT NULL COMMENT '对象类型(CLUSTER/HOST/COMPONENT/INSTANCE)',
`object_id` BIGINT NOT NULL COMMENT '对象ID',
`object_name` VARCHAR(255) NOT NULL COMMENT '对象名称',
`cluster_id` BIGINT DEFAULT NULL COMMENT '所属集群ID',
`health_score` INT NOT NULL DEFAULT 100 COMMENT '综合健康分',
`health_status` VARCHAR(32) NOT NULL DEFAULT 'HEALTHY' COMMENT '健康状态',
`availability_score` INT NOT NULL DEFAULT 0 COMMENT '可用性得分',
`alert_score` INT NOT NULL DEFAULT 0 COMMENT '告警得分',
`performance_score` INT NOT NULL DEFAULT 0 COMMENT '性能得分',
`capacity_score` INT NOT NULL DEFAULT 0 COMMENT '容量得分',
`dependency_score` INT NOT NULL DEFAULT 0 COMMENT '依赖得分',
`stability_score` INT NOT NULL DEFAULT 0 COMMENT '稳定性得分',
`alert_count` INT NOT NULL DEFAULT 0 COMMENT '告警数',
`p1_count` INT NOT NULL DEFAULT 0 COMMENT 'P1 告警数',
`p2_count` INT NOT NULL DEFAULT 0 COMMENT 'P2 告警数',
`p3_count` INT NOT NULL DEFAULT 0 COMMENT 'P3 告警数',
`p4_count` INT NOT NULL DEFAULT 0 COMMENT 'P4 告警数',
`snapshot_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '快照时间',
`extra_info` TEXT COMMENT '扩展信息(JSON)',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `idx_snapshot_object_time` (`object_type`, `object_id`, `snapshot_time`),
KEY `idx_snapshot_cluster_time` (`cluster_id`, `snapshot_time`),
KEY `idx_snapshot_status_time` (`health_status`, `snapshot_time`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '健康分快照历史表';
CREATE TABLE IF NOT EXISTS `monitor_agent_dynamic_config` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`agent_id` VARCHAR(255) NOT NULL COMMENT 'Agent 唯一标识,对应 monitor.agent.agent-id',
`cluster_name` VARCHAR(128) DEFAULT NULL COMMENT '集群名称,仅用于展示和检索',
`host_name` VARCHAR(255) DEFAULT NULL COMMENT '主机名称,仅用于展示和检索',
`enabled` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用动态配置',
`config_version` BIGINT NOT NULL DEFAULT 1 COMMENT '配置版本号,每次发布递增',
`description` VARCHAR(512) DEFAULT NULL COMMENT '配置说明',
`published_by` VARCHAR(128) DEFAULT NULL COMMENT '发布人',
`published_time` DATETIME DEFAULT NULL COMMENT '发布时间',
`config_content` LONGTEXT COMMENT '动态配置 JSON 内容',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_agent_dynamic_config_agent_id` (`agent_id`),
KEY `idx_agent_dynamic_config_cluster` (`cluster_name`),
KEY `idx_agent_dynamic_config_host` (`host_name`),
KEY `idx_agent_dynamic_config_enabled` (`enabled`)
) DEFAULT CHARSET = utf8mb4 COMMENT = 'Agent 动态采集配置表';
-- ============================================================
-- 阈值管理核心表
-- 说明:
-- 1. 这 5 张表为阈值管理一期最小闭环
-- 2. 支撑指标定义、阈值策略、作用范围、生效快照、命中事件
-- 3. 原始时序仍保存在 IoTDB,这里只保存定义和结果
-- ============================================================
CREATE TABLE IF NOT EXISTS `monitor_metric_definition` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`metric_code` VARCHAR(300) NOT NULL COMMENT '正式查询指标编码,恒等于tt_ + metric_name',
`metric_name` VARCHAR(255) NOT NULL COMMENT 'IoTDB稳定指标名,不带tt_前缀',
`display_name` VARCHAR(255) DEFAULT NULL COMMENT '指标展示名称',
`metric_group` VARCHAR(64) NOT NULL COMMENT '一级分组,如 host/hdfs/yarn',
`priority` VARCHAR(8) DEFAULT 'P2' COMMENT '指标优先级: P0核心/P1重要/P2扩展',
`sub_group` VARCHAR(64) DEFAULT NULL COMMENT '二级分组,如 cpu/memory/io',
`unit` VARCHAR(64) DEFAULT NULL COMMENT '单位',
`metric_type` VARCHAR(32) NOT NULL DEFAULT 'GAUGE' COMMENT 'GAUGE/COUNTER/STATE',
`metric_kind` VARCHAR(32) NOT NULL DEFAULT 'COLLECTED' COMMENT '指标值来源形态:COLLECTED采集值/DERIVED加工值',
`service_name` VARCHAR(128) DEFAULT NULL COMMENT '服务名,如HDFS/YARN/HBASE/host',
`component_name` VARCHAR(128) DEFAULT NULL COMMENT '组件名,如NAMENODE/DATANODE/host',
`compute_type` VARCHAR(32) NOT NULL DEFAULT 'NONE' COMMENT '计算类型:NONE/REALTIME/SCHEDULED/OFFLINE',
`source_profile` VARCHAR(64) NOT NULL DEFAULT 'CORE' COMMENT '来源画像:CORE/EXTENDED/FULL_DISCOVERY/DERIVED_PLATFORM/OFFLINE_ANALYZER',
`ingest_status` VARCHAR(32) NOT NULL DEFAULT 'CANDIDATE' COMMENT '入库状态:ENABLED/CANDIDATE/DISABLED/REJECTED',
`stability_status` VARCHAR(32) NOT NULL DEFAULT 'UNKNOWN' COMMENT '稳定性:STABLE/UNSTABLE/UNKNOWN',
`metadata_status` VARCHAR(32) NOT NULL DEFAULT 'UNKNOWN' COMMENT '指标元数据状态:VERIFIED/INFERRED/UNKNOWN',
`metadata_source` VARCHAR(64) NOT NULL DEFAULT 'FALLBACK' COMMENT '指标元数据来源:BUILT_IN/STACK/COLLECTOR_LABEL/PATTERN/FALLBACK',
`first_seen_time` DATETIME DEFAULT NULL COMMENT '首次发现时间',
`last_seen_time` DATETIME DEFAULT NULL COMMENT '最近发现时间',
`seen_count` BIGINT NOT NULL DEFAULT 0 COMMENT '累计发现次数',
`sample_path` VARCHAR(1024) DEFAULT NULL COMMENT '发现时的IoTDB路径样例',
`sample_labels` TEXT COMMENT '发现时的标签样例(JSON)',
`depends_on_metrics` TEXT COMMENT 'DERIVED指标依赖的基础指标(JSON)',
`compute_owner` VARCHAR(128) DEFAULT NULL COMMENT '计算指标所属服务或任务',
`compute_interval_sec` INT DEFAULT NULL COMMENT '计算周期(秒)',
`reject_reason` VARCHAR(512) DEFAULT NULL COMMENT '拒绝原因',
`value_type` VARCHAR(32) NOT NULL DEFAULT 'NUMBER' COMMENT 'NUMBER/STRING/BOOLEAN/ENUM',
`aggregation_mode` VARCHAR(32) NOT NULL DEFAULT 'AVG' COMMENT '默认聚合方式',
`label_keys` TEXT COMMENT '标签键列表(JSON/TEXT)',
`default_chart_type` VARCHAR(32) DEFAULT 'LINE' COMMENT '默认图表类型',
`default_time_range` VARCHAR(32) DEFAULT '1h' COMMENT '默认时间范围',
`display_order` INT NOT NULL DEFAULT 0 COMMENT '展示顺序',
`enable_fixed_threshold` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否支持固定阈值',
`enable_smart_threshold` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否支持智能阈值',
`enable_alert` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否支持告警',
`enable_health_score` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否参与健康分',
`health_score_weight` INT DEFAULT 0 COMMENT '健康分权重',
`description` TEXT COMMENT '描述',
`extra_info` TEXT COMMENT '扩展配置(JSON)',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_metric_code` (`metric_code`),
UNIQUE KEY `uk_metric_name` (`metric_name`),
KEY `idx_metric_group` (`metric_group`, `sub_group`),
KEY `idx_metric_kind` (`metric_kind`),
KEY `idx_metric_ingest_status` (`ingest_status`, `source_profile`),
KEY `idx_metric_compute_type` (`metric_kind`, `compute_type`),
KEY `idx_metric_service` (`service_name`, `component_name`),
KEY `idx_metric_last_seen` (`last_seen_time`),
KEY `idx_metric_metadata` (`metadata_status`, `metadata_source`),
KEY `idx_metric_alert` (`enable_alert`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '监控指标定义与入库策略表';
CREATE TABLE IF NOT EXISTS `monitor_threshold_policy` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`policy_code` VARCHAR(128) NOT NULL COMMENT '策略编码,唯一',
`policy_name` VARCHAR(255) NOT NULL COMMENT '策略名称',
`metric_code` VARCHAR(300) NOT NULL COMMENT '指标编码',
`policy_source` VARCHAR(32) NOT NULL DEFAULT 'SYSTEM' COMMENT 'SYSTEM/CUSTOM/ALGORITHM',
`threshold_mode` VARCHAR(32) NOT NULL DEFAULT 'FIXED_ONLY' COMMENT '阈值模式,当前默认 FIXED_ONLY',
`merge_mode` VARCHAR(32) DEFAULT NULL COMMENT '融合模式,预留',
`condition_operator` VARCHAR(32) NOT NULL COMMENT 'GT/GTE/LT/LTE/EQ/NE/BETWEEN/NOT_BETWEEN/IN/NOT_IN',
`condition_value1` VARCHAR(255) DEFAULT NULL COMMENT '条件值1',
`condition_value2` VARCHAR(255) DEFAULT NULL COMMENT '条件值2',
`condition_value_type` VARCHAR(32) NOT NULL DEFAULT 'NUMBER' COMMENT 'NUMBER/STRING/BOOLEAN/ENUM/JSON',
`condition_value_list` TEXT COMMENT '集合条件值(JSON/TEXT)',
`severity` VARCHAR(16) NOT NULL DEFAULT 'WARNING' COMMENT 'WARNING/CRITICAL/INFO',
`trigger_window_type` VARCHAR(32) NOT NULL DEFAULT 'CONSECUTIVE' COMMENT 'CONSECUTIVE/COUNT_IN_WINDOW/IMMEDIATE',
`trigger_window_size` INT NOT NULL DEFAULT 1 COMMENT '触发窗口大小',
`trigger_match_count` INT NOT NULL DEFAULT 1 COMMENT '窗口中命中次数',
`recover_window_type` VARCHAR(32) NOT NULL DEFAULT 'CONSECUTIVE' COMMENT '恢复窗口类型',
`recover_window_size` INT NOT NULL DEFAULT 1 COMMENT '恢复窗口大小',
`recover_match_count` INT NOT NULL DEFAULT 1 COMMENT '恢复窗口命中次数',
`priority` INT NOT NULL DEFAULT 100 COMMENT '优先级,越小越高',
`version` INT NOT NULL DEFAULT 1 COMMENT '版本号',
`enabled` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用',
`effective_from` DATETIME DEFAULT NULL COMMENT '生效开始时间',
`effective_to` DATETIME DEFAULT NULL COMMENT '生效结束时间',
`description` TEXT COMMENT '描述',
`extra_info` TEXT COMMENT '扩展配置(JSON)',
`create_by` VARCHAR(128) DEFAULT NULL COMMENT '创建人',
`update_by` VARCHAR(128) DEFAULT NULL COMMENT '修改人',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_threshold_policy_code` (`policy_code`),
KEY `idx_threshold_metric` (`metric_code`),
KEY `idx_threshold_enabled` (`enabled`, `policy_source`),
KEY `idx_threshold_mode` (`threshold_mode`, `severity`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '阈值策略表';
CREATE TABLE IF NOT EXISTS `monitor_threshold_policy_scope` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`policy_id` BIGINT NOT NULL COMMENT '策略ID',
`scope_type` VARCHAR(32) NOT NULL COMMENT 'GLOBAL/CLUSTER/HOST/SERVICE/COMPONENT/COMPONENT_INSTANCE',
`scope_ref` VARCHAR(512) NOT NULL COMMENT '作用对象标识',
`scope_name` VARCHAR(255) DEFAULT NULL COMMENT '作用对象名称',
`scope_priority` INT NOT NULL DEFAULT 100 COMMENT '范围优先级,越小越高',
`enabled` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_policy_scope` (`policy_id`, `scope_type`, `scope_ref`(255)),
KEY `idx_scope_lookup` (`scope_type`, `scope_ref`(255), `enabled`),
KEY `idx_scope_policy` (`policy_id`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '阈值策略作用范围表';
CREATE TABLE IF NOT EXISTS `monitor_threshold_snapshot` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`metric_code` VARCHAR(300) NOT NULL COMMENT '指标编码',
`scope_type` VARCHAR(32) NOT NULL COMMENT '作用对象类型',
`scope_ref` VARCHAR(512) NOT NULL COMMENT '作用对象标识',
`scope_name` VARCHAR(255) DEFAULT NULL COMMENT '作用对象名称',
`policy_id` BIGINT DEFAULT NULL COMMENT '命中的主策略ID',
`policy_code` VARCHAR(128) DEFAULT NULL COMMENT '命中的主策略编码',
`policy_version` INT DEFAULT NULL COMMENT '策略版本',
`policy_source` VARCHAR(32) DEFAULT NULL COMMENT '策略来源',
`threshold_mode` VARCHAR(32) NOT NULL DEFAULT 'FIXED_ONLY' COMMENT '生效模式',
`merge_mode` VARCHAR(32) DEFAULT NULL COMMENT '融合模式',
`fixed_upper` DOUBLE DEFAULT NULL COMMENT '固定上限',
`fixed_lower` DOUBLE DEFAULT NULL COMMENT '固定下限',
`smart_upper` DOUBLE DEFAULT NULL COMMENT '智能上限',
`smart_lower` DOUBLE DEFAULT NULL COMMENT '智能下限',
`effective_operator` VARCHAR(32) DEFAULT NULL COMMENT '最终生效操作符',
`effective_value1` VARCHAR(255) DEFAULT NULL COMMENT '最终值1',
`effective_value2` VARCHAR(255) DEFAULT NULL COMMENT '最终值2',
`effective_upper` DOUBLE DEFAULT NULL COMMENT '最终上限',
`effective_lower` DOUBLE DEFAULT NULL COMMENT '最终下限',
`sample_count` INT NOT NULL DEFAULT 0 COMMENT '样本数',
`window_start` DATETIME DEFAULT NULL COMMENT '计算窗口开始',
`window_end` DATETIME DEFAULT NULL COMMENT '计算窗口结束',
`calculated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '计算时间',
`expire_at` DATETIME DEFAULT NULL COMMENT '过期时间',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_threshold_snapshot` (`metric_code`, `scope_type`, `scope_ref`(255)),
KEY `idx_snapshot_metric_scope` (`metric_code`, `scope_type`, `scope_ref`(255)),
KEY `idx_snapshot_policy` (`policy_id`, `policy_version`),
KEY `idx_threshold_snapshot_coverage` (`policy_source`, `sample_count`),
KEY `idx_snapshot_time` (`calculated_at`, `expire_at`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '当前生效阈值快照表';
CREATE TABLE IF NOT EXISTS `monitor_threshold_recommendation` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`recommendation_code` VARCHAR(128) NOT NULL COMMENT '推荐编码,唯一',
`metric_code` VARCHAR(300) NOT NULL COMMENT '指标编码',
`scope_type` VARCHAR(32) NOT NULL COMMENT '作用对象类型',
`scope_ref` VARCHAR(512) NOT NULL COMMENT '作用对象标识',
`scope_name` VARCHAR(255) DEFAULT NULL COMMENT '作用对象名称',
`current_policy_id` BIGINT DEFAULT NULL COMMENT '当前生效策略ID',
`current_policy_code` VARCHAR(128) DEFAULT NULL COMMENT '当前生效策略编码',
`current_policy_source` VARCHAR(32) DEFAULT NULL COMMENT '当前生效策略来源',
`recommended_operator` VARCHAR(32) NOT NULL COMMENT '推荐操作符',
`recommended_value1` VARCHAR(255) DEFAULT NULL COMMENT '推荐值1',
`recommended_value2` VARCHAR(255) DEFAULT NULL COMMENT '推荐值2',
`recommended_upper` DOUBLE DEFAULT NULL COMMENT '推荐上限',
`recommended_lower` DOUBLE DEFAULT NULL COMMENT '推荐下限',
`algorithm_name` VARCHAR(128) DEFAULT NULL COMMENT '算法名称',
`algorithm_version` VARCHAR(64) DEFAULT NULL COMMENT '算法版本',
`sample_count` INT NOT NULL DEFAULT 0 COMMENT '样本数',
`window_start` DATETIME DEFAULT NULL COMMENT '样本窗口开始',
`window_end` DATETIME DEFAULT NULL COMMENT '样本窗口结束',
`confidence` DOUBLE DEFAULT NULL COMMENT '置信度,0-1',
`status` VARCHAR(32) NOT NULL DEFAULT 'PENDING' COMMENT 'PENDING/APPLIED/REJECTED/EXPIRED',
`change_reason` VARCHAR(1024) DEFAULT NULL COMMENT '推荐阈值变化原因',
`extra_info` TEXT COMMENT '扩展信息(JSON)',
`review_by` VARCHAR(128) DEFAULT NULL COMMENT '审核人',
`review_reason` VARCHAR(1024) DEFAULT NULL COMMENT '审核原因',
`review_time` DATETIME DEFAULT NULL COMMENT '审核时间',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_threshold_recommendation_code` (`recommendation_code`),
KEY `idx_recommendation_metric_scope` (`metric_code`, `scope_type`, `scope_ref`(255), `status`),
KEY `idx_recommendation_policy` (`current_policy_id`, `current_policy_source`),
KEY `idx_recommendation_window` (`window_start`, `window_end`),
KEY `idx_recommendation_time` (`create_time`, `review_time`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '智能阈值推荐记录表';
CREATE TABLE IF NOT EXISTS `monitor_threshold_event` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`event_code` VARCHAR(128) NOT NULL COMMENT '事件编码,唯一',
`metric_code` VARCHAR(300) NOT NULL COMMENT '指标编码',
`scope_type` VARCHAR(32) NOT NULL COMMENT '作用对象类型',
`scope_ref` VARCHAR(512) NOT NULL COMMENT '作用对象标识',
`scope_name` VARCHAR(255) DEFAULT NULL COMMENT '作用对象名称',
`cluster_name` VARCHAR(128) DEFAULT NULL COMMENT '事件所属集群名',
`service_name` VARCHAR(128) DEFAULT NULL COMMENT '事件所属服务名',
`component_name` VARCHAR(128) DEFAULT NULL COMMENT '事件所属组件名',
`instance_name` VARCHAR(255) DEFAULT NULL COMMENT '组件实例名',
`host_name` VARCHAR(255) DEFAULT NULL COMMENT '事件关联主机名',
`policy_id` BIGINT DEFAULT NULL COMMENT '命中的策略ID',
`policy_code` VARCHAR(128) DEFAULT NULL COMMENT '命中的策略编码',
`policy_version` INT DEFAULT NULL COMMENT '策略版本',
`policy_source` VARCHAR(32) DEFAULT NULL COMMENT '策略来源',
`event_level` VARCHAR(16) NOT NULL DEFAULT 'WARNING' COMMENT 'INFO/WARNING/CRITICAL',
`status` VARCHAR(32) NOT NULL DEFAULT 'PENDING' COMMENT 'PENDING/FIRING/ACKED/SILENCED/RECOVERED/CLOSED',
`match_direction` VARCHAR(16) DEFAULT NULL COMMENT 'UPPER/LOWER/IN/OUT/EQ/NE',
`actual_value` VARCHAR(255) DEFAULT NULL COMMENT '实际值',
`effective_operator` VARCHAR(32) DEFAULT NULL COMMENT '最终生效操作符',
`effective_value1` VARCHAR(255) DEFAULT NULL COMMENT '最终值1',
`effective_value2` VARCHAR(255) DEFAULT NULL COMMENT '最终值2',
`effective_upper` DOUBLE DEFAULT NULL COMMENT '最终上限',
`effective_lower` DOUBLE DEFAULT NULL COMMENT '最终下限',
`sample_time` DATETIME DEFAULT NULL COMMENT '样本时间',
`occurred_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '首次命中时间',
`firing_at` DATETIME DEFAULT NULL COMMENT '正式触发时间',
`acked_at` DATETIME DEFAULT NULL COMMENT '确认时间',
`silenced_at` DATETIME DEFAULT NULL COMMENT '静默时间',
`recovered_at` DATETIME DEFAULT NULL COMMENT '恢复时间',
`closed_at` DATETIME DEFAULT NULL COMMENT '关闭时间',
`suppressed` TINYINT(1) DEFAULT 0 COMMENT '是否被抑制',
`suppression_type` VARCHAR(32) DEFAULT NULL COMMENT '抑制类型:MAINTENANCE_WINDOW/SILENCE_RULE',
`suppression_reason` VARCHAR(512) DEFAULT NULL COMMENT '抑制原因描述',
`suppressed_by_event_id` BIGINT DEFAULT NULL COMMENT '被哪个上游事件抑制',
`extra_info` TEXT COMMENT '扩展信息(JSON)',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_threshold_event_code` (`event_code`),
KEY `idx_event_scope` (`scope_type`, `scope_ref`(255), `status`),
KEY `idx_event_object` (`cluster_name`, `service_name`, `component_name`, `host_name`, `status`),
KEY `idx_event_metric` (`metric_code`, `event_level`, `status`),
KEY `idx_event_time` (`occurred_at`, `firing_at`, `recovered_at`),
KEY `idx_event_suppressed` (`suppressed`, `suppression_type`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '阈值命中事件表';
CREATE TABLE IF NOT EXISTS `monitor_threshold_event_action` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`action_code` VARCHAR(128) NOT NULL COMMENT '处置动作编码,唯一',
`event_id` BIGINT NOT NULL COMMENT '告警事件ID',
`event_code` VARCHAR(128) NOT NULL COMMENT '告警事件编码',
`action_type` VARCHAR(32) NOT NULL COMMENT 'ACK/CLOSE/SILENCE/MAINTENANCE/COMMENT',
`action_status` VARCHAR(32) NOT NULL DEFAULT 'SUCCESS' COMMENT 'SUCCESS/FAILED/PENDING',
`operator` VARCHAR(128) DEFAULT NULL COMMENT '操作人',
`reason` VARCHAR(1024) DEFAULT NULL COMMENT '处置原因',
`action_content` TEXT COMMENT '处置内容(JSON/TEXT)',
`linked_silence_id` BIGINT DEFAULT NULL COMMENT '关联静默规则ID',
`linked_window_id` BIGINT DEFAULT NULL COMMENT '关联维护窗口ID',
`start_time` DATETIME DEFAULT NULL COMMENT '动作生效开始时间',
`end_time` DATETIME DEFAULT NULL COMMENT '动作生效结束时间',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_threshold_event_action_code` (`action_code`),
KEY `idx_action_event` (`event_id`, `action_type`, `create_time`),
KEY `idx_action_event_code` (`event_code`, `action_type`, `create_time`),
KEY `idx_action_operator` (`operator`, `create_time`),
KEY `idx_action_linked_silence` (`linked_silence_id`),
KEY `idx_action_linked_window` (`linked_window_id`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '告警事件处置动作流水表';
CREATE TABLE IF NOT EXISTS `monitor_threshold_audit_log` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`target_type` VARCHAR(64) NOT NULL COMMENT 'POLICY/SCOPE/SNAPSHOT/SILENCE/WINDOW',
`target_id` BIGINT DEFAULT NULL COMMENT '目标ID',
`target_code` VARCHAR(128) DEFAULT NULL COMMENT '目标编码',
`operation_type` VARCHAR(64) NOT NULL COMMENT 'CREATE/UPDATE/DELETE/ENABLE/DISABLE/PUBLISH/ROLLBACK',
`operator` VARCHAR(128) DEFAULT NULL COMMENT '操作人',
`before_value` LONGTEXT COMMENT '变更前(JSON)',
`after_value` LONGTEXT COMMENT '变更后(JSON)',
`remark` VARCHAR(512) DEFAULT NULL COMMENT '备注',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `idx_audit_target` (`target_type`, `target_id`),
KEY `idx_audit_code` (`target_code`),
KEY `idx_audit_time` (`create_time`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '阈值审计日志表';
CREATE TABLE IF NOT EXISTS `monitor_maintenance_window` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`window_code` VARCHAR(128) NOT NULL COMMENT '维护窗口编码',
`window_name` VARCHAR(255) NOT NULL COMMENT '维护窗口名称',
`scope_type` VARCHAR(32) NOT NULL COMMENT '作用对象类型',
`scope_ref` VARCHAR(512) NOT NULL COMMENT '作用对象标识',
`scope_name` VARCHAR(255) DEFAULT NULL COMMENT '作用对象名称',
`start_time` DATETIME NOT NULL COMMENT '开始时间',
`end_time` DATETIME NOT NULL COMMENT '结束时间',
`enabled` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用',
`description` TEXT COMMENT '描述',
`create_by` VARCHAR(128) DEFAULT NULL COMMENT '创建人',
`update_by` VARCHAR(128) DEFAULT NULL COMMENT '修改人',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_window_code` (`window_code`),
KEY `idx_window_scope` (`scope_type`, `scope_ref`(255), `enabled`),
KEY `idx_window_time` (`start_time`, `end_time`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '维护窗口表';
CREATE TABLE IF NOT EXISTS `monitor_silence_rule` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`silence_code` VARCHAR(128) NOT NULL COMMENT '静默规则编码',
`silence_name` VARCHAR(255) NOT NULL COMMENT '静默规则名称',
`metric_code` VARCHAR(300) DEFAULT NULL COMMENT '可选,静默某指标',
`scope_type` VARCHAR(32) NOT NULL COMMENT '作用对象类型',
`scope_ref` VARCHAR(512) NOT NULL COMMENT '作用对象标识',
`scope_name` VARCHAR(255) DEFAULT NULL COMMENT '作用对象名称',
`event_level` VARCHAR(16) DEFAULT NULL COMMENT '可选,静默某级别',
`silence_mode` VARCHAR(32) NOT NULL DEFAULT 'SUPPRESS_NOTIFY' COMMENT 'SUPPRESS_NOTIFY/SUPPRESS_EVENT',
`start_time` DATETIME NOT NULL COMMENT '开始时间',
`end_time` DATETIME NOT NULL COMMENT '结束时间',
`enabled` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用',
`description` TEXT COMMENT '描述',
`create_by` VARCHAR(128) DEFAULT NULL COMMENT '创建人',
`update_by` VARCHAR(128) DEFAULT NULL COMMENT '修改人',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_silence_code` (`silence_code`),
KEY `idx_silence_scope` (`scope_type`, `scope_ref`(255), `enabled`),
KEY `idx_silence_metric` (`metric_code`, `event_level`),
KEY `idx_silence_time` (`start_time`, `end_time`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '静默规则表';
CREATE TABLE IF NOT EXISTS `monitor_ha_lock` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`lock_name` VARCHAR(128) NOT NULL COMMENT '锁名称',
`owner_id` VARCHAR(255) DEFAULT NULL COMMENT '当前持锁实例标识',
`lock_token` VARCHAR(64) DEFAULT NULL COMMENT '当前租约 token',
`lock_until` DATETIME NOT NULL COMMENT '锁过期时间',
`last_heartbeat_time` DATETIME DEFAULT NULL COMMENT '最近一次续租时间',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_monitor_ha_lock_name` (`lock_name`),
KEY `idx_monitor_ha_lock_until` (`lock_until`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '高可用租约锁表';
CREATE TABLE IF NOT EXISTS `monitor_metric_dedupe_key` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`dedupe_hash` CHAR(40) NOT NULL COMMENT '去重键哈希(SHA1)',
`dedupe_key` VARCHAR(1024) NOT NULL COMMENT '去重键原文',
`expire_time` DATETIME NOT NULL COMMENT '过期时间',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_metric_dedupe_hash` (`dedupe_hash`),
KEY `idx_metric_dedupe_expire_time` (`expire_time`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '指标写入去重键表';
CREATE TABLE IF NOT EXISTS `monitor_metric_ingest_batch` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`component_name` VARCHAR(64) NOT NULL COMMENT '组件名称,例如 HDFS',
`cluster_name` VARCHAR(128) NOT NULL COMMENT '集群名称',
`source_job` VARCHAR(128) NOT NULL COMMENT '来源任务标识',
`batch_id` VARCHAR(128) NOT NULL COMMENT '业务批次ID',
`request_hash` VARCHAR(64) DEFAULT NULL COMMENT '请求摘要',
`status` VARCHAR(32) NOT NULL DEFAULT 'PROCESSING' COMMENT 'PROCESSING/SUCCESS/FAILED/DUPLICATE',
`accepted_count` INT NOT NULL DEFAULT 0 COMMENT '已接收指标数',
`ignored_count` INT NOT NULL DEFAULT 0 COMMENT '已忽略指标数',
`message` VARCHAR(512) DEFAULT NULL COMMENT '状态说明',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_metric_ingest_batch` (`component_name`, `cluster_name`, `source_job`, `batch_id`),
KEY `idx_metric_ingest_batch_status` (`status`, `update_time`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '指标导入批次幂等表';
-- ============================================================
-- 智能分析与预测扩展表
-- ============================================================
CREATE TABLE IF NOT EXISTS `monitor_baseline` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`metric_name` VARCHAR(128) NOT NULL COMMENT '指标名称',
`cluster_name` VARCHAR(128) DEFAULT NULL COMMENT '集群名称',
`host_name` VARCHAR(255) DEFAULT NULL COMMENT '主机名',
`component_name` VARCHAR(128) DEFAULT NULL COMMENT '组件名称',
`instance_name` VARCHAR(255) DEFAULT NULL COMMENT '实例名称',
`time_slot_hour` TINYINT NOT NULL COMMENT '时间槽(0~23小时)',
`day_of_week` TINYINT NOT NULL COMMENT '星期几(1=周一…7=周日)',
`mean_value` DOUBLE DEFAULT NULL COMMENT '均值',
`stddev` DOUBLE DEFAULT NULL COMMENT '标准差',
`upper_bound` DOUBLE DEFAULT NULL COMMENT '基线上限(mean+2σ)',
`lower_bound` DOUBLE DEFAULT NULL COMMENT '基线下限(mean-2σ)',
`sample_count` INT DEFAULT NULL COMMENT '样本量',
`computed_at` DATETIME DEFAULT NULL COMMENT '计算时间',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_baseline_metric_host` (`metric_name`, `host_name`),
KEY `idx_baseline_metric_slot` (`metric_name`, `time_slot_hour`, `day_of_week`),
KEY `idx_baseline_cluster` (`cluster_name`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '动态基线表';
CREATE TABLE IF NOT EXISTS `monitor_anomaly_event` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`metric_name` VARCHAR(128) NOT NULL COMMENT '指标名称',
`cluster_name` VARCHAR(128) DEFAULT NULL COMMENT '集群名称',
`host_name` VARCHAR(255) DEFAULT NULL COMMENT '主机名',
`component_name` VARCHAR(128) DEFAULT NULL COMMENT '组件名称',
`instance_name` VARCHAR(255) DEFAULT NULL COMMENT '实例名称',
`current_value` DOUBLE DEFAULT NULL COMMENT '异常发生时的实际值',
`expected_value` DOUBLE DEFAULT NULL COMMENT '基线预期均值',
`baseline_upper` DOUBLE DEFAULT NULL COMMENT '基线上限',
`baseline_lower` DOUBLE DEFAULT NULL COMMENT '基线下限',
`anomaly_score` DOUBLE DEFAULT NULL COMMENT '异常分数(0~1)',
`detection_method` VARCHAR(32) DEFAULT NULL COMMENT '检测方法(ZSCORE/IQR/BASELINE_DEVIATION)',
`status` VARCHAR(16) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态(ACTIVE/RESOLVED)',
`severity` VARCHAR(16) DEFAULT 'WARNING' COMMENT '严重级别(INFO/WARNING/CRITICAL)',
`fingerprint` VARCHAR(255) NOT NULL COMMENT '去重指纹',
`detected_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '检测时间',
`resolved_at` DATETIME DEFAULT NULL COMMENT '恢复时间',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_anomaly_fingerprint_status` (`fingerprint`, `status`),
KEY `idx_anomaly_metric_host` (`metric_name`, `host_name`),
KEY `idx_anomaly_cluster` (`cluster_name`),
KEY `idx_anomaly_detected_at` (`detected_at`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '异常检测事件表';
CREATE TABLE IF NOT EXISTS `monitor_capacity_forecast` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`metric_name` VARCHAR(128) NOT NULL COMMENT '预测指标',
`cluster_name` VARCHAR(128) DEFAULT NULL COMMENT '集群名称',
`host_name` VARCHAR(255) DEFAULT NULL COMMENT '主机名',
`dimension` VARCHAR(255) DEFAULT NULL COMMENT '维度(如挂载点)',
`current_value` DOUBLE DEFAULT NULL COMMENT '当前值',
`capacity_max` DOUBLE DEFAULT NULL COMMENT '容量上限',
`usage_percent` DOUBLE DEFAULT NULL COMMENT '当前使用率%',
`growth_rate_per_hour` DOUBLE DEFAULT NULL COMMENT '增长速率(单位/小时)',
`r2_score` DOUBLE DEFAULT NULL COMMENT '线性回归R²拟合优度',
`predicted_exhaustion_time` DATETIME DEFAULT NULL COMMENT '预计耗尽时间',
`days_remaining` DOUBLE DEFAULT NULL COMMENT '距耗尽剩余天数',
`severity` VARCHAR(16) DEFAULT 'INFO' COMMENT '预测级别(INFO/WARNING/CRITICAL)',
`sample_count` INT DEFAULT NULL COMMENT '参与回归的样本数',
`forecasted_at` DATETIME DEFAULT NULL COMMENT '预测计算时间',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_forecast_metric_host` (`metric_name`, `host_name`),
KEY `idx_forecast_cluster` (`cluster_name`),
KEY `idx_forecast_severity` (`severity`),
KEY `idx_forecast_days` (`days_remaining`),
KEY `idx_forecast_forecasted_at` (`forecasted_at`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '容量预测表';
-- =====================================================
-- 通知渠道配置表
-- =====================================================
CREATE TABLE IF NOT EXISTS `monitor_notification_channel` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`channel_code` VARCHAR(64) NOT NULL COMMENT '渠道编码',
`channel_name` VARCHAR(128) NOT NULL COMMENT '渠道名称',
`channel_type` VARCHAR(32) NOT NULL COMMENT '渠道类型: IN_APP/WECHAT/DINGTALK/FEISHU/EMAIL/WEBHOOK',
`enabled` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用',
`config_json` TEXT NOT NULL COMMENT '渠道配置(JSON格式)',
`description` VARCHAR(512) DEFAULT NULL COMMENT '描述',
`sort_order` INT DEFAULT 0 COMMENT '排序',
`create_by` VARCHAR(64) DEFAULT NULL COMMENT '创建人',
`update_by` VARCHAR(64) DEFAULT NULL COMMENT '修改人',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_channel_code` (`channel_code`),
KEY `idx_channel_type` (`channel_type`, `enabled`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '通知渠道配置表';
-- =====================================================
-- 通知路由表:定义什么告警发给谁、通过哪些渠道发送
-- =====================================================
CREATE TABLE IF NOT EXISTS `monitor_notification_route` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`route_code` VARCHAR(64) NOT NULL COMMENT '路由编码',
`route_name` VARCHAR(128) NOT NULL COMMENT '路由名称',
`enabled` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用',
`cluster_name` VARCHAR(128) DEFAULT NULL COMMENT '集群过滤,空或*表示全部集群',
`event_type` VARCHAR(32) NOT NULL DEFAULT 'THRESHOLD' COMMENT '事件类型: THRESHOLD/ALERT/ALL',
`event_source_filter` VARCHAR(128) DEFAULT NULL COMMENT '告警来源过滤,逗号分隔,空或ALL表示全部来源',
`severity_filter` VARCHAR(128) DEFAULT NULL COMMENT '级别过滤,逗号分隔,空或ALL表示全部级别',
`service_name` VARCHAR(128) DEFAULT NULL COMMENT '服务过滤,空或*表示全部服务',
`component_name` VARCHAR(128) DEFAULT NULL COMMENT '组件过滤,空或*表示全部组件',
`scope_type` VARCHAR(32) DEFAULT NULL COMMENT '作用域类型过滤,空或*表示全部作用域',
`route_priority` INT NOT NULL DEFAULT 100 COMMENT '路由优先级,数字越小越先匹配',
`channel_codes` TEXT COMMENT '渠道编码JSON数组,空时使用默认站内信',
`description` VARCHAR(512) DEFAULT NULL COMMENT '说明',
`create_by` VARCHAR(64) DEFAULT NULL COMMENT '创建人',
`update_by` VARCHAR(64) DEFAULT NULL COMMENT '修改人',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_notification_route_code` (`route_code`),
KEY `idx_notification_route_match` (`enabled`, `event_type`, `route_priority`),
KEY `idx_notification_route_cluster` (`cluster_name`, `enabled`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '通知路由表';
-- =====================================================
-- 通知路由接收主体表:定义路由命中的通知对象
-- =====================================================
CREATE TABLE IF NOT EXISTS `monitor_notification_route_subject` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`route_id` BIGINT NOT NULL COMMENT '路由ID',
`subject_type` VARCHAR(32) NOT NULL COMMENT '主体类型: CLUSTER_ADMIN/AMBARI_ROLE/TENANT_ROLE/LDAP_GROUP/USER/DUTY_GROUP/SERVICE_OWNER/ALL_USERS',
`subject_ref` VARCHAR(128) DEFAULT NULL COMMENT '主体标识',
`subject_name` VARCHAR(128) DEFAULT NULL COMMENT '主体展示名称',
`enabled` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_route_subject_route` (`route_id`, `enabled`),
KEY `idx_route_subject_ref` (`subject_type`, `subject_ref`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '通知路由接收主体表';
-- =====================================================
-- 通知静态值班组表:一期不做排班算法,只维护成员集合
-- =====================================================
CREATE TABLE IF NOT EXISTS `monitor_notification_duty_group` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`group_code` VARCHAR(64) NOT NULL COMMENT '值班组编码',
`group_name` VARCHAR(128) NOT NULL COMMENT '值班组名称',
`enabled` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用',
`members_json` TEXT COMMENT '成员用户名JSON数组',
`description` VARCHAR(512) DEFAULT NULL COMMENT '说明',
`create_by` VARCHAR(64) DEFAULT NULL COMMENT '创建人',
`update_by` VARCHAR(64) DEFAULT NULL COMMENT '修改人',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_duty_group_code` (`group_code`),
KEY `idx_duty_group_enabled` (`enabled`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '通知静态值班组表';
-- =====================================================
-- 通知发送历史表
-- =====================================================
CREATE TABLE IF NOT EXISTS `monitor_notification_history` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`alert_event_id` BIGINT DEFAULT NULL COMMENT '告警事件ID',
`event_id` BIGINT DEFAULT NULL COMMENT '旧版关联事件ID',
`event_code` VARCHAR(64) DEFAULT NULL COMMENT '旧版事件编码',
`event_type` VARCHAR(32) DEFAULT NULL COMMENT '旧版事件类型: ALERT/THRESHOLD',
`channel_id` BIGINT NOT NULL COMMENT '渠道ID',
`channel_type` VARCHAR(32) NOT NULL COMMENT '渠道类型',
`channel_code` VARCHAR(64) DEFAULT NULL COMMENT '旧版渠道编码',
`channel_name` VARCHAR(128) DEFAULT NULL COMMENT '渠道名称',
`route_id` BIGINT DEFAULT NULL COMMENT '通知路由ID',
`route_code` VARCHAR(64) DEFAULT NULL COMMENT '通知路由编码',
`route_name` VARCHAR(128) DEFAULT NULL COMMENT '通知路由名称',
`subject_type` VARCHAR(32) DEFAULT NULL COMMENT '接收主体类型',
`subject_ref` VARCHAR(128) DEFAULT NULL COMMENT '接收主体标识',
`subject_name` VARCHAR(128) DEFAULT NULL COMMENT '接收主体名称',
`receiver_user` VARCHAR(128) DEFAULT NULL COMMENT '指定接收人',
`alert_title` VARCHAR(255) DEFAULT NULL COMMENT '告警标题',
`alert_summary` TEXT COMMENT '告警摘要',
`alert_severity` VARCHAR(32) DEFAULT NULL COMMENT '告警级别',
`cluster_name` VARCHAR(128) DEFAULT NULL COMMENT '集群名称',
`service_name` VARCHAR(128) DEFAULT NULL COMMENT '服务名称',
`component_name` VARCHAR(128) DEFAULT NULL COMMENT '组件名称',
`instance_name` VARCHAR(255) DEFAULT NULL COMMENT '实例名称',
`status` VARCHAR(16) NOT NULL COMMENT '发送状态: SUCCESS/FAILED',
`send_time` DATETIME DEFAULT NULL COMMENT '发送时间',
`error_message` TEXT COMMENT '错误信息',
`request_time` DATETIME DEFAULT NULL COMMENT '旧版请求时间',
`response_time` DATETIME DEFAULT NULL COMMENT '旧版响应时间',
`response_time_ms` BIGINT DEFAULT NULL COMMENT '响应耗时(毫秒)',
`cost_ms` INT DEFAULT NULL COMMENT '旧版耗时(毫秒)',
`request_content` TEXT COMMENT '请求内容',
`response_content` TEXT COMMENT '响应内容',
`retry_count` INT DEFAULT 0 COMMENT '重试次数',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `idx_event` (`event_id`, `event_type`),
KEY `idx_alert_event` (`alert_event_id`),
KEY `idx_channel` (`channel_id`, `request_time`),
KEY `idx_status` (`status`, `request_time`),
KEY `idx_history_cluster_status` (`cluster_name`, `status`, `send_time`),
KEY `idx_history_route_subject` (`route_code`, `subject_type`, `subject_ref`),
KEY `idx_history_send_time` (`send_time`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '通知发送历史表';
-- =====================================================
-- 通知投递表
-- =====================================================
CREATE TABLE IF NOT EXISTS `monitor_notification_delivery` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`delivery_code` VARCHAR(64) NOT NULL COMMENT '投递编码',
`notification_id` BIGINT DEFAULT NULL COMMENT '站内信ID',
`event_type` VARCHAR(32) NOT NULL COMMENT '事件类型: ALERT/THRESHOLD/TEST',
`event_id` BIGINT DEFAULT NULL COMMENT '事件ID',
`event_code` VARCHAR(64) DEFAULT NULL COMMENT '事件编码',
`route_id` BIGINT DEFAULT NULL COMMENT '路由ID',
`route_code` VARCHAR(64) DEFAULT NULL COMMENT '路由编码',
`route_name` VARCHAR(128) DEFAULT NULL COMMENT '路由名称',
`channel_id` BIGINT DEFAULT NULL COMMENT '渠道ID',
`channel_code` VARCHAR(64) DEFAULT NULL COMMENT '渠道编码',
`subject_type` VARCHAR(32) DEFAULT NULL COMMENT '接收主体类型',
`subject_ref` VARCHAR(128) DEFAULT NULL COMMENT '接收主体标识',
`subject_name` VARCHAR(128) DEFAULT NULL COMMENT '接收主体名称',
`receiver_user` VARCHAR(128) DEFAULT NULL COMMENT '指定接收人',
`delivery_status` VARCHAR(16) NOT NULL DEFAULT 'PENDING' COMMENT '投递状态: PENDING/SUCCESS/FAILED/SKIPPED',
`error_message` TEXT COMMENT '错误信息',
`read_status` VARCHAR(16) NOT NULL DEFAULT 'UNREAD' COMMENT '读取状态: UNREAD/READ',
`read_time` DATETIME DEFAULT NULL COMMENT '读取时间',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_delivery_code` (`delivery_code`),
KEY `idx_delivery_event` (`event_type`, `event_id`, `event_code`),
KEY `idx_delivery_route_subject` (`route_code`, `subject_type`, `subject_ref`),
KEY `idx_delivery_receiver` (`receiver_user`, `read_status`, `create_time`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '通知投递表';
-- =====================================================
-- 站内通知表
-- =====================================================
CREATE TABLE IF NOT EXISTS `monitor_in_app_notification` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`notification_code` VARCHAR(64) NOT NULL COMMENT '站内通知编码',
`event_type` VARCHAR(32) NOT NULL COMMENT '事件类型: ALERT/THRESHOLD/TEST',
`event_id` BIGINT DEFAULT NULL COMMENT '关联事件ID',
`event_code` VARCHAR(64) DEFAULT NULL COMMENT '关联事件编码',
`channel_id` BIGINT DEFAULT NULL COMMENT '来源通知渠道ID',
`channel_code` VARCHAR(64) DEFAULT NULL COMMENT '来源通知渠道编码',
`route_id` BIGINT DEFAULT NULL COMMENT '通知路由ID',
`route_code` VARCHAR(64) DEFAULT NULL COMMENT '通知路由编码',
`route_name` VARCHAR(128) DEFAULT NULL COMMENT '通知路由名称',
`cluster_name` VARCHAR(128) DEFAULT NULL COMMENT '集群名称',
`service_name` VARCHAR(128) DEFAULT NULL COMMENT '服务名称',
`component_name` VARCHAR(128) DEFAULT NULL COMMENT '组件名称',
`instance_name` VARCHAR(255) DEFAULT NULL COMMENT '实例名称',
`scope_type` VARCHAR(32) DEFAULT NULL COMMENT '作用域类型',
`scope_ref` VARCHAR(255) DEFAULT NULL COMMENT '作用域标识',
`scope_name` VARCHAR(255) DEFAULT NULL COMMENT '作用域名称',
`severity` VARCHAR(32) DEFAULT NULL COMMENT '告警级别',
`title` VARCHAR(255) NOT NULL COMMENT '标题',
`content` TEXT COMMENT '内容',
`receiver_scope` VARCHAR(32) NOT NULL DEFAULT 'ADMIN' COMMENT '接收范围: ADMIN/ALL/USER/SUBJECT',
`receiver_user` VARCHAR(128) DEFAULT NULL COMMENT '指定接收人',
`subject_type` VARCHAR(32) DEFAULT NULL COMMENT '接收主体类型',
`subject_ref` VARCHAR(128) DEFAULT NULL COMMENT '接收主体标识',
`subject_name` VARCHAR(128) DEFAULT NULL COMMENT '接收主体名称',
`read_status` VARCHAR(16) NOT NULL DEFAULT 'UNREAD' COMMENT '读取状态: UNREAD/READ',
`read_time` DATETIME DEFAULT NULL COMMENT '读取时间',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_in_app_code` (`notification_code`),
KEY `idx_in_app_event` (`event_type`, `event_id`),
KEY `idx_in_app_code` (`event_code`),
KEY `idx_in_app_cluster_status` (`cluster_name`, `read_status`, `create_time`),
KEY `idx_in_app_receiver` (`receiver_scope`, `receiver_user`, `read_status`),
KEY `idx_in_app_subject` (`subject_type`, `subject_ref`, `read_status`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '站内通知表';
-- 初始化默认通知渠道。
-- 这是通知模块基础元数据,不属于指标/阈值 seed。
INSERT INTO `monitor_notification_channel` (`channel_code`, `channel_name`, `channel_type`, `enabled`, `config_json`, `description`, `sort_order`)
VALUES
('default-in-app', '默认站内信', 'IN_APP', 1, '{"template":"default"}', '消息中心内置站内信通道,不支持删除', 0),
('default-wechat', '默认企业微信', 'WECHAT', 0, '{"webhookUrl":"","msgType":"markdown","mentionedMobileList":[]}', '默认企业微信通知渠道', 1),
('default-dingtalk', '默认钉钉', 'DINGTALK', 0, '{"webhookUrl":"","secret":"","msgType":"markdown","atMobiles":[],"atUserIds":[],"atAll":false}', '默认钉钉通知渠道', 2),
('default-feishu', '默认飞书', 'FEISHU', 0, '{"webhookUrl":"","secret":"","msgType":"post","atAll":false}', '默认飞书通知渠道', 3),
('default-email', '默认邮件', 'EMAIL', 0, '{"host":"","port":587,"username":"","password":"","from":"","to":""}', '默认邮件通知渠道', 4),
('default-webhook', '默认Webhook', 'WEBHOOK', 0, '{"url":""}', '默认Webhook通知渠道', 5)
ON DUPLICATE KEY UPDATE
`channel_name` = VALUES(`channel_name`),
`channel_type` = VALUES(`channel_type`),
`config_json` = CASE
WHEN `channel_code` = 'default-in-app' THEN VALUES(`config_json`)
ELSE `config_json`
END,
`description` = VALUES(`description`),
`sort_order` = VALUES(`sort_order`);
-- 初始化默认静态值班组。
-- 默认路由仍走集群管理员;值班组提供开箱可选的接收主体,后续可在页面替换成员。
INSERT INTO `monitor_notification_duty_group` (`group_code`, `group_name`, `enabled`, `members_json`, `description`)
VALUES
('platform-alert-duty', '平台告警值班组', 1, '["admin"]', '默认静态值班组,可在通知配置中调整成员')
ON DUPLICATE KEY UPDATE
`group_name` = VALUES(`group_name`),
`enabled` = VALUES(`enabled`),
`members_json` = CASE
WHEN `members_json` IS NULL OR `members_json` = '' OR `members_json` = '[]' THEN VALUES(`members_json`)
ELSE `members_json`
END,
`description` = VALUES(`description`);
-- 初始化默认通知路由。
-- 默认只通知集群管理员,不做全员广播;外部渠道可后续在路由中显式追加。
INSERT INTO `monitor_notification_route` (`route_code`, `route_name`, `enabled`, `cluster_name`, `event_type`, `event_source_filter`, `severity_filter`, `service_name`, `component_name`, `scope_type`, `route_priority`, `channel_codes`, `description`)
VALUES
('default-critical-alert-route', '严重阈值告警通知集群管理员', 1, '*', 'THRESHOLD', 'THRESHOLD_ENGINE', 'CRITICAL', '*', '*', '*', 10, '["default-in-app"]', '严重阈值告警默认写入集群管理员站内信'),
('default-warning-alert-route', '警告阈值告警通知集群管理员', 1, '*', 'THRESHOLD', 'THRESHOLD_ENGINE', 'WARNING', '*', '*', '*', 20, '["default-in-app"]', '警告阈值告警默认写入集群管理员站内信'),
('default-official-critical-alert-route', '严重内置健康告警通知集群管理员', 1, '*', 'ALERT', 'AMBARI_OFFICIAL', 'CRITICAL', '*', '*', '*', 30, '["default-in-app"]', '严重内置健康告警默认写入集群管理员站内信'),
('default-official-warning-alert-route', '警告内置健康告警通知集群管理员', 1, '*', 'ALERT', 'AMBARI_OFFICIAL', 'WARNING', '*', '*', '*', 40, '["default-in-app"]', '警告内置健康告警默认写入集群管理员站内信')
ON DUPLICATE KEY UPDATE
`route_name` = VALUES(`route_name`),
`enabled` = VALUES(`enabled`),
`event_type` = VALUES(`event_type`),
`event_source_filter` = VALUES(`event_source_filter`),
`severity_filter` = VALUES(`severity_filter`),
`route_priority` = VALUES(`route_priority`),
`channel_codes` = VALUES(`channel_codes`),
`description` = VALUES(`description`);
INSERT INTO `monitor_notification_route_subject` (`route_id`, `subject_type`, `subject_ref`, `subject_name`, `enabled`)
SELECT r.id, 'CLUSTER_ADMIN', 'CLUSTER.ADMINISTRATOR', '集群管理员', 1
FROM `monitor_notification_route` r
WHERE r.route_code IN (
'default-critical-alert-route',
'default-warning-alert-route',
'default-official-critical-alert-route',
'default-official-warning-alert-route'
)
AND NOT EXISTS (
SELECT 1 FROM `monitor_notification_route_subject` s
WHERE s.route_id = r.id AND s.subject_type = 'CLUSTER_ADMIN' AND s.subject_ref = 'CLUSTER.ADMINISTRATOR'
);
-- =====================================================
-- P0 指标定义 seed
-- 说明:
-- 1. 本段只初始化 monitor_metric_definition,不初始化 monitor_threshold_policy。
-- 2. 平台默认阈值策略由 PlatformDefaultThresholdPolicyGenerator 在 platform-api 启动后按指标定义生成。
-- 3. 自定义覆盖默认为空;调优建议只使用 recommendation 链路,不在 SQL 中写阈值策略。
-- =====================================================
INSERT INTO `monitor_metric_definition` (
`metric_code`, `metric_name`, `metric_group`, `priority`, `sub_group`, `unit`, `metric_type`,
`metric_kind`, `service_name`, `component_name`, `compute_type`, `source_profile`, `ingest_status`,
`stability_status`, `value_type`, `aggregation_mode`, `default_chart_type`, `display_order`,
`enable_fixed_threshold`, `enable_smart_threshold`, `enable_alert`, `enable_health_score`,
`health_score_weight`, `description`, `extra_info`
)
VALUES
('tt_cpu_usage_percent', 'cpu_usage_percent', 'host', 'P0', 'cpu', '%', 'GAUGE', 'COLLECTED', 'host', 'host', 'NONE', 'CORE', 'CANDIDATE', 'STABLE', 'NUMBER', 'AVG', 'LINE', 101, 1, 1, 1, 1, 8, '主机 CPU 使用率', '{"seedVersion":"3.0.1-P0"}'),
('tt_cpu_iowait', 'cpu_iowait', 'host', 'P0', 'cpu', '%', 'GAUGE', 'COLLECTED', 'host', 'host', 'NONE', 'CORE', 'CANDIDATE', 'STABLE', 'NUMBER', 'AVG', 'LINE', 102, 1, 1, 1, 1, 6, '主机 CPU iowait 占比', '{"seedVersion":"3.0.1-P0"}'),
('tt_load_per_cpu', 'load_per_cpu', 'host', 'P0', 'cpu', '', 'GAUGE', 'DERIVED', 'host', 'host', 'REALTIME', 'DERIVED_PLATFORM', 'CANDIDATE', 'STABLE', 'NUMBER', 'AVG', 'LINE', 103, 1, 1, 1, 1, 6, '主机单核平均负载', '{"seedVersion":"3.0.1-P0"}'),
('tt_mem_usage_percent', 'mem_usage_percent', 'host', 'P0', 'memory', '%', 'GAUGE', 'COLLECTED', 'host', 'host', 'NONE', 'CORE', 'CANDIDATE', 'STABLE', 'NUMBER', 'AVG', 'LINE', 111, 1, 1, 1, 1, 8, '主机内存使用率', '{"seedVersion":"3.0.1-P0"}'),
('tt_swap_usage_percent', 'swap_usage_percent', 'host', 'P0', 'memory', '%', 'GAUGE', 'COLLECTED', 'host', 'host', 'NONE', 'CORE', 'CANDIDATE', 'STABLE', 'NUMBER', 'AVG', 'LINE', 112, 1, 1, 1, 1, 5, '主机 swap 使用率', '{"seedVersion":"3.0.1-P0"}'),
('tt_disk_usage_percent', 'disk_usage_percent', 'host', 'P0', 'disk', '%', 'GAUGE', 'COLLECTED', 'host', 'host', 'NONE', 'CORE', 'CANDIDATE', 'STABLE', 'NUMBER', 'AVG', 'LINE', 121, 1, 1, 1, 1, 10, '主机磁盘使用率', '{"seedVersion":"3.0.1-P0"}'),
('tt_net_error_packets_per_sec', 'net_error_packets_per_sec', 'host', 'P0', 'network', '个/s', 'GAUGE', 'DERIVED', 'host', 'host', 'REALTIME', 'DERIVED_PLATFORM', 'CANDIDATE', 'UNKNOWN', 'NUMBER', 'SUM', 'LINE', 126, 1, 1, 1, 1, 6, '主机网络错误包速率', '{"seedVersion":"3.0.1-P0"}'),
('tt_net_drop_packets_per_sec', 'net_drop_packets_per_sec', 'host', 'P0', 'network', '个/s', 'GAUGE', 'DERIVED', 'host', 'host', 'REALTIME', 'DERIVED_PLATFORM', 'CANDIDATE', 'UNKNOWN', 'NUMBER', 'SUM', 'LINE', 127, 1, 1, 1, 1, 6, '主机网络丢包速率', '{"seedVersion":"3.0.1-P0"}'),
('tt_process_count', 'process_count', 'host', 'P0', 'process', '个', 'GAUGE', 'COLLECTED', 'host', 'host', 'NONE', 'CORE', 'CANDIDATE', 'UNKNOWN', 'NUMBER', 'AVG', 'LINE', 129, 1, 1, 1, 1, 4, '主机进程数', '{"seedVersion":"3.0.1-P0"}'),
('tt_thread_count', 'thread_count', 'host', 'P0', 'process', '个', 'GAUGE', 'COLLECTED', 'host', 'host', 'NONE', 'CORE', 'CANDIDATE', 'UNKNOWN', 'NUMBER', 'AVG', 'LINE', 130, 1, 1, 1, 1, 4, '主机线程数', '{"seedVersion":"3.0.1-P0"}'),
('tt_fd_usage_percent', 'fd_usage_percent', 'host', 'P0', 'process', '%', 'GAUGE', 'COLLECTED', 'host', 'host', 'NONE', 'CORE', 'CANDIDATE', 'UNKNOWN', 'NUMBER', 'AVG', 'LINE', 131, 1, 1, 1, 1, 5, '进程文件句柄使用率', '{"seedVersion":"3.0.1-P0"}'),
('tt_jvm_heap_usage_percent', 'jvm_heap_usage_percent', 'jvm', 'P0', 'heap', '%', 'GAUGE', 'COLLECTED', NULL, NULL, 'NONE', 'CORE', 'CANDIDATE', 'STABLE', 'NUMBER', 'AVG', 'LINE', 201, 1, 1, 1, 1, 8, '组件 JVM Heap 使用率', '{"seedVersion":"3.0.1-P0"}'),
('tt_jvm_gc_collection_time_ms', 'jvm_gc_collection_time_ms', 'jvm', 'P0', 'gc', 'ms', 'GAUGE', 'COLLECTED', NULL, NULL, 'NONE', 'CORE', 'CANDIDATE', 'UNKNOWN', 'NUMBER', 'AVG', 'LINE', 202, 1, 1, 1, 1, 5, '组件 JVM GC 耗时', '{"seedVersion":"3.0.1-P0"}'),
('tt_hdfs_namenode_in_safe_mode', 'hdfs_namenode_in_safe_mode', 'hdfs', 'P0', 'availability', '', 'STATE', 'COLLECTED', 'HDFS', 'NAMENODE', 'NONE', 'CORE', 'CANDIDATE', 'STABLE', 'NUMBER', 'LAST', 'LINE', 301, 1, 0, 1, 1, 10, 'HDFS NameNode 安全模式状态', '{"seedVersion":"3.0.1-P0"}'),
('tt_hdfs_datanode_bp_service_alive', 'hdfs_datanode_bp_service_alive', 'hdfs', 'P0', 'availability', '', 'STATE', 'COLLECTED', 'HDFS', 'DATANODE', 'NONE', 'CORE', 'CANDIDATE', 'STABLE', 'NUMBER', 'LAST', 'LINE', 302, 1, 0, 1, 1, 10, 'HDFS DataNode BP 服务可用状态', '{"seedVersion":"3.0.1-P0"}'),
('tt_hdfs_zkfc_health_monitor_up', 'hdfs_zkfc_health_monitor_up', 'hdfs', 'P0', 'ha', '', 'STATE', 'COLLECTED', 'HDFS', 'ZKFC', 'NONE', 'CORE', 'CANDIDATE', 'STABLE', 'NUMBER', 'LAST', 'LINE', 303, 1, 0, 1, 1, 8, 'HDFS ZKFC 健康监控可用状态', '{"seedVersion":"3.0.1-P0"}'),
('tt_yarn_resourcemanager_up', 'yarn_resourcemanager_up', 'yarn', 'P0', 'availability', '', 'STATE', 'COLLECTED', 'YARN', 'RESOURCEMANAGER', 'NONE', 'CORE', 'CANDIDATE', 'STABLE', 'NUMBER', 'LAST', 'LINE', 401, 1, 0, 1, 1, 10, 'YARN ResourceManager 可用状态', '{"seedVersion":"3.0.1-P0"}'),
('tt_yarn_resourcemanager_memory_used_percent', 'yarn_resourcemanager_memory_used_percent', 'yarn', 'P0', 'capacity', '%', 'GAUGE', 'COLLECTED', 'YARN', 'RESOURCEMANAGER', 'NONE', 'CORE', 'CANDIDATE', 'STABLE', 'NUMBER', 'AVG', 'LINE', 402, 1, 1, 1, 1, 7, 'YARN ResourceManager 内存使用率', '{"seedVersion":"3.0.1-P0"}'),
('tt_yarn_nodemanager_up', 'yarn_nodemanager_up', 'yarn', 'P0', 'availability', '', 'STATE', 'COLLECTED', 'YARN', 'NODEMANAGER', 'NONE', 'CORE', 'CANDIDATE', 'STABLE', 'NUMBER', 'LAST', 'LINE', 403, 1, 0, 1, 1, 10, 'YARN NodeManager 可用状态', '{"seedVersion":"3.0.1-P0"}'),
('tt_yarn_nodemanager_memory_used_percent', 'yarn_nodemanager_memory_used_percent', 'yarn', 'P0', 'capacity', '%', 'GAUGE', 'COLLECTED', 'YARN', 'NODEMANAGER', 'NONE', 'CORE', 'CANDIDATE', 'STABLE', 'NUMBER', 'AVG', 'LINE', 404, 1, 1, 1, 1, 7, 'YARN NodeManager 内存使用率', '{"seedVersion":"3.0.1-P0"}'),
('tt_kafka_broker_up', 'kafka_broker_up', 'kafka', 'P0', 'availability', '', 'STATE', 'COLLECTED', 'KAFKA', 'KAFKA_BROKER', 'NONE', 'CORE', 'CANDIDATE', 'STABLE', 'NUMBER', 'LAST', 'LINE', 501, 1, 0, 1, 1, 10, 'Kafka Broker 可用状态', '{"seedVersion":"3.0.1-P0"}'),
('tt_kafka_disk_used_percent', 'kafka_disk_used_percent', 'kafka', 'P0', 'capacity', '%', 'GAUGE', 'DERIVED', 'KAFKA', 'KAFKA_BROKER', 'REALTIME', 'DERIVED_PLATFORM', 'CANDIDATE', 'STABLE', 'NUMBER', 'AVG', 'LINE', 502, 1, 1, 1, 1, 9, 'Kafka Broker 磁盘使用率', '{"seedVersion":"3.0.1-P0"}'),
('tt_kafka_cluster_under_replicated_partitions', 'kafka_cluster_under_replicated_partitions', 'kafka', 'P0', 'replica', '个', 'GAUGE', 'DERIVED', 'KAFKA', 'KAFKA_BROKER', 'REALTIME', 'DERIVED_PLATFORM', 'CANDIDATE', 'STABLE', 'NUMBER', 'MAX', 'LINE', 503, 1, 1, 1, 1, 10, 'Kafka 未完全复制分区数', '{"seedVersion":"3.0.1-P0"}'),
('tt_kafka_cluster_offline_partitions', 'kafka_cluster_offline_partitions', 'kafka', 'P0', 'replica', '个', 'GAUGE', 'DERIVED', 'KAFKA', 'KAFKA_BROKER', 'REALTIME', 'DERIVED_PLATFORM', 'CANDIDATE', 'STABLE', 'NUMBER', 'MAX', 'LINE', 504, 1, 0, 1, 1, 10, 'Kafka 离线分区数', '{"seedVersion":"3.0.1-P0"}'),
('tt_ambari_plus_monitor_platform_api_up', 'ambari_plus_monitor_platform_api_up', 'ambari-plus-monitor', 'P0', 'self', '', 'STATE', 'DERIVED', 'AMBARI_PLUS_MONITOR', 'MONITOR_PLATFORM_API', 'REALTIME', 'DERIVED_PLATFORM', 'CANDIDATE', 'STABLE', 'NUMBER', 'LAST', 'LINE', 601, 1, 0, 1, 1, 10, 'Monitor Platform API 可用状态', '{"seedVersion":"3.0.1-P0"}'),
('tt_ambari_plus_monitor_ingester_up', 'ambari_plus_monitor_ingester_up', 'ambari-plus-monitor', 'P0', 'self', '', 'STATE', 'DERIVED', 'AMBARI_PLUS_MONITOR', 'MONITOR_INGESTER', 'REALTIME', 'DERIVED_PLATFORM', 'CANDIDATE', 'STABLE', 'NUMBER', 'LAST', 'LINE', 602, 1, 0, 1, 1, 10, 'Monitor Ingester 可用状态', '{"seedVersion":"3.0.1-P0"}'),
('tt_ambari_plus_monitor_rule_engine_up', 'ambari_plus_monitor_rule_engine_up', 'ambari-plus-monitor', 'P0', 'self', '', 'STATE', 'DERIVED', 'AMBARI_PLUS_MONITOR', 'MONITOR_RULE_ENGINE', 'REALTIME', 'DERIVED_PLATFORM', 'CANDIDATE', 'STABLE', 'NUMBER', 'LAST', 'LINE', 603, 1, 0, 1, 1, 10, 'Monitor Rule Engine 可用状态', '{"seedVersion":"3.0.1-P0"}'),
('tt_ambari_plus_monitor_notification_failure_count', 'ambari_plus_monitor_notification_failure_count', 'ambari-plus-monitor', 'P0', 'self', '次', 'GAUGE', 'DERIVED', 'AMBARI_PLUS_MONITOR', NULL, 'REALTIME', 'DERIVED_PLATFORM', 'CANDIDATE', 'STABLE', 'NUMBER', 'SUM', 'LINE', 604, 1, 1, 1, 1, 8, 'Monitor 通知失败数', '{"seedVersion":"3.0.1-P0"}'),
('tt_ambari_plus_monitor_agent_failed_batch_count', 'ambari_plus_monitor_agent_failed_batch_count', 'ambari-plus-monitor', 'P0', 'self', '次', 'GAUGE', 'DERIVED', 'AMBARI_PLUS_MONITOR', NULL, 'REALTIME', 'DERIVED_PLATFORM', 'CANDIDATE', 'STABLE', 'NUMBER', 'SUM', 'LINE', 605, 1, 1, 1, 1, 8, 'Monitor Agent 失败批次数', '{"seedVersion":"3.0.1-P0"}'),
('tt_ambari_plus_monitor_ingester_failed_metric_count', 'ambari_plus_monitor_ingester_failed_metric_count', 'ambari-plus-monitor', 'P0', 'self', '条', 'GAUGE', 'DERIVED', 'AMBARI_PLUS_MONITOR', NULL, 'REALTIME', 'DERIVED_PLATFORM', 'CANDIDATE', 'STABLE', 'NUMBER', 'SUM', 'LINE', 606, 1, 1, 1, 1, 8, 'Monitor Ingester 写入失败指标数', '{"seedVersion":"3.0.1-P0"}')
ON DUPLICATE KEY UPDATE
`metric_group` = VALUES(`metric_group`),
`priority` = VALUES(`priority`),
`sub_group` = VALUES(`sub_group`),
`unit` = VALUES(`unit`),
`metric_type` = VALUES(`metric_type`),
`metric_kind` = VALUES(`metric_kind`),
`service_name` = VALUES(`service_name`),
`component_name` = VALUES(`component_name`),
`source_profile` = VALUES(`source_profile`),
`stability_status` = VALUES(`stability_status`),
`enable_fixed_threshold` = VALUES(`enable_fixed_threshold`),
`enable_smart_threshold` = VALUES(`enable_smart_threshold`),
`enable_alert` = VALUES(`enable_alert`),
`enable_health_score` = VALUES(`enable_health_score`),
`health_score_weight` = VALUES(`health_score_weight`),
`description` = VALUES(`description`),
`extra_info` = VALUES(`extra_info`);
UPDATE `monitor_metric_definition`
SET `display_name` = `description`,
`metadata_status` = 'VERIFIED',
`metadata_source` = 'BUILT_IN'
WHERE `extra_info` LIKE '%"seedVersion":"3.0.1-P0"%';
-- 平台默认阈值策略不在初始化 SQL 中写死;由 PlatformDefaultThresholdPolicyGenerator 根据当前启用指标动态生成。
-- =====================================================
-- HA 切换事件表
-- =====================================================
CREATE TABLE IF NOT EXISTS `monitor_ha_failover_event` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`cluster_id` BIGINT NOT NULL COMMENT '集群ID',
`service_name` VARCHAR(64) NOT NULL COMMENT '服务名称(HDFS/YARN/HBASE等)',
`component_name` VARCHAR(64) NOT NULL COMMENT '组件名称(NAMENODE/RESOURCEMANAGER等)',
`instance_name` VARCHAR(128) NOT NULL COMMENT '实例名称(nn1/nn2/rm1/rm2等)',
`host_name` VARCHAR(255) NOT NULL COMMENT '主机名称',
`previous_state` VARCHAR(32) DEFAULT NULL COMMENT '切换前状态(active/standby/unknown)',
`current_state` VARCHAR(32) NOT NULL COMMENT '切换后状态(active/standby/unknown)',
`event_type` VARCHAR(32) NOT NULL COMMENT '事件类型(FAILOVER/SWITCH/UNKNOWN)',
`failover_reason` VARCHAR(128) DEFAULT NULL COMMENT '切换原因(MANUAL/AUTO_CRASH/AUTO_NETWORK等)',
`start_time` DATETIME NOT NULL COMMENT '切换开始时间',
`end_time` DATETIME DEFAULT NULL COMMENT '切换结束时间',
`duration_ms` BIGINT DEFAULT NULL COMMENT '切换耗时(毫秒)',
`success` TINYINT DEFAULT 1 COMMENT '是否成功(1成功/0失败)',
`failure_reason` VARCHAR(512) DEFAULT NULL COMMENT '失败信息',
`zkfc_involved` TINYINT DEFAULT 1 COMMENT '是否ZKFC参与(1是/0否)',
`journal_node_sync_status` VARCHAR(32) DEFAULT NULL COMMENT 'JN同步状态(HDFS)',
`last_tx_id_before` BIGINT DEFAULT NULL COMMENT '切换前最后事务ID(HDFS)',
`last_tx_id_after` BIGINT DEFAULT NULL COMMENT '切换后事务ID(HDFS)',
`extra_info` TEXT DEFAULT NULL COMMENT '扩展信息(JSON)',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_ha_cluster_service` (`cluster_id`, `service_name`),
KEY `idx_ha_instance` (`instance_name`, `host_name`),
KEY `idx_ha_start_time` (`start_time`),
KEY `idx_ha_event_type` (`event_type`, `failover_reason`)
) DEFAULT CHARSET = utf8mb4 COMMENT = 'HA切换事件记录表';
-- ============================================================
-- HDFS 离线分析快照表
-- ============================================================
CREATE TABLE IF NOT EXISTS `monitor_hdfs_directory_snapshot` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
`cluster_name` VARCHAR(128) NOT NULL COMMENT '集群名称',
`path` VARCHAR(512) NOT NULL COMMENT '目录绝对路径',
`owner` VARCHAR(128) COMMENT '目录所有者',
`group_name` VARCHAR(128) COMMENT '目录所属组',
`file_count` BIGINT DEFAULT 0 COMMENT '目录下文件总数(递归)',
`directory_count` BIGINT DEFAULT 0 COMMENT '目录下子目录总数(递归)',
`total_bytes` BIGINT DEFAULT 0 COMMENT '目录总大小(字节,不含副本)',
`space_consumed` BIGINT DEFAULT 0 COMMENT '实际消耗存储(字节,含副本)',
`quota` BIGINT DEFAULT -1 COMMENT '文件数配额(-1 表示无限制)',
`space_quota` BIGINT DEFAULT -1 COMMENT '空间配额(字节,-1 表示无限制)',
`prev_total_bytes` BIGINT COMMENT '上次扫描时的目录大小(用于计算增量)',
`prev_analyzed_at` DATETIME COMMENT '上次扫描时间',
`analyzed_at` DATETIME NOT NULL COMMENT '本次扫描时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_cluster_path` (`cluster_name`, `path`),
KEY `idx_cluster_bytes_desc` (`cluster_name`, `total_bytes` DESC),
KEY `idx_cluster_files_desc` (`cluster_name`, `file_count` DESC),
KEY `idx_cluster_analyzed` (`cluster_name`, `analyzed_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
COMMENT='HDFS 目录容量快照,由平台定时通过 WebHDFS 分析并 UPSERT 更新';
CREATE TABLE IF NOT EXISTS `monitor_hdfs_trash_snapshot` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
`cluster_name` VARCHAR(128) NOT NULL COMMENT '集群名称',
`username` VARCHAR(128) NOT NULL COMMENT 'HDFS 用户名',
`trash_size_bytes` BIGINT DEFAULT 0 COMMENT '回收站总大小(字节)',
`file_count` BIGINT DEFAULT 0 COMMENT '回收站文件数',
`oldest_item_ms` BIGINT COMMENT '最旧条目时间戳(毫秒),NULL 表示回收站为空',
`analyzed_at` DATETIME NOT NULL COMMENT '本次扫描时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_cluster_user` (`cluster_name`, `username`),
KEY `idx_cluster_size_desc` (`cluster_name`, `trash_size_bytes` DESC),
KEY `idx_cluster_analyzed` (`cluster_name`, `analyzed_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
COMMENT='HDFS 回收站快照,由平台定时通过 WebHDFS 分析并 UPSERT 更新';
CREATE TABLE IF NOT EXISTS `monitor_hdfs_offline_analysis_record` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
`cluster_name` VARCHAR(128) NOT NULL COMMENT '集群名称',
`record_type` VARCHAR(64) NOT NULL COMMENT '明细类型:高风险文件、死节点影响、快照、小文件或慢RPC等',
`record_key` VARCHAR(512) NOT NULL COMMENT '业务唯一键原文,例如文件路径、目录路径、hostName或sizeRange',
`record_hash` CHAR(40) NOT NULL COMMENT 'recordType + recordKey 的 SHA1,用于幂等写入',
`path` VARCHAR(1024) COMMENT '文件或目录路径',
`host_name` VARCHAR(255) COMMENT '主机名',
`owner` VARCHAR(128) COMMENT '所有者',
`risk_level` VARCHAR(32) COMMENT '风险等级',
`numeric_value` DOUBLE COMMENT '排序用数值,例如文件大小、目录大小、延迟或数量',
`payload_json` MEDIUMTEXT COMMENT '原始业务 payload,JSON 字符串',
`source_job` VARCHAR(128) COMMENT '来源任务,例如 fsimage-analyzer',
`batch_id` VARCHAR(128) COMMENT '导入批次 ID',
`analyzed_at` DATETIME NOT NULL COMMENT '分析时间',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_hdfs_offline_record` (`cluster_name`, `record_type`, `record_hash`),
KEY `idx_hdfs_offline_latest` (`cluster_name`, `record_type`, `analyzed_at`),
KEY `idx_hdfs_offline_numeric` (`cluster_name`, `record_type`, `numeric_value`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
COMMENT='HDFS fsimage/fsck/慢RPC离线分析明细,由外部分析任务幂等导入';
-- ============================================================
-- 日志与诊断元数据表
-- ============================================================
CREATE TABLE IF NOT EXISTS `monitor_log_source_policy` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`source_code` VARCHAR(128) NOT NULL COMMENT '日志源编码,唯一',
`cluster_name` VARCHAR(128) DEFAULT NULL COMMENT '集群名,NULL表示默认模板',
`service_name` VARCHAR(128) NOT NULL COMMENT '服务名',
`component_name` VARCHAR(128) DEFAULT NULL COMMENT '组件名',
`log_class` VARCHAR(32) NOT NULL COMMENT '日志类别',
`log_type` VARCHAR(128) NOT NULL COMMENT '日志类型',
`path_pattern` VARCHAR(1024) NOT NULL COMMENT '日志路径模式',
`parser_type` VARCHAR(64) NOT NULL COMMENT '解析器类型',
`enabled` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用',
`policy_source` VARCHAR(32) NOT NULL DEFAULT 'STACK_DEFAULT' COMMENT '策略来源',
`collect_level_min` VARCHAR(16) DEFAULT NULL COMMENT '最小采集级别',
`noise_policy` VARCHAR(32) NOT NULL DEFAULT 'KEEP' COMMENT '噪声策略',
`sample_rate` DOUBLE DEFAULT NULL COMMENT '采样率',
`retention_tier` VARCHAR(32) NOT NULL DEFAULT 'hot' COMMENT '保留层级',
`retention_days` INT DEFAULT NULL COMMENT '保留天数',
`include_patterns` TEXT COMMENT '包含规则(JSON)',
`exclude_patterns` TEXT COMMENT '排除规则(JSON)',
`sensitive_policy` TEXT COMMENT '脱敏策略(JSON)',
`parser_config` TEXT COMMENT '解析器配置(JSON)',
`stack_service` VARCHAR(128) DEFAULT NULL COMMENT '对应stack service',
`stack_config_type` VARCHAR(128) DEFAULT NULL COMMENT '对应stack config type',
`stack_property_name` VARCHAR(256) DEFAULT NULL COMMENT '对应stack property',
`temp_expire_at` DATETIME DEFAULT NULL COMMENT '临时诊断过期时间',
`description` TEXT COMMENT '说明',
`create_by` VARCHAR(128) DEFAULT NULL COMMENT '创建人',
`update_by` VARCHAR(128) DEFAULT NULL COMMENT '修改人',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_log_source_code` (`source_code`),
KEY `idx_log_src_cluster_svc` (`cluster_name`, `service_name`, `component_name`),
KEY `idx_log_src_type` (`log_class`, `log_type`, `enabled`),
KEY `idx_log_src_policy` (`policy_source`, `noise_policy`, `retention_tier`),
KEY `idx_log_src_temp` (`policy_source`, `temp_expire_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='日志源采集策略表';
CREATE TABLE IF NOT EXISTS `monitor_log_event_fingerprint` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`fingerprint` VARCHAR(128) NOT NULL COMMENT '事件指纹',
`cluster_name` VARCHAR(128) NOT NULL COMMENT '集群名',
`service_name` VARCHAR(128) NOT NULL COMMENT '服务名',
`component_name` VARCHAR(128) DEFAULT NULL COMMENT '组件名',
`host_name` VARCHAR(255) DEFAULT NULL COMMENT '最近出现主机',
`log_class` VARCHAR(32) NOT NULL COMMENT '日志类别',
`log_type` VARCHAR(128) NOT NULL COMMENT '日志类型',
`level` VARCHAR(16) DEFAULT NULL COMMENT '最高日志级别',
`exception_class` VARCHAR(255) DEFAULT NULL COMMENT '异常类',
`stack_hash` VARCHAR(128) DEFAULT NULL COMMENT '堆栈哈希',
`message_template` VARCHAR(2048) NOT NULL COMMENT '归一化日志模板',
`example_log_id` VARCHAR(256) DEFAULT NULL COMMENT 'Solr样例日志ID',
`first_seen_at` DATETIME NOT NULL COMMENT '首次出现时间',
`last_seen_at` DATETIME NOT NULL COMMENT '最近出现时间',
`count_5m` BIGINT NOT NULL DEFAULT 0 COMMENT '最近5分钟次数',
`count_1h` BIGINT NOT NULL DEFAULT 0 COMMENT '最近1小时次数',
`count_24h` BIGINT NOT NULL DEFAULT 0 COMMENT '最近24小时次数',
`affected_hosts` TEXT COMMENT '影响主机(JSON数组)',
`affected_components` TEXT COMMENT '影响组件(JSON数组)',
`severity_score` DOUBLE DEFAULT NULL COMMENT '严重度分',
`state` VARCHAR(32) NOT NULL DEFAULT 'NEW' COMMENT '指纹状态',
`extra_info` TEXT COMMENT '扩展信息(JSON)',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_log_fingerprint` (`cluster_name`, `fingerprint`),
KEY `idx_log_fp_service` (`cluster_name`, `service_name`, `component_name`, `state`),
KEY `idx_log_fp_time` (`last_seen_at`, `first_seen_at`),
KEY `idx_log_fp_level` (`level`, `severity_score`),
KEY `idx_log_fp_stack` (`stack_hash`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='日志事件指纹表';
CREATE TABLE IF NOT EXISTS `monitor_log_signal_window` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`window_code` VARCHAR(128) NOT NULL COMMENT '窗口编码,唯一',
`cluster_name` VARCHAR(128) NOT NULL COMMENT '集群名',
`scope_type` VARCHAR(32) NOT NULL COMMENT '作用域类型',
`scope_ref` VARCHAR(512) NOT NULL COMMENT '作用域引用',
`service_name` VARCHAR(128) DEFAULT NULL COMMENT '服务名',
`component_name` VARCHAR(128) DEFAULT NULL COMMENT '组件名',
`host_name` VARCHAR(255) DEFAULT NULL COMMENT '主机名',
`window_size` VARCHAR(16) NOT NULL COMMENT '窗口大小',
`window_start` DATETIME NOT NULL COMMENT '窗口开始',
`window_end` DATETIME NOT NULL COMMENT '窗口结束',
`error_count` BIGINT NOT NULL DEFAULT 0 COMMENT 'ERROR数',
`warn_count` BIGINT NOT NULL DEFAULT 0 COMMENT 'WARN数',
`fatal_count` BIGINT NOT NULL DEFAULT 0 COMMENT 'FATAL数',
`audit_denied_count` BIGINT NOT NULL DEFAULT 0 COMMENT '审计拒绝数',
`auth_failed_count` BIGINT NOT NULL DEFAULT 0 COMMENT '认证失败数',
`access_4xx_count` BIGINT NOT NULL DEFAULT 0 COMMENT 'HTTP 4xx数',
`access_5xx_count` BIGINT NOT NULL DEFAULT 0 COMMENT 'HTTP 5xx数',
`slow_request_count` BIGINT NOT NULL DEFAULT 0 COMMENT '慢请求数',
`request_p95_ms` BIGINT DEFAULT NULL COMMENT '请求P95耗时',
`unique_fingerprint_count` BIGINT NOT NULL DEFAULT 0 COMMENT '独立指纹数',
`top_fingerprints_json` TEXT COMMENT 'Top指纹(JSON)',
`baseline_deviation` DOUBLE DEFAULT NULL COMMENT '基线偏移',
`stability_score` DOUBLE DEFAULT NULL COMMENT '稳定性分',
`parser_error_count` BIGINT NOT NULL DEFAULT 0 COMMENT '解析失败数',
`sample_count` BIGINT NOT NULL DEFAULT 0 COMMENT '样本数',
`extra_info` TEXT COMMENT '扩展信息(JSON)',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_log_signal_window` (`window_code`),
KEY `idx_log_signal_scope` (`cluster_name`, `scope_type`, `scope_ref`(255), `window_size`),
KEY `idx_log_signal_object` (`cluster_name`, `service_name`, `component_name`, `host_name`, `window_start`),
KEY `idx_log_signal_time` (`window_start`, `window_end`),
KEY `idx_log_signal_score` (`stability_score`, `baseline_deviation`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='日志时间窗信号表';
CREATE TABLE IF NOT EXISTS `monitor_log_diagnosis_case` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`case_code` VARCHAR(128) NOT NULL COMMENT '诊断案例编码',
`cluster_name` VARCHAR(128) NOT NULL COMMENT '集群名',
`scope_type` VARCHAR(32) NOT NULL COMMENT '作用域类型',
`scope_ref` VARCHAR(512) NOT NULL COMMENT '作用域引用',
`service_name` VARCHAR(128) DEFAULT NULL COMMENT '服务名',
`component_name` VARCHAR(128) DEFAULT NULL COMMENT '组件名',
`host_name` VARCHAR(255) DEFAULT NULL COMMENT '主机名',
`title` VARCHAR(255) NOT NULL COMMENT '诊断标题',
`severity` VARCHAR(16) NOT NULL DEFAULT 'WARNING' COMMENT '严重等级',
`status` VARCHAR(32) NOT NULL DEFAULT 'OPEN' COMMENT '案例状态',
`engine_type` VARCHAR(32) NOT NULL DEFAULT 'RULE' COMMENT '诊断引擎',
`model_version` VARCHAR(128) DEFAULT NULL COMMENT '模型或规则版本',
`summary` TEXT COMMENT '诊断摘要',
`impact` TEXT COMMENT '影响面说明',
`evidence_refs_json` TEXT COMMENT '证据引用(JSON)',
`suspected_causes_json` TEXT COMMENT '疑似原因(JSON)',
`recommendations_json` TEXT COMMENT '建议(JSON)',
`confidence` DOUBLE DEFAULT NULL COMMENT '置信度',
`started_at` DATETIME NOT NULL COMMENT '诊断窗口开始',
`ended_at` DATETIME DEFAULT NULL COMMENT '诊断窗口结束',
`acked_by` VARCHAR(128) DEFAULT NULL COMMENT '确认人',
`acked_at` DATETIME DEFAULT NULL COMMENT '确认时间',
`resolved_by` VARCHAR(128) DEFAULT NULL COMMENT '解决人',
`resolved_at` DATETIME DEFAULT NULL COMMENT '解决时间',
`extra_info` TEXT COMMENT '扩展信息(JSON)',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_log_case_code` (`case_code`),
KEY `idx_log_case_scope` (`cluster_name`, `scope_type`, `scope_ref`(255), `status`),
KEY `idx_log_case_object` (`cluster_name`, `service_name`, `component_name`, `host_name`, `status`),
KEY `idx_log_case_time` (`started_at`, `ended_at`, `create_time`),
KEY `idx_log_case_engine` (`engine_type`, `severity`, `confidence`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='日志诊断案例表';
CREATE TABLE IF NOT EXISTS `monitor_log_ai_feedback` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`feedback_code` VARCHAR(128) NOT NULL COMMENT '反馈编码',
`case_id` BIGINT NOT NULL COMMENT '诊断案例ID',
`case_code` VARCHAR(128) NOT NULL COMMENT '诊断案例编码',
`operator_name` VARCHAR(128) DEFAULT NULL COMMENT '操作人',
`action` VARCHAR(32) NOT NULL COMMENT '反馈动作',
`feedback` TEXT COMMENT '反馈内容',
`resolved` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否解决',
`resolved_at` DATETIME DEFAULT NULL COMMENT '解决时间',
`recommendation_index` INT DEFAULT NULL COMMENT '建议序号',
`before_value` TEXT COMMENT '反馈前(JSON)',
`after_value` TEXT COMMENT '反馈后(JSON)',
`notes` TEXT COMMENT '备注',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_log_feedback_code` (`feedback_code`),
KEY `idx_log_feedback_case` (`case_id`, `action`, `create_time`),
KEY `idx_log_feedback_case_code` (`case_code`, `action`, `create_time`),
KEY `idx_log_feedback_operator` (`operator_name`, `create_time`),
KEY `idx_log_feedback_resolved` (`resolved`, `resolved_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='日志AI诊断反馈表';
CREATE TABLE IF NOT EXISTS `monitor_log_operation_audit` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`audit_code` VARCHAR(128) NOT NULL COMMENT '审计编码',
`cluster_name` VARCHAR(128) NOT NULL COMMENT '集群名',
`operation_type` VARCHAR(32) NOT NULL COMMENT '操作类型',
`target_type` VARCHAR(64) DEFAULT NULL COMMENT '目标类型',
`target_ref` VARCHAR(512) DEFAULT NULL COMMENT '目标引用',
`operator_name` VARCHAR(128) DEFAULT NULL COMMENT '操作人',
`operator_roles` TEXT COMMENT '操作人角色快照',
`sensitive_flag` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否敏感日志操作',
`allowed_flag` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否允许',
`denied_reason` TEXT COMMENT '拒绝原因',
`time_range_from` DATETIME DEFAULT NULL COMMENT '查询开始时间',
`time_range_to` DATETIME DEFAULT NULL COMMENT '查询结束时间',
`request_summary` TEXT COMMENT '脱敏请求摘要',
`backend_status` VARCHAR(64) DEFAULT NULL COMMENT '后端状态',
`data_ready` TINYINT(1) DEFAULT NULL COMMENT '是否返回真实数据',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_log_audit_code` (`audit_code`),
KEY `idx_log_audit_cluster_time` (`cluster_name`, `create_time`),
KEY `idx_log_audit_operator` (`operator_name`, `create_time`),
KEY `idx_log_audit_operation` (`operation_type`, `create_time`),
KEY `idx_log_audit_sensitive` (`sensitive_flag`, `allowed_flag`, `create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='日志诊断操作审计表';
-- 初始化日志源默认模板。
-- 只写入 stack 默认策略,不写集群覆盖;集群级差异由后续策略服务生成。
INSERT INTO `monitor_log_source_policy`
(`source_code`, `cluster_name`, `service_name`, `component_name`, `log_class`, `log_type`, `path_pattern`, `parser_type`, `enabled`, `policy_source`, `collect_level_min`, `noise_policy`, `sample_rate`, `retention_tier`, `retention_days`, `stack_service`, `description`)
VALUES
('default.hdfs.namenode.app', NULL, 'HDFS', 'NAMENODE', 'APP', 'hdfs_namenode_app', '/var/log/hadoop/hdfs/hadoop-hdfs-namenode-*.log', 'LOG4J_STANDARD', 1, 'STACK_DEFAULT', 'WARN', 'KEEP', NULL, 'hot', 15, 'HDFS', 'HDFS NameNode WARN/ERROR and lifecycle logs'),
('default.hdfs.datanode.app', NULL, 'HDFS', 'DATANODE', 'APP', 'hdfs_datanode_app', '/var/log/hadoop/hdfs/hadoop-hdfs*-datanode-*.log', 'LOG4J_STANDARD', 1, 'STACK_DEFAULT', 'WARN', 'KEEP', NULL, 'hot', 15, 'HDFS', 'HDFS DataNode WARN/ERROR and data pipeline logs'),
('default.hdfs.secondarynamenode.app', NULL, 'HDFS', 'SECONDARY_NAMENODE', 'APP', 'hdfs_secondarynamenode_app', '/var/log/hadoop/hdfs/hadoop-hdfs-secondarynamenode-*.log', 'LOG4J_STANDARD', 1, 'STACK_DEFAULT', 'WARN', 'KEEP', NULL, 'hot', 15, 'HDFS', 'HDFS SecondaryNameNode WARN/ERROR and checkpoint logs'),
('default.hdfs.journalnode.app', NULL, 'HDFS', 'JOURNALNODE', 'APP', 'hdfs_journalnode_app', '/var/log/hadoop/hdfs/hadoop-hdfs-journalnode-*.log', 'LOG4J_STANDARD', 1, 'STACK_DEFAULT', 'WARN', 'KEEP', NULL, 'hot', 15, 'HDFS', 'HDFS JournalNode WARN/ERROR and quorum logs'),
('default.hdfs.audit', NULL, 'HDFS', 'NAMENODE', 'AUDIT', 'hdfs_audit', '/var/log/hadoop/hdfs/hdfs-audit.log', 'AUDIT_KV', 1, 'STACK_DEFAULT', 'INFO', 'AGGREGATE', NULL, 'audit', 30, 'HDFS', 'HDFS audit logs, deny kept and success aggregated'),
('default.hdfs.security', NULL, 'HDFS', 'HDFS', 'SECURITY', 'hdfs_security_auth', '/var/log/hadoop/hdfs/SecurityAuth.audit', 'AUDIT_KV', 1, 'STACK_DEFAULT', 'INFO', 'AGGREGATE', NULL, 'audit', 30, 'HDFS', 'HDFS SecurityAuth logs, auth failures kept and success aggregated'),
('default.atlas.audit', NULL, 'ATLAS', 'ATLAS_SERVER', 'AUDIT', 'atlas_audit', '/var/log/atlas/audit.log', 'PIPE_AUDIT', 1, 'STACK_DEFAULT', 'INFO', 'AGGREGATE', NULL, 'audit', 30, 'ATLAS', 'Atlas audit logs, non-2xx kept and health checks aggregated'),
('default.ranger.access', NULL, 'RANGER', 'RANGER_ADMIN', 'ACCESS', 'ranger_access', '/var/log/ranger/admin/access-*.log', 'APACHE_ACCESS', 1, 'STACK_DEFAULT', 'INFO', 'AGGREGATE', NULL, 'short', 3, 'RANGER', 'Ranger access logs, 4xx/5xx kept and 304 aggregated'),
('default.ranger.admin.app', NULL, 'RANGER', 'RANGER_ADMIN', 'APP', 'ranger_admin', '/var/log/ranger/admin/ranger-admin-*-ranger.log', 'LOG4J_STANDARD', 1, 'STACK_DEFAULT', 'WARN', 'KEEP', NULL, 'hot', 15, 'RANGER', 'Ranger Admin WARN/ERROR and authentication lifecycle logs'),
('default.ranger.usersync', NULL, 'RANGER', 'RANGER_USERSYNC', 'SECURITY', 'ranger_usersync', '/var/log/ranger/usersync/usersync-*-ranger.log', 'RANGER_SYNC_LOG', 1, 'STACK_DEFAULT', 'WARN', 'KEEP', NULL, 'hot', 15, 'RANGER', 'Ranger Usersync WARN/ERROR identity sync logs'),
('default.ranger.tagsync', NULL, 'RANGER', 'RANGER_TAGSYNC', 'SECURITY', 'ranger_tagsync', '/var/log/ranger/tagsync/tagsync.log', 'RANGER_SYNC_LOG', 1, 'STACK_DEFAULT', 'WARN', 'AGGREGATE', NULL, 'short', 7, 'RANGER', 'Ranger Tagsync WARN/ERROR tag sync logs, repeated Kafka failures aggregated'),
('default.livy.server.app', NULL, 'LIVY', 'LIVY_SERVER', 'APP', 'livy_server', '/var/log/livy/livy-livy-server.out', 'LOG4J_STANDARD', 1, 'STACK_DEFAULT', 'WARN', 'KEEP', NULL, 'hot', 15, 'LIVY', 'Livy Server WARN/ERROR logs'),
('default.livy.request', NULL, 'LIVY', 'LIVY_SERVER', 'REQUEST', 'livy_request', '/var/log/livy/*.request.log', 'LOCALIZED_ACCESS', 1, 'STACK_DEFAULT', 'INFO', 'AGGREGATE', NULL, 'short', 3, 'LIVY', 'Livy request logs, localized month access logs with 4xx/5xx kept and 2xx aggregated'),
('default.hive.server.app', NULL, 'HIVE', 'HIVE_SERVER', 'APP', 'hive_server', '/var/log/hive/hiveserver2.log', 'LOG4J_STANDARD', 1, 'STACK_DEFAULT', 'WARN', 'KEEP', NULL, 'hot', 15, 'HIVE', 'HiveServer2 app WARN/ERROR logs'),
('default.hive.server.stderr', NULL, 'HIVE', 'HIVE_SERVER', 'JVM', 'hive_server2_stderr', '/var/log/hive/hive-server2.err', 'STACKTRACE_CONTINUATION', 1, 'STACK_DEFAULT', 'WARN', 'KEEP', NULL, 'hot', 15, 'HIVE', 'HiveServer2 stderr and Java stack traces'),
('default.hive.metastore.app', NULL, 'HIVE', 'HIVE_METASTORE', 'APP', 'hive_metastore', '/var/log/hive/hivemetastore.log', 'LOG4J_STANDARD', 1, 'STACK_DEFAULT', 'WARN', 'KEEP', NULL, 'hot', 15, 'HIVE', 'Hive Metastore WARN/ERROR logs'),
('default.knox.gateway.audit', NULL, 'KNOX', 'KNOX_GATEWAY', 'AUDIT', 'knox_gateway_audit', '/var/log/knox/gateway-audit.log', 'PIPE_AUDIT', 1, 'STACK_DEFAULT', 'INFO', 'AGGREGATE', NULL, 'audit', 30, 'KNOX', 'Knox gateway audit logs'),
('default.trino.http_request', NULL, 'TRINO', NULL, 'REQUEST', 'trino_http_request', '/var/log/trino/http-request.log', 'TRINO_HTTP_REQUEST', 1, 'STACK_DEFAULT', 'INFO', 'AGGREGATE', NULL, 'short', 3, 'TRINO', 'Trino HTTP request logs, 4xx/5xx/slow requests kept and health checks aggregated'),
('default.trino.server.app', NULL, 'TRINO', NULL, 'APP', 'trino_server', '/var/log/trino/server.log', 'TRINO_SERVER_LOG', 1, 'STACK_DEFAULT', 'WARN', 'KEEP', NULL, 'hot', 15, 'TRINO', 'Trino server WARN/ERROR logs and worker communication failures'),
('default.trino.launcher.app', NULL, 'TRINO', NULL, 'APP', 'trino_launcher', '/var/log/trino/launcher.log', 'TRINO_SERVER_LOG', 1, 'STACK_DEFAULT', 'WARN', 'KEEP', NULL, 'short', 7, 'TRINO', 'Trino launcher startup WARN/ERROR logs'),
('default.trino.stdout', NULL, 'TRINO', NULL, 'JVM', 'trino_stdout', '/var/log/trino/trino_*.out', 'STACKTRACE_CONTINUATION', 1, 'STACK_DEFAULT', 'ERROR', 'KEEP', NULL, 'short', 7, 'TRINO', 'Trino stdout crash, OOM and exception traces'),
('default.monitor.platform_api.app', NULL, 'AMBARI_PLUS_MONITOR', 'MONITOR_PLATFORM_API', 'MONITOR', 'monitor_platform_api_app', '/var/log/ambari-plus/monitor/platform-api/platform-api.log', 'SPRING_BOOT', 1, 'STACK_DEFAULT', 'WARN', 'KEEP', NULL, 'hot', 15, 'AMBARI_PLUS_MONITOR', 'Monitor Platform API WARN/ERROR, Solr, AI diagnosis and scheduling failures'),
('default.monitor.agent', NULL, 'AMBARI_PLUS_MONITOR', 'MONITOR_AGENT', 'MONITOR', 'monitor_agent_app', '/var/log/ambari-plus/monitor/agent/agent.log', 'SPRING_BOOT', 1, 'STACK_DEFAULT', 'WARN', 'KEEP', NULL, 'hot', 15, 'AMBARI_PLUS_MONITOR', 'Monitor Agent collection and push WARN/ERROR logs'),
('default.monitor.ingester.app', NULL, 'AMBARI_PLUS_MONITOR', 'MONITOR_INGESTER', 'MONITOR', 'monitor_ingester_app', '/var/log/ambari-plus/monitor/ingester/ingester.log', 'SPRING_BOOT', 1, 'STACK_DEFAULT', 'WARN', 'KEEP', NULL, 'hot', 15, 'AMBARI_PLUS_MONITOR', 'Monitor Ingester ingest, queue and IoTDB write WARN/ERROR logs'),
('default.monitor.rule_engine.app', NULL, 'AMBARI_PLUS_MONITOR', 'MONITOR_RULE_ENGINE', 'MONITOR', 'monitor_rule_engine_app', '/var/log/ambari-plus/monitor/rule-engine/rule-engine.log', 'SPRING_BOOT', 1, 'STACK_DEFAULT', 'WARN', 'KEEP', NULL, 'hot', 15, 'AMBARI_PLUS_MONITOR', 'Monitor Rule Engine alert, threshold and health score WARN/ERROR logs'),
('default.monitor.platform_api.jvm_out', NULL, 'AMBARI_PLUS_MONITOR', 'MONITOR_PLATFORM_API', 'JVM', 'monitor_platform_api_jvm_out', '/var/log/ambari-plus/monitor/platform-api.jvm.out', 'STACKTRACE_CONTINUATION', 1, 'STACK_DEFAULT', 'ERROR', 'KEEP', NULL, 'short', 7, 'AMBARI_PLUS_MONITOR', 'Monitor Platform API JVM stdout crash, OOM and exception traces'),
('default.monitor.agent.jvm_out', NULL, 'AMBARI_PLUS_MONITOR', 'MONITOR_AGENT', 'JVM', 'monitor_agent_jvm_out', '/var/log/ambari-plus/monitor/agent.jvm.out', 'STACKTRACE_CONTINUATION', 1, 'STACK_DEFAULT', 'ERROR', 'KEEP', NULL, 'short', 7, 'AMBARI_PLUS_MONITOR', 'Monitor Agent JVM stdout crash, OOM and exception traces'),
('default.monitor.ingester.jvm_out', NULL, 'AMBARI_PLUS_MONITOR', 'MONITOR_INGESTER', 'JVM', 'monitor_ingester_jvm_out', '/var/log/ambari-plus/monitor/ingester.jvm.out', 'STACKTRACE_CONTINUATION', 1, 'STACK_DEFAULT', 'ERROR', 'KEEP', NULL, 'short', 7, 'AMBARI_PLUS_MONITOR', 'Monitor Ingester JVM stdout crash, OOM and exception traces'),
('default.monitor.rule_engine.jvm_out', NULL, 'AMBARI_PLUS_MONITOR', 'MONITOR_RULE_ENGINE', 'JVM', 'monitor_rule_engine_jvm_out', '/var/log/ambari-plus/monitor/rule-engine.jvm.out', 'STACKTRACE_CONTINUATION', 1, 'STACK_DEFAULT', 'ERROR', 'KEEP', NULL, 'short', 7, 'AMBARI_PLUS_MONITOR', 'Monitor Rule Engine JVM stdout crash, OOM and exception traces')
ON DUPLICATE KEY UPDATE
`parser_type` = VALUES(`parser_type`),
`collect_level_min` = VALUES(`collect_level_min`),
`noise_policy` = VALUES(`noise_policy`),
`retention_tier` = VALUES(`retention_tier`),
`retention_days` = VALUES(`retention_days`),
`description` = VALUES(`description`),
`update_time` = CURRENT_TIMESTAMP;
完成这一步后,再回到 Ambari Plus 页面安装 AMBARI_PLUS_MONITOR 服务。