实现服务看板(企业版)

This commit is contained in:
GoEdgeLab
2021-07-07 19:55:52 +08:00
parent 78b9afba98
commit d88bbdabb9
7 changed files with 2637 additions and 666 deletions

View File

@@ -25,6 +25,9 @@ type NodeStatus struct {
Load15m float64 `json:"load15m"` Load15m float64 `json:"load15m"`
ConnectionCount int `json:"connectionCount"` // 连接数 ConnectionCount int `json:"connectionCount"` // 连接数
TrafficInBytes uint64 `json:"trafficInBytes"`
TrafficOutBytes uint64 `json:"trafficOutBytes"`
CacheTotalDiskSize int64 `json:"cacheTotalDiskSize"` CacheTotalDiskSize int64 `json:"cacheTotalDiskSize"`
CacheTotalMemorySize int64 `json:"cacheTotalMemorySize"` CacheTotalMemorySize int64 `json:"cacheTotalMemorySize"`

View File

@@ -8,13 +8,15 @@ import "encoding/json"
type NodeValueItem = string type NodeValueItem = string
const ( const (
NodeValueItemCPU NodeValueItem = "cpu" // CPU NodeValueItemCPU NodeValueItem = "cpu" // CPU
NodeValueItemMemory NodeValueItem = "memory" // 内存 NodeValueItemMemory NodeValueItem = "memory" // 内存
NodeValueItemLoad NodeValueItem = "load" // 负载 NodeValueItemLoad NodeValueItem = "load" // 负载
NodeValueItemTrafficIn NodeValueItem = "trafficIn" // 上行流量 NodeValueItemTrafficIn NodeValueItem = "trafficIn" // 上行流量
NodeValueItemTrafficOut NodeValueItem = "trafficOut" // 下行流量 NodeValueItemTrafficOut NodeValueItem = "trafficOut" // 下行流量
NodeValueItemConnections NodeValueItem = "connections" // 连接数 NodeValueItemConnections NodeValueItem = "connections" // 连接数
NodeValueItemDisk NodeValueItem = "disk" // 磁盘 NodeValueItemRequests NodeValueItem = "requests" // 请求访问量
NodeValueItemAttackRequests NodeValueItem = "attackRequests" // 攻击请求访问量
NodeValueItemDisk NodeValueItem = "disk" // 磁盘
) )
type nodeValueItemDefinition struct { type nodeValueItemDefinition struct {
@@ -109,6 +111,28 @@ var nodeValueItemDefinitions = []*nodeValueItemDefinition{
}, },
}, },
}, },
{
Code: NodeValueItemRequests,
Name: "请求数",
Params: []*nodeValueItemParamDefinition{
{
Code: "total",
Name: "总数",
Description: "请求总数",
},
},
},
{
Code: NodeValueItemAttackRequests,
Name: "攻击请求数",
Params: []*nodeValueItemParamDefinition{
{
Code: "total",
Name: "总数",
Description: "攻击请求总数",
},
},
},
{ {
Code: NodeValueItemDisk, Code: NodeValueItemDisk,
Name: "硬盘空间", Name: "硬盘空间",

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -161,6 +161,15 @@ message ListEnabledNodesMatchRequest {
string keyword = 6; string keyword = 6;
int64 nodeGroupId = 7; int64 nodeGroupId = 7;
int64 nodeRegionId = 8; int64 nodeRegionId = 8;
bool cpuAsc = 20;
bool cpuDesc = 21;
bool memoryAsc = 22;
bool memoryDesc = 23;
bool trafficInAsc = 24;
bool trafficInDesc = 25;
bool trafficOutAsc = 26;
bool trafficOutDesc = 27;
} }
message ListEnabledNodesMatchResponse { message ListEnabledNodesMatchResponse {

View File

@@ -5,6 +5,8 @@ package pb;
import "models/model_server_stat_board.proto"; import "models/model_server_stat_board.proto";
import "models/model_message_node_value.proto"; import "models/model_message_node_value.proto";
import "models/model_metric_chart.proto";
import "models/model_metric_stat.proto";
// 统计看板 // 统计看板
service ServerStatBoardService { service ServerStatBoardService {
@@ -13,6 +15,12 @@ service ServerStatBoardService {
// 组合集群看板数据 // 组合集群看板数据
rpc composeServerStatNodeClusterBoard (ComposeServerStatNodeClusterBoardRequest) returns (ComposeServerStatNodeClusterBoardResponse); rpc composeServerStatNodeClusterBoard (ComposeServerStatNodeClusterBoardRequest) returns (ComposeServerStatNodeClusterBoardResponse);
// 组合节点看板数据
rpc composeServerStatNodeBoard (ComposeServerStatNodeBoardRequest) returns (ComposeServerStatNodeBoardResponse);
// 组合服务看板数据
rpc composeServerStatBoard (ComposeServerStatBoardRequest) returns (ComposeServerStatBoardResponse);
} }
// 读取所有看板 // 读取所有看板
@@ -44,6 +52,8 @@ message ComposeServerStatNodeClusterBoardResponse {
repeated NodeValue memoryNodeValues = 35; repeated NodeValue memoryNodeValues = 35;
repeated NodeValue loadNodeValues = 36; repeated NodeValue loadNodeValues = 36;
repeated MetricData metricCharts = 37;
message DailyTrafficStat { message DailyTrafficStat {
string day = 1; string day = 1;
int64 bytes = 2; int64 bytes = 2;
@@ -67,6 +77,72 @@ message ComposeServerStatNodeClusterBoardResponse {
int64 bytes = 4; int64 bytes = 4;
} }
message DomainStat {
int64 serverId = 1;
string domain = 2;
int64 countRequests = 3;
int64 bytes = 4;
}
message MetricData {
MetricChart metricChart = 1;
repeated MetricStat metricStats = 2;
}
}
// 组合节点看板数据
message ComposeServerStatNodeBoardRequest {
int64 nodeId = 1;
}
message ComposeServerStatNodeBoardResponse {
bool isActive = 1;
int64 trafficInBytes = 2;
int64 trafficOutBytes = 3;
int64 countRequests = 4;
int64 countAttackRequests = 5;
int64 countConnections = 6;
int64 cacheDiskSize = 7;
int64 cacheMemorySize = 8;
float cpuUsage = 9;
float memoryUsage = 10;
int64 memoryTotalSize = 11;
float load = 12;
repeated CacheDisk cacheDisks = 30;
repeated DailyTrafficStat dailyTrafficStats = 31;
repeated HourlyTrafficStat hourlyTrafficStats = 32;
repeated DomainStat topDomainStats = 33;
repeated NodeValue cpuNodeValues = 34;
repeated NodeValue memoryNodeValues = 35;
repeated NodeValue loadNodeValues = 36;
repeated MetricData metricCharts = 37;
message CacheDisk {
string path = 1;
string mount = 2;
int64 totalSize = 3;
int64 usedSize = 4;
float usage = 5;
}
message DailyTrafficStat {
string day = 1;
int64 bytes = 2;
int64 cachedBytes = 3;
int64 countRequests = 4;
int64 countCachedRequests = 5;
}
message HourlyTrafficStat {
string hour = 1;
int64 bytes = 2;
int64 cachedBytes = 3;
int64 countRequests = 4;
int64 countCachedRequests = 5;
}
message DomainStat { message DomainStat {
int64 serverId = 1; int64 serverId = 1;
@@ -74,4 +150,58 @@ message ComposeServerStatNodeClusterBoardResponse {
int64 countRequests = 3; int64 countRequests = 3;
int64 bytes = 4; int64 bytes = 4;
} }
message MetricData {
MetricChart metricChart = 1;
repeated MetricStat metricStats = 2;
}
}
// 组合服务看板数据
message ComposeServerStatBoardRequest {
int64 serverId = 1;
}
message ComposeServerStatBoardResponse {
repeated DailyTrafficStat dailyTrafficStats = 30;
repeated HourlyTrafficStat hourlyTrafficStats = 31;
repeated NodeStat topNodeStats = 32;
repeated DomainStat topDomainStats = 33;
repeated MetricData metricCharts = 34;
message DailyTrafficStat {
string day = 1;
int64 bytes = 2;
int64 cachedBytes = 3;
int64 countRequests = 4;
int64 countCachedRequests = 5;
}
message HourlyTrafficStat {
string hour = 1;
int64 bytes = 2;
int64 cachedBytes = 3;
int64 countRequests = 4;
int64 countCachedRequests = 5;
}
message NodeStat {
int64 nodeId = 1;
string nodeName = 2;
int64 countRequests = 3;
int64 bytes = 4;
}
message DomainStat {
int64 serverId = 1;
string domain = 2;
int64 countRequests = 3;
int64 bytes = 4;
}
message MetricData {
MetricChart metricChart = 1;
repeated MetricStat metricStats = 2;
}
} }

View File

@@ -24,6 +24,14 @@ const (
MetricItemPeriodUnitMonth MetricItemPeriodUnit = "month" MetricItemPeriodUnitMonth MetricItemPeriodUnit = "month"
) )
// MetricItemValueType 值类型
type MetricItemValueType = string
const (
MetricItemValueTypeCount MetricItemValueType = "count" // 数量
MetricItemValueTypeByte MetricItemValueType = "byte" // 字节
)
// FindAllMetricKeyDefinitions 指标对象定义 // FindAllMetricKeyDefinitions 指标对象定义
func FindAllMetricKeyDefinitions(category MetricItemCategory) []*shared.Definition { func FindAllMetricKeyDefinitions(category MetricItemCategory) []*shared.Definition {
switch category { switch category {
@@ -92,6 +100,10 @@ func FindAllMetricKeyDefinitions(category MetricItemCategory) []*shared.Definiti
}, },
// ========= 以下是响应 ========= // ========= 以下是响应 =========
{
Name: "状态码",
Code: "${status}",
},
{ {
Name: "响应的Content-Type值", Name: "响应的Content-Type值",
Code: "${response.contentType}", Code: "${response.contentType}",
@@ -107,60 +119,79 @@ func FindAllMetricKeyDefinitions(category MetricItemCategory) []*shared.Definiti
return []*shared.Definition{} return []*shared.Definition{}
} }
// MetricValueDefinition 指标数值定义
type MetricValueDefinition struct {
Name string `json:"name"`
Code string `json:"code"`
Description string `json:"description"`
Icon string `json:"icon"`
Type string `json:"type"`
}
// FindAllMetricValueDefinitions 指标数值定义 // FindAllMetricValueDefinitions 指标数值定义
func FindAllMetricValueDefinitions(category MetricItemCategory) []*shared.Definition { func FindAllMetricValueDefinitions(category MetricItemCategory) []*MetricValueDefinition {
switch category { switch category {
case MetricItemCategoryHTTP: case MetricItemCategoryHTTP:
return []*shared.Definition{ return []*MetricValueDefinition{
{ {
Name: "请求数", Name: "请求数",
Code: "${countRequest}", Code: "${countRequest}",
Type: MetricItemValueTypeCount,
}, },
{ {
Name: "连接数", Name: "连接数",
Code: "${countConnection}", Code: "${countConnection}",
Type: MetricItemValueTypeCount,
}, },
{ {
Name: "下行流量", Name: "下行流量",
Code: "${countTrafficOut}", Code: "${countTrafficOut}",
Type: MetricItemValueTypeByte,
}, },
{ {
Name: "上行流量", Name: "上行流量",
Code: "${countTrafficIn}", Code: "${countTrafficIn}",
Type: MetricItemValueTypeByte,
}, },
} }
case MetricItemCategoryTCP: case MetricItemCategoryTCP:
return []*shared.Definition{ return []*MetricValueDefinition{
{ {
Name: "连接数", Name: "连接数",
Code: "${countConnection}", Code: "${countConnection}",
Type: MetricItemValueTypeCount,
}, },
{ {
Name: "下行流量", Name: "下行流量",
Code: "${countTrafficOut}", Code: "${countTrafficOut}",
Type: MetricItemValueTypeByte,
}, },
{ {
Name: "上行流量", Name: "上行流量",
Code: "${countTrafficIn}", Code: "${countTrafficIn}",
Type: MetricItemValueTypeByte,
}, },
} }
case MetricItemCategoryUDP: case MetricItemCategoryUDP:
return []*shared.Definition{ return []*MetricValueDefinition{
{ {
Name: "连接数", Name: "连接数",
Code: "${countConnection}", Code: "${countConnection}",
Type: MetricItemValueTypeCount,
}, },
{ {
Name: "下行流量", Name: "下行流量",
Code: "${countTrafficOut}", Code: "${countTrafficOut}",
Type: MetricItemValueTypeByte,
}, },
{ {
Name: "上行流量", Name: "上行流量",
Code: "${countTrafficIn}", Code: "${countTrafficIn}",
Type: MetricItemValueTypeByte,
}, },
} }
} }
return []*shared.Definition{} return []*MetricValueDefinition{}
} }
func FindMetricValueName(category MetricItemCategory, code string) string { func FindMetricValueName(category MetricItemCategory, code string) string {
@@ -172,6 +203,15 @@ func FindMetricValueName(category MetricItemCategory, code string) string {
return code return code
} }
func FindMetricValueType(category MetricItemCategory, code string) string {
for _, def := range FindAllMetricValueDefinitions(category) {
if def.Code == code {
return def.Type
}
}
return MetricItemValueTypeCount
}
// HumanMetricTime 格式化时间,让时间更易读 // HumanMetricTime 格式化时间,让时间更易读
func HumanMetricTime(periodUnit MetricItemPeriodUnit, time string) string { func HumanMetricTime(periodUnit MetricItemPeriodUnit, time string) string {
switch periodUnit { switch periodUnit {