单系统简单告警模块设计

单系统简单告警模块设计

遇到实践问题可私信

需求说明

对应用运行时的一些异常进行采集与通知。形成一套异常告警机制。

告警事件:代表异常事件,将发生的异常,包装成需要告警的事件。

告警事件标识:用来区分不同的告警事件,区分粒度较细。

告警监控项:从粗粒度对需要告警的事件进行分类,也可以理解为对事件标识的分类,一个监控项可以对应多个事件标识。

告警策略:对不同的告警监控项采用不同的通知策略。

告警组:接收告警通知的人员分组。

告警通知:即通知的消息内容。

通知方式:可以是邮件通知,短信通知,即时通讯软件通知。

分析设计

告警来源

  1. 定时任务层面

    1. 数据探查的监控任务
    2. Hive服务监控
    3. YARN超时任务清理 :杀死yarn中长期某些状态下的任务。例如,运行超过2Day。通过yarn接口扫描整个yarn的任务,实时计算时长。存在不受限时长限制的任务,在管理功能里面控制。
    4. YARN任务堆积告警:某些状态下任务的数量超过阈值,进行告警,通过yarn接口,实时计算数量。
    5. HDFS路径删除
    6. HDFS访问IP同步
    7. Yarn队列同步

    事件标记采用任务实现类名就好,用来表名定时任务是否执行成功。

  2. 业务中发生的异常

    1. 异步创建账户

      事件标记:async-create-account-{accountname}{accountname}代表占位符,有多少个账号就会产生多少个事件标记。

    2. HDFS集群服务不可用

      事件标记:hdfs-service-{clustername}{clustername}代表占位符,有多少个hdfs集群就会产生多少个事件标记。

    3. HDFS白名单账号信息不存在

      事件标记:hdfs-whitelist-{accountname}{accountname}代表占位符,有多少个账号就会产生多少个事件标记。

    4. HDFS白名单同步文件信息失败

      事件标记:hdfs-whitelist-{clustername}{clustername}代表占位符,有多少个hdfs集群就会产生多少个事件标记。

    5. HDFS集群节点连通性异常

      事件标记:hdfs-{clustername}-{nodehost}{clustername}{nodehost}代表占位符,有多少个HDFS的NM节点和Router节点就会产生多少个事件标记。

    6. YARN集群节点连通性异常

      事件标记:yarn-{clustername}-{nodehost}{clustername}{nodehost}代表占位符,有多少个yarn的RM节点就会产生多少个事件标记。

    7. OCDP系统专用创建hive库

      事件标记:hive-createDB-{databaseName},{databaseName}代表占位符,需要创建多少个hivedb库名有多少就会产生多少个事件标记。

    8. yarn队列同步异常

      事件标记:yarn-queue-{clustername}{clustername}代表占位符,有多少个hdfs集群就会产生多少个事件标记。

    9. Hive metastore节点连通性异常监控

      事件标记:hive-metastore-node-{ip}{ip}代表占位符,有多少个ip就会产生多少个事件标记。

    10. Hive Thrift Server节点异常监控

      事件标记:hive-thriftserver-node-{ip}{ip}代表占位符,有多少个ip就会产生多少个事件标记。

    11. Spark Thrift Server节点异常监控

      事件标记:spark-thriftserver-node-{ip}{ip}代表占位符,有多少个ip就会产生多少个事件标记。

    12. hive服务异常

      事件标记:hive-service

    13. YARN超时任务清理异常

      事件标记:yarn-KillTimeoutAppJob-{appid}{appid}代表占位符,有多少个超时appid异常就会产生多少个事件标记。

    14. YARN任务堆积异常

      事件标记:yarn-backlog-{clustername}-{status}{clustername}{status}代表占位符,有多少个超时yarn中多少个状态出现积压,就会产生多少个事件标记。

    15. 数据探查节点连通性异常

      事件标记:bigquery-node-{ip}{ip}代表占位符,有多少个ip就会产生多少个事件标记。

    16. 数据探查服务异常

      事件标记:bigquery-service

    监控项:

    1. async-create-account
    2. hdfs-service-availability
    3. hdfs-Whitelist-accountname
    4. hdfs-whitelist-clustername
    5. hdfs-node-reachable
    6. yarn-node-reachable
    7. hive-create-db
    8. yarn-queue
    9. hive-metastore-node-reachable
    10. hive-thriftserver-node-reachable
    11. spark-thriftserver-node-reachable
    12. hive-service-availability
    13. yarn-kill-timeout-app-job
    14. yarn-backlog
    15. bigquery-node-reachable
    16. bigquery-service-availability

告警策略

告警策略与监控项进行绑定调整

  1. 立即告警

    发生告警事件后,立即通知。事件自动恢复,一事件一通知。

    实现:业务代码里,直接调用通知接口。事件入库且标记为已通知。

  2. 持续告警(暂不实现)

    发生告警事件后,立即通知。事件不自动恢复。在未恢复期间,每隔固定时长分钟,再次发送通知。一个事件,持续通知。

    举例:一个告警事件,第一次通知之后,每隔30分钟检测一次,发现这个事件未进行恢复操作,再通知一次。

    实现:定时扫描事件表,对未恢复的时间且采用持续告警策略的事件进行间隔持续通知。

  3. 聚合同标记事件告警

    发生告警事件后,立即通知。在与上一次的通知间隔某个固定时长内的相同告警,聚合只通知一次。

    举例:一个告警事件,第一次通知之后。在30min内,又持续新增了同标记的事件,则不直接告警,在31min的时候,聚合30min时间区间事件,通知中包含时间区间内的第一次和最后一次,以及一共事件的次数。

告警组

固定:管理系统的权限人员

告警事件

发生的时间,需要进行告警通知,单独的一张表存详细的事件记录。事件发生一次,就产生一条记录。

事件核心字段:

  1. 事件发生时间

  2. 事件环境

    1. sit
    2. prd
  3. 事件标记

    用来标记这个事件的唯一性,主要是聚合时使用。强制小写

  4. 事件级别

    1. 普通:不需要手动恢复,服务可用
    2. 警告:需要手动恢复,服务可用
    3. 严重:需要手动恢复,服务不可用
  5. 具体内容

  6. 告警监控项

    用来于策略进行绑定,强制小写

  7. 通知标记

    1. 已通知告警
    2. 未通知

告警通知

  1. 事件发生时间
  2. 事件环境
    1. sit
    2. prd
  3. 事件级别
    1. 普通:服务可用,但是不影响HA
    2. 警告:服务可用,但是HA故障了
    3. 严重:服务不可用了
  4. 具体内容
    1. 内容1
    2. 内容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 '事件的等级
  • 26
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

顧棟

若对你有帮助,望对作者鼓励一下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值