运营管理
提供规则场景指标的平台全景视图、业务域视图、引擎组件视图、规则场景视图等,并提供引擎组件心跳监控。
指标的表设计
1. 规则场景指标(原始数据)
表名:sence_metrics_raw
字段名 | 别名 | 数据类型 | 长度 | 是否必填 | 备注 |
---|---|---|---|---|---|
采集记录ID | id | BIGINT | 20 | 是 | 采集原始记录ID |
接口路径 | uri | BIGINT | 20 | 是 | 接口路径 |
业务身份-流程编码 | process_code | VARCHAR | 255 | 是 | 流程编码 |
业务身份-任务编码 | task_code | VARCHAR | 32 | 是 | 任务编码 |
开始时间 | begin_time | DATETIME | 32 | 是 | 开始时间 |
结束时间 | end_time | DATETIME | 32 | 是 | 结束时间 |
请求处理最大时长 | max_duration | INT | 11 | 是 | 单位毫秒 |
请求处理最小时长 | min_duration | INT | 11 | 是 | 单位毫秒 |
请求处理平均时长 | avg_duration | INT | 11 | 是 | 单位毫秒 |
请求次数 | total_cnt | VARCHAR | 255 | 是 | 请求次数 |
请求失败次数 | failure_cnt | VARCHAR | 32 | 是 | 请求失败次数 |
请求成功次数 | success_cnt | INT | 11 | 是 | 请求成功次数 |
采集间隔 | interval | INT | 11 | 是 | 间隔单位数 |
采集间隔单位 | time_unit | VARCHAR | 16 | 是 | 间隔时间单位,默认为second(秒) |
建表语句:
sql
CREATE TABLE sence_metrics_raw (
id BIGINT(20) PRIMARY KEY, -- 采集原始记录ID
uri BIGINT(20), -- 接口路径
process_code VARCHAR(255), -- 流程编码
task_code VARCHAR(32), -- 任务编码
begin_time DATETIME, -- 开始时间
end_time DATETIME, -- 结束时间
max_duration INT(11), -- 单位毫秒
min_duration INT(11), -- 单位毫秒
avg_duration INT(11), -- 单位毫秒
total_cnt VARCHAR(255), -- 请求次数
failure_cnt VARCHAR(32), -- 请求失败次数
success_cnt INT(11), -- 请求成功次数
interval INT(11), -- 间隔单位数
time_unit VARCHAR(16) -- 间隔时间单位,默认为second(秒)
);
2.规则场景指标(按小时聚合)
表名: sence_metrics_hour
字段名 | 别名 | 数据类型 | 长度 | 是否必填 | 备注 |
---|---|---|---|---|---|
统计记录ID | id | BIGINT | 20 | 是 | 采集原始记录ID |
接口路径 | uri | BIGINT | 20 | 是 | 接口路径 |
业务身份-流程编码 | process_code | VARCHAR | 255 | 是 | 流程编码 |
业务身份-任务编码 | task_code | VARCHAR | 32 | 是 | 任务编码 |
请求处理最大时长 | max_duration | INT | 11 | 是 | 单位毫秒 |
请求处理最小时长 | min_duration | INT | 11 | 是 | 单位毫秒 |
请求处理平均时长 | avg_duration | INT | 11 | 是 | 单位毫秒 |
请求次数 | total_cnt | VARCHAR | 255 | 是 | 请求次数 |
请求失败次数 | failure_cnt | VARCHAR | 32 | 是 | 请求失败次数 |
请求成功次数 | success_cnt | INT | 11 | 是 | 请求成功次数 |
时间坐标 | yyyyMMddHH | DATETIME | 16 | 是 | yyyyMMddHH |
建表语句:
sql
CREATE TABLE sence_metrics_hour (
id BIGINT(20) PRIMARY KEY, -- 采集原始记录ID
uri BIGINT(20), -- 接口路径
process_code VARCHAR(255), -- 流程编码
task_code VARCHAR(32), -- 任务编码
max_duration INT(11), -- 单位毫秒
min_duration INT(11), -- 单位毫秒
avg_duration INT(11), -- 单位毫秒
total_cnt VARCHAR(255), -- 请求次数
failure_cnt VARCHAR(32), -- 请求失败次数
success_cnt INT(11), -- 请求成功次数
yyyyMMddHH DATETIME -- yyyyMMddHH
);
3.规则场景指标(按天聚合)
表名: sence_metrics_day
字段名 | 别名 | 数据类型 | 长度 | 说明 |
---|---|---|---|---|
统计记录ID | id | BIGINT | 20 | 采集原始记录ID |
接口路径 | uri | BIGINT | 20 | 接口路径 |
业务身份-流程编码 | process_code | VARCHAR | 255 | 流程编码 |
业务身份-任务编码 | task_code | VARCHAR | 32 | 任务编码 |
请求处理最大时长 | max_duration | INT | 11 | 单位毫秒 |
请求处理最小时长 | min_duration | INT | 11 | 单位毫秒 |
请求处理平均时长 | avg_duration | INT | 11 | 单位毫秒 |
请求次数 | total_cnt | VARCHAR | 255 | 请求次数 |
请求失败次数 | failure_cnt | VARCHAR | 32 | 请求失败次数 |
请求成功次数 | success_cnt | INT | 11 | 请求成功次数 |
时间坐标 | yyyyMMdd | DATETIME | 16 | yyyyMMdd |
建表语句:
sql
CREATE TABLE sence_metrics_day (
id BIGINT(20) PRIMARY KEY, -- 采集原始记录ID
uri BIGINT(20), -- 接口路径
process_code VARCHAR(255), -- 流程编码
task_code VARCHAR(32), -- 任务编码
max_duration INT(11), -- 单位毫秒
min_duration INT(11), -- 单位毫秒
avg_duration INT(11), -- 单位毫秒
total_cnt VARCHAR(255), -- 请求次数
failure_cnt VARCHAR(32), -- 请求失败次数
success_cnt INT(11), -- 请求成功次数
yyyyMMdd DATETIME -- yyyyMMdd
);
3.规则场景指标(按月聚合)
表名: sence_metrics_month
字段名 | 别名 | 数据类型 | 长度 | 是否必填 | 备注 |
---|---|---|---|---|---|
统计记录ID | id | BIGINT | 20 | 是 | 采集原始记录ID |
接口路径 | uri | BIGINT | 20 | 是 | 接口路径 |
业务身份-流程编码 | process_code | VARCHAR | 255 | 是 | 流程编码 |
业务身份-任务编码 | task_code | VARCHAR | 32 | 是 | 任务编码 |
请求处理最大时长 | max_duration | INT | 11 | 是 | 单位毫秒 |
请求处理最小时长 | min_duration | INT | 11 | 是 | 单位毫秒 |
请求处理平均时长 | avg_duration | INT | 11 | 是 | 单位毫秒 |
请求次数 | total_cnt | VARCHAR | 255 | 是 | 请求次数 |
请求失败次数 | failure_cnt | VARCHAR | 32 | 是 | 请求失败次数 |
请求成功次数 | success_cnt | INT | 11 | 是 | 请求成功次数 |
时间坐标 | yyyyMM | DATETIME | 16 | 是 | yyyyMM |
建表语句:
sql
CREATE TABLE sence_metrics_month (
id BIGINT(20) PRIMARY KEY, -- 采集原始记录ID
uri BIGINT(20), -- 接口路径
process_code VARCHAR(255), -- 流程编码
task_code VARCHAR(32), -- 任务编码
max_duration INT(11), -- 单位毫秒
min_duration INT(11), -- 单位毫秒
avg_duration INT(11), -- 单位毫秒
total_cnt VARCHAR(255), -- 请求次数
failure_cnt VARCHAR(32), -- 请求失败次数
success_cnt INT(11), -- 请求成功次数
yyyyMM DATETIME -- yyyyMM
);
3.引擎组件心跳
表名: app_heartbeat
字段名 | 别名 | 数据类型 | 长度 | 是否必填 | 备注 |
---|---|---|---|---|---|
统计记录ID | id | BIGINT | 20 | 是 | 采集原始记录ID |
ip地址 | ip | VARCHAR | 128 | 是 | ip地址 |
端口 | port | VARCHAR | 16 | 是 | 端口 |
工程名称 | project_name | VARCHAR | 255 | 是 | 工程名称 |
第一次心跳/注册时间 | first_heartbeat | DATETIME | 是 | 第一次心跳/注册时间 | |
最后一次心跳 | last_heartbeat | DATETIME | 是 | 最后一次心跳 |
建表语句:
sql
CREATE TABLE app_heartbeat (
id BIGINT(20) PRIMARY KEY, -- 采集原始记录ID
ip VARCHAR(128), -- ip地址
port VARCHAR(16), -- 端口
project_name VARCHAR(255), -- 工程名称
first_heartbeat DATETIME, -- 第一次心跳/注册时间
last_heartbeat DATETIME -- 最后一次心跳
);
指标的接口设计
1. 指标内容
- 接口名称、业务身份(流程编码、任务编码)
- 请求总次数、请求失败次数、请求成功次数
- 请求平均处理时长、请求最小处理时长、请求最大处理时长
- 采集开始时间、采集结束时间
2. 指标格式
指标的采集格式:一种是用Prometheus格式,一种是用JSON格式,对比讨论一下。个人暂时倾向于JSON,可以减少指标上报的次数和上报的报文大小。
Prometheus格式
txt
# 总请求次数
req_total_cnt{uri="", process_code="", task_code="", begin="", end=""} 1000
# 成功请求次数
req_success_cnt{uri="", process_code="", task_code="",begin="", end=""} 950
# 失败请求次数
req_failure_cnt{uri="", process_code="", task_code="",begin="", end=""} 50
# 平均请求时长
req_avg_duration{uri="", process_code="", task_code="",begin="", end=""}0.25
# 最小请求时长
req_min_duration{uri="", process_code="", task_code="",begin="", end=""}0.1
# 最大请求时长
req_max_duration{uri="", process_code="", task_code="",begin="", end=""}2.5
JSON格式
json
{
"uri": "api_name",
"process_code": "xx",
"task_code": "yy",
"avg": 10,
"min": 5,
"max": 15,
"failure": 2,
"success": 1898,
"total": 1900,
"begin": "202404070830",
"end": "202404070839"
}
3. 上报协议
指标的上报协议:一种使用HTTP,一种是用MQ(暂定TongLINK/Q)。可对比讨论一下。个人暂时倾向于MQ,管理面和运行面解耦相对彻底。
- mq topic的路径:
persistent://${newland-urc}/metrics/api-metrics
, 其中newland-urc是租户名(暂定,根据实际情况定)、metrics是空间名称、api-metrics是主题 - http 接口的路径:
http://${context-base-path}/metrics/api-metrics
, 其中context-base-path是管理平台的接收模块的base-path, 剩下的是约定的接口路径。
4. 注意事项
- 因为现在一个接口上处理某个领域聚合根下的多种业务场景,接口实际上是一个模板,需要根据业务身份,才能确定实例化的场景(真正的用途)。
- 采集的指标统计,不要跨天,便于后续按自然单位时间(小时、天、周、月、年)等维度的聚合统计,也就是说
开始和结束两个时间必须在同一小时,若跨小时,拆两条统计数据
,运行面默认60秒生成统计数据1次。