服务可用性设计
一、统计指标
根据普罗米修斯Prometheus中的up指标,按照分钟记录服务不可用的记录数
up指标:up{application=“agr-ecos.admin”,instance=“30.79.8.41:43950”,job=“agr-ecos”} 当实例下线时为0,实例上线时为1
1、判断服务不可用逻辑
服务在某个分钟里,所有实例的up指标全为0,如果满足条件则记录入库(为了可以删除,存储至Pg库)
2、统计逻辑
a)定时任务查询前1h中up为0的指标,若存在记录,则遍历up为0的服务,根据服务名查询对应的事件段的up数据
b)按天统计不可用持续时间和当天不可用分钟数,若服务不可用跨天则需要在第二天统计时,更新不可用持续时间和结束时间
c)删除数据时需要重新统计
二、表结构设计
1、服务不可用明细表: tb_service_disabled_record
field | type | comment |
---|---|---|
service_name | varchar | 服务名 |
disable_time | timestamp | 不可用出现时间(分钟) |
instance_num | int | 实例数量 |
2、服务不可用时间统计表:tb_service_disabled_duration
field | type | comment |
---|---|---|
service_name | varchar | 服务名 |
disable_start_time | timestamp | 不可用开始时间 |
disable_duration | int | 不可用持续时间 |
disable_end_time | timestamp | 不可用结束时间 |
有跨天不可用时,则在第二天更新disable_duration 和disable_start_time
3、服务不可用按天统计表:tb_service_disabled_daily_statistic
field | type | comment |
---|---|---|
service_name | varchar | 服务名 |
disable_minutes | int | 不可用时间 |
statistic_day | date | 日期 |
三、接口设计
1、按周,月,年统计服务可用率,不可用分钟数,最长不可用时间
2、最近一周topK不可用服务列表
3、最近一个月topK不可用服务列表
4、各个系统不可用服服务列表