单系统简单告警模块设计
遇到实践问题可私信
文章目录
需求说明
对应用运行时的一些异常进行采集与通知。形成一套异常告警机制。
告警事件:代表异常事件,将发生的异常,包装成需要告警的事件。
告警事件标识:用来区分不同的告警事件,区分粒度较细。
告警监控项:从粗粒度对需要告警的事件进行分类,也可以理解为对事件标识的分类,一个监控项可以对应多个事件标识。
告警策略:对不同的告警监控项采用不同的通知策略。
告警组:接收告警通知的人员分组。
告警通知:即通知的消息内容。
通知方式:可以是邮件通知,短信通知,即时通讯软件通知。
分析设计
告警来源
-
定时任务层面
- 数据探查的监控任务
- Hive服务监控
- YARN超时任务清理 :杀死yarn中长期某些状态下的任务。例如,运行超过2Day。通过yarn接口扫描整个yarn的任务,实时计算时长。存在不受限时长限制的任务,在管理功能里面控制。
- YARN任务堆积告警:某些状态下任务的数量超过阈值,进行告警,通过yarn接口,实时计算数量。
- HDFS路径删除
- HDFS访问IP同步
- Yarn队列同步
事件标记采用任务实现类名就好,用来表名定时任务是否执行成功。
-
业务中发生的异常
-
异步创建账户
事件标记:
async-create-account-{accountname}
,{accountname}
代表占位符,有多少个账号就会产生多少个事件标记。 -
HDFS集群服务不可用
事件标记:
hdfs-service-{clustername}
,{clustername}
代表占位符,有多少个hdfs集群就会产生多少个事件标记。 -
HDFS白名单账号信息不存在
事件标记:
hdfs-whitelist-{accountname}
,{accountname}
代表占位符,有多少个账号就会产生多少个事件标记。 -
HDFS白名单同步文件信息失败
事件标记:
hdfs-whitelist-{clustername}
,{clustername}
代表占位符,有多少个hdfs集群就会产生多少个事件标记。 -
HDFS集群节点连通性异常
事件标记:
hdfs-{clustername}-{nodehost}
,{clustername}
与{nodehost}
代表占位符,有多少个HDFS的NM节点和Router节点就会产生多少个事件标记。 -
YARN集群节点连通性异常
事件标记:
yarn-{clustername}-{nodehost}
,{clustername}
与{nodehost}
代表占位符,有多少个yarn的RM节点就会产生多少个事件标记。 -
OCDP系统专用创建hive库
事件标记:
hive-createDB-{databaseName}
,{databaseName}
代表占位符,需要创建多少个hivedb库名有多少就会产生多少个事件标记。 -
yarn队列同步异常
事件标记:
yarn-queue-{clustername}
,{clustername}
代表占位符,有多少个hdfs集群就会产生多少个事件标记。 -
Hive metastore节点连通性异常监控
事件标记:
hive-metastore-node-{ip}
,{ip}
代表占位符,有多少个ip就会产生多少个事件标记。 -
Hive Thrift Server节点异常监控
事件标记:
hive-thriftserver-node-{ip}
,{ip}
代表占位符,有多少个ip就会产生多少个事件标记。 -
Spark Thrift Server节点异常监控
事件标记:
spark-thriftserver-node-{ip}
,{ip}
代表占位符,有多少个ip就会产生多少个事件标记。 -
hive服务异常
事件标记:
hive-service
。 -
YARN超时任务清理异常
事件标记:
yarn-KillTimeoutAppJob-{appid}
,{appid}
代表占位符,有多少个超时appid异常就会产生多少个事件标记。 -
YARN任务堆积异常
事件标记:
yarn-backlog-{clustername}-{status}
,{clustername}
和{status}
代表占位符,有多少个超时yarn中多少个状态出现积压,就会产生多少个事件标记。 -
数据探查节点连通性异常
事件标记:
bigquery-node-{ip}
,{ip}
代表占位符,有多少个ip就会产生多少个事件标记。 -
数据探查服务异常
事件标记:
bigquery-service
。
监控项:
async-create-account
hdfs-service-availability
hdfs-Whitelist-accountname
hdfs-whitelist-clustername
hdfs-node-reachable
yarn-node-reachable
hive-create-db
yarn-queue
hive-metastore-node-reachable
hive-thriftserver-node-reachable
spark-thriftserver-node-reachable
hive-service-availability
yarn-kill-timeout-app-job
yarn-backlog
bigquery-node-reachable
bigquery-service-availability
-
告警策略
告警策略与监控项进行绑定调整
-
立即告警
发生告警事件后,立即通知。事件自动恢复,一事件一通知。
实现:业务代码里,直接调用通知接口。事件入库且标记为已通知。
-
持续告警(暂不实现)
发生告警事件后,立即通知。事件不自动恢复。在未恢复期间,每隔固定时长分钟,再次发送通知。一个事件,持续通知。
举例:一个告警事件,第一次通知之后,每隔30分钟检测一次,发现这个事件未进行恢复操作,再通知一次。
实现:定时扫描事件表,对未恢复的时间且采用持续告警策略的事件进行间隔持续通知。
-
聚合同标记事件告警
发生告警事件后,立即通知。在与上一次的通知间隔某个固定时长内的相同告警,聚合只通知一次。
举例:一个告警事件,第一次通知之后。在30min内,又持续新增了同标记的事件,则不直接告警,在31min的时候,聚合30min时间区间事件,通知中包含时间区间内的第一次和最后一次,以及一共事件的次数。
告警组
固定:管理系统的权限人员
告警事件
发生的时间,需要进行告警通知,单独的一张表存详细的事件记录。事件发生一次,就产生一条记录。
事件核心字段:
-
事件发生时间
-
事件环境
- sit
- prd
-
事件标记
用来标记这个事件的唯一性,主要是聚合时使用。强制小写
-
事件级别
- 普通:不需要手动恢复,服务可用
- 警告:需要手动恢复,服务可用
- 严重:需要手动恢复,服务不可用
-
具体内容
-
告警监控项
用来于策略进行绑定,强制小写
-
通知标记
- 已通知告警
- 未通知
告警通知
- 事件发生时间
- 事件环境
- sit
- prd
- 事件级别
- 普通:服务可用,但是不影响HA
- 警告:服务可用,但是HA故障了
- 严重:服务不可用了
- 具体内容
- 内容1
- 内容2
告警时间:2024-04-20 20:40:00
级别:严重
环境:PRD
事件标识:BigQuery-Node-192.168.1.1
告警内容:
[2024-04-20 20:39:10] 数据探查节点(192.168.1.1)连通性检测异常
[2024-04-20 20:39:10] 数据探查节点(192.168.1.1)连通性检测异常
事件数量:2
通知方式
核心设计说明
表设计
CREATE TABLE t_alarm_event
(
`id` BIGINT unsigned PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`event_occurrence_time` DATETIME NOT NULL COMMENT '事件发生时间',
`event_env` VARCHAR(10) NOT NULL COMMENT '事件发生环境编码。如sit,pre,prd',
`event_identity` VARCHAR(200) NOT NULL COMMENT '事件标识,聚合时使用的唯一标识',
`event_level` VARCHAR(20) NOT NULL COMMENT '事件的等级,普通,警告,严重',
`monitored_item` VARCHAR(50) NOT NULL COMMENT '告警监控项',
`event_title` VARCHAR(60) NOT NULL COMMENT '事件的标题',
`event_context` VARCHAR(500) NOT NULL COMMENT '事件的具体内容',
`event_status` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '事件状态:0-未处理,1-已处理',
`event_recover` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '事件恢复标记:0-未恢复,1-已恢复,2-自动恢复'
) ENGINE = InnoDB COMMENT ='告警事件表';
CREATE TABLE t_alarm_event_policy_rel
(
`id` BIGINT unsigned PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`create_user` VARCHAR(12) NOT NULL COMMENT '创建人工号',
`update_user` VARCHAR(12) NOT NULL COMMENT '修改人工号',
`alarm_policy` tinyint unsigned NOT NULL COMMENT '事件的告警策略',
`monitored_item` VARCHAR(50) NOT NULL COMMENT '告警监控项',
`time_interval_minutes` INT NULL COMMENT '时间间隔,分钟,告警聚合或持续告警检查的额时间间隔',
`event_identity` VARCHAR(200) NULL COMMENT '事件标识,聚合时使用的唯一标识',
`pre_notify_time` DATETIME NULL COMMENT '事件标识的上一次告警通知时间',
UNIQUE KEY unique_alarm_event_policy (monitored_item, event_identity)
) ENGINE = InnoDB COMMENT ='事件告警策略关系表';
CREATE TABLE t_alarm_notification
(
`id` BIGINT unsigned PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`notification_time` DATETIME NULL COMMENT '告警通知时间',
`event_env` VARCHAR(10) NOT NULL COMMENT '事件发生环境编码。如sit,pre,prd',
`event_level` VARCHAR(20) NOT NULL COMMENT '事件的等级