Providing metrics information to Prometheus
Former-commit-id: fcca6c8438877872d6c6e65bde522039f1a8668d
This commit is contained in:
parent
918d95ad72
commit
021092b6b4
|
@ -24,9 +24,9 @@ type (
|
||||||
}
|
}
|
||||||
CenterIndex {
|
CenterIndex {
|
||||||
name string `json:"name"`
|
name string `json:"name"`
|
||||||
cpu float32 `json:"cpu"`
|
cpu string `json:"cpu"`
|
||||||
memory float32 `json:"memory"`
|
memory string `json:"memory"`
|
||||||
storage float32 `json:"storage"`
|
storage string `json:"storage"`
|
||||||
centerType string `json:"centerType"`
|
centerType string `json:"centerType"`
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@ -35,9 +35,16 @@ type (
|
||||||
clusterLoadRecords []ClusterLoadRecord `json:"clusterLoadRecords"`
|
clusterLoadRecords []ClusterLoadRecord `json:"clusterLoadRecords"`
|
||||||
}
|
}
|
||||||
ClusterLoadRecord {
|
ClusterLoadRecord {
|
||||||
|
AdapterId int64 `json:"adapterId"`
|
||||||
ClusterName string `json:"clusterName"`
|
ClusterName string `json:"clusterName"`
|
||||||
|
CpuAvail float64 `json:"cpuAvail"`
|
||||||
|
CpuTotal float64 `json:"cpuTotal"`
|
||||||
CpuUsage float64 `json:"cpuUsage"`
|
CpuUsage float64 `json:"cpuUsage"`
|
||||||
|
MemoryAvail float64 `json:"memoryAvail"`
|
||||||
MemoryUsage float64 `json:"memoryUsage"`
|
MemoryUsage float64 `json:"memoryUsage"`
|
||||||
|
MemoryTotal float64 `json:"memoryTotal"`
|
||||||
|
DiskAvail float64 `json:"diskAvail"`
|
||||||
|
DiskTotal float64 `json:"diskTotal"`
|
||||||
DiskUsage float64 `json:"diskUsage"`
|
DiskUsage float64 `json:"diskUsage"`
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@ -79,7 +86,6 @@ type commitTaskReq {
|
||||||
MatchLabels map[string]string `json:"matchLabels,optional"`
|
MatchLabels map[string]string `json:"matchLabels,optional"`
|
||||||
YamlList []string `json:"yamlList"`
|
YamlList []string `json:"yamlList"`
|
||||||
ClusterName string `json:"clusterName"`
|
ClusterName string `json:"clusterName"`
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type (
|
type (
|
||||||
|
@ -536,7 +542,7 @@ type (
|
||||||
|
|
||||||
type (
|
type (
|
||||||
AdapterQueryReq {
|
AdapterQueryReq {
|
||||||
Id string `form:"id,optional" db:"id"`
|
Id string `form:"id,optional" db:"id"`
|
||||||
Name string `form:"name,optional"`
|
Name string `form:"name,optional"`
|
||||||
Type string `form:"type,optional"`
|
Type string `form:"type,optional"`
|
||||||
Nickname string `form:"nickname,optional"`
|
Nickname string `form:"nickname,optional"`
|
||||||
|
@ -545,7 +551,7 @@ type (
|
||||||
PageInfo
|
PageInfo
|
||||||
}
|
}
|
||||||
AdapterReq {
|
AdapterReq {
|
||||||
Id string `json:"id,optional" db:"id"`
|
Id string `json:"id,optional" db:"id"`
|
||||||
Name string `json:"name,optional"`
|
Name string `json:"name,optional"`
|
||||||
Type string `json:"type,optional"`
|
Type string `json:"type,optional"`
|
||||||
Nickname string `json:"nickname,optional"`
|
Nickname string `json:"nickname,optional"`
|
||||||
|
@ -553,7 +559,7 @@ type (
|
||||||
Server string `json:"server,optional"`
|
Server string `json:"server,optional"`
|
||||||
}
|
}
|
||||||
AdapterCreateReq {
|
AdapterCreateReq {
|
||||||
Id string `json:"id,optional" db:"id"`
|
Id string `json:"id,optional" db:"id"`
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
Nickname string `json:"nickname"`
|
Nickname string `json:"nickname"`
|
||||||
|
@ -561,7 +567,7 @@ type (
|
||||||
Server string `json:"server"`
|
Server string `json:"server"`
|
||||||
}
|
}
|
||||||
AdapterDelReq {
|
AdapterDelReq {
|
||||||
Id string `form:"id,optional" db:"id"`
|
Id string `form:"id,optional" db:"id"`
|
||||||
}
|
}
|
||||||
AdapterInfo {
|
AdapterInfo {
|
||||||
Id string `json:"id,omitempty" db:"id"`
|
Id string `json:"id,omitempty" db:"id"`
|
||||||
|
@ -595,79 +601,79 @@ type (
|
||||||
|
|
||||||
type (
|
type (
|
||||||
ClusterReq {
|
ClusterReq {
|
||||||
Id string `form:"id,optional"`
|
Id string `form:"id,optional"`
|
||||||
AdapterId string `form:"adapterId,optional"`
|
AdapterId string `form:"adapterId,optional"`
|
||||||
Name string `form:"name,optional"`
|
Name string `form:"name,optional"`
|
||||||
Nickname string `form:"nickname,optional"`
|
Nickname string `form:"nickname,optional"`
|
||||||
Description string `form:"description,optional"`
|
Description string `form:"description,optional"`
|
||||||
Server string `form:"server,optional"`
|
Server string `form:"server,optional"`
|
||||||
MonitorServer string `form:"monitorServer,optional"`
|
MonitorServer string `form:"monitorServer,optional"`
|
||||||
Username string `form:"username,optional"`
|
Username string `form:"username,optional"`
|
||||||
Password string `form:"password,optional"`
|
Password string `form:"password,optional"`
|
||||||
Token string `form:"token,optional"`
|
Token string `form:"token,optional"`
|
||||||
Ak string `form:"ak,optional"`
|
Ak string `form:"ak,optional"`
|
||||||
Sk string `form:"sk,optional"`
|
Sk string `form:"sk,optional"`
|
||||||
Region string `form:"region,optional"`
|
Region string `form:"region,optional"`
|
||||||
ProjectId string `form:"projectId,optional"`
|
ProjectId string `form:"projectId,optional"`
|
||||||
Version string `form:"version,optional"`
|
Version string `form:"version,optional"`
|
||||||
Label string `form:"label,optional"`
|
Label string `form:"label,optional"`
|
||||||
OwnerId string `form:"ownerId,omitempty,optional"`
|
OwnerId string `form:"ownerId,omitempty,optional"`
|
||||||
AuthType string `form:"authType,optional"`
|
AuthType string `form:"authType,optional"`
|
||||||
Type string `form:"type,optional"`
|
Type string `form:"type,optional"`
|
||||||
producerDict string `form:"producerDict,optional"`
|
producerDict string `form:"producerDict,optional"`
|
||||||
regionDict string `form:"regionDict,optional"`
|
regionDict string `form:"regionDict,optional"`
|
||||||
PageInfo
|
PageInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
ClusterCreateReq {
|
ClusterCreateReq {
|
||||||
Id string `json:"id,optional"`
|
Id string `json:"id,optional"`
|
||||||
AdapterId string `json:"adapterId,optional"`
|
AdapterId string `json:"adapterId,optional"`
|
||||||
Name string `json:"name,optional"`
|
Name string `json:"name,optional"`
|
||||||
Nickname string `json:"nickname,optional"`
|
Nickname string `json:"nickname,optional"`
|
||||||
Description string `json:"description,optional"`
|
Description string `json:"description,optional"`
|
||||||
Server string `json:"server,optional"`
|
Server string `json:"server,optional"`
|
||||||
MonitorServer string `json:"monitorServer,optional"`
|
MonitorServer string `json:"monitorServer,optional"`
|
||||||
Username string `json:"username,optional"`
|
Username string `json:"username,optional"`
|
||||||
Password string `json:"password,optional"`
|
Password string `json:"password,optional"`
|
||||||
Token string `json:"token,optional"`
|
Token string `json:"token,optional"`
|
||||||
Ak string `json:"ak,optional"`
|
Ak string `json:"ak,optional"`
|
||||||
Sk string `json:"sk,optional"`
|
Sk string `json:"sk,optional"`
|
||||||
Region string `json:"region,optional"`
|
Region string `json:"region,optional"`
|
||||||
ProjectId string `json:"projectId,optional"`
|
ProjectId string `json:"projectId,optional"`
|
||||||
Version string `json:"version,optional"`
|
Version string `json:"version,optional"`
|
||||||
Label string `json:"label,optional"`
|
Label string `json:"label,optional"`
|
||||||
OwnerId string `json:"ownerId,omitempty,optional"`
|
OwnerId string `json:"ownerId,omitempty,optional"`
|
||||||
AuthType string `json:"authType,optional"`
|
AuthType string `json:"authType,optional"`
|
||||||
producerDict string `json:"producerDict,optional"`
|
producerDict string `json:"producerDict,optional"`
|
||||||
regionDict string `json:"regionDict,optional"`
|
regionDict string `json:"regionDict,optional"`
|
||||||
}
|
}
|
||||||
ClusterInfo {
|
ClusterInfo {
|
||||||
Id string `json:"id,omitempty" db:"id"`
|
Id string `json:"id,omitempty" db:"id"`
|
||||||
AdapterId string `json:"adapterId,omitempty" db:"adapter_id"`
|
AdapterId string `json:"adapterId,omitempty" db:"adapter_id"`
|
||||||
Name string `json:"name,omitempty" db:"name"`
|
Name string `json:"name,omitempty" db:"name"`
|
||||||
Nickname string `json:"nickname,omitempty" db:"nickname"`
|
Nickname string `json:"nickname,omitempty" db:"nickname"`
|
||||||
Description string `json:"description,omitempty" db:"description"`
|
Description string `json:"description,omitempty" db:"description"`
|
||||||
Server string `json:"server,omitempty" db:"server"`
|
Server string `json:"server,omitempty" db:"server"`
|
||||||
MonitorServer string `json:"monitorServer,omitempty" db:"monitor_server"`
|
MonitorServer string `json:"monitorServer,omitempty" db:"monitor_server"`
|
||||||
Username string `json:"username,omitempty" db:"username"`
|
Username string `json:"username,omitempty" db:"username"`
|
||||||
Password string `json:"password,omitempty" db:"password"`
|
Password string `json:"password,omitempty" db:"password"`
|
||||||
Token string `json:"token,omitempty" db:"token"`
|
Token string `json:"token,omitempty" db:"token"`
|
||||||
Ak string `json:"ak,omitempty" db:"ak"`
|
Ak string `json:"ak,omitempty" db:"ak"`
|
||||||
Sk string `json:"sk,omitempty" db:"sk"`
|
Sk string `json:"sk,omitempty" db:"sk"`
|
||||||
Region string `json:"region,omitempty" db:"region"`
|
Region string `json:"region,omitempty" db:"region"`
|
||||||
ProjectId string `json:"projectId,omitempty" db:"project_id"`
|
ProjectId string `json:"projectId,omitempty" db:"project_id"`
|
||||||
Version string `json:"version,omitempty" db:"version"`
|
Version string `json:"version,omitempty" db:"version"`
|
||||||
Label string `json:"label,omitempty" db:"label"`
|
Label string `json:"label,omitempty" db:"label"`
|
||||||
OwnerId string `json:"ownerId,omitempty" db:"owner_id"`
|
OwnerId string `json:"ownerId,omitempty" db:"owner_id"`
|
||||||
AuthType string `json:"authType,omitempty" db:"auth_type"`
|
AuthType string `json:"authType,omitempty" db:"auth_type"`
|
||||||
producerDict string `json:"producerDict,omitempty" db:"producer_dict"`
|
producerDict string `json:"producerDict,omitempty" db:"producer_dict"`
|
||||||
regionDict string `json:"regionDict,omitempty" db:"region_dict"`
|
regionDict string `json:"regionDict,omitempty" db:"region_dict"`
|
||||||
CreateTime string `json:"createTime,omitempty" db:"created_time" gorm:"autoCreateTime"`
|
CreateTime string `json:"createTime,omitempty" db:"created_time" gorm:"autoCreateTime"`
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
type ClusterDelReq {
|
type ClusterDelReq {
|
||||||
Id string `form:"id,optional"`
|
Id string `form:"id,optional"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type ClusterResp {
|
type ClusterResp {
|
||||||
|
@ -696,66 +702,66 @@ type ClusterRelationInfo {
|
||||||
Version string `json:"version,omitempty" db:"version"`
|
Version string `json:"version,omitempty" db:"version"`
|
||||||
Server string `json:"server,omitempty" db:"server"`
|
Server string `json:"server,omitempty" db:"server"`
|
||||||
CreateTime string `json:"createTime,omitempty" db:"create_time" gorm:"autoCreateTime"`
|
CreateTime string `json:"createTime,omitempty" db:"create_time" gorm:"autoCreateTime"`
|
||||||
CId string `json:"cId,omitempty" db:"id"`
|
CId string `json:"cId,omitempty" db:"id"`
|
||||||
CAdapterId string `json:"cAdapterId,omitempty" db:"adapter_id"`
|
CAdapterId string `json:"cAdapterId,omitempty" db:"adapter_id"`
|
||||||
CName string `json:"cName,omitempty" db:"name"`
|
CName string `json:"cName,omitempty" db:"name"`
|
||||||
CNickname string `json:"cNickname,omitempty" db:"nickname"`
|
CNickname string `json:"cNickname,omitempty" db:"nickname"`
|
||||||
CDescription string `json:"cDescription,omitempty" db:"description"`
|
CDescription string `json:"cDescription,omitempty" db:"description"`
|
||||||
CServer string `json:"cServer,omitempty" db:"server"`
|
CServer string `json:"cServer,omitempty" db:"server"`
|
||||||
CMonitorServer string `json:"cMonitorServer,omitempty" db:"monitor_server"`
|
CMonitorServer string `json:"cMonitorServer,omitempty" db:"monitor_server"`
|
||||||
CUsername string `json:"cUsername,omitempty" db:"username"`
|
CUsername string `json:"cUsername,omitempty" db:"username"`
|
||||||
CPassword string `json:"cPassword,omitempty" db:"password"`
|
CPassword string `json:"cPassword,omitempty" db:"password"`
|
||||||
CToken string `json:"cToken,omitempty" db:"token"`
|
CToken string `json:"cToken,omitempty" db:"token"`
|
||||||
CAk string `json:"cAk,omitempty" db:"ak"`
|
CAk string `json:"cAk,omitempty" db:"ak"`
|
||||||
CSk string `json:"cSk,omitempty" db:"sk"`
|
CSk string `json:"cSk,omitempty" db:"sk"`
|
||||||
CRegion string `json:"cRegion,omitempty" db:"region"`
|
CRegion string `json:"cRegion,omitempty" db:"region"`
|
||||||
CProjectId string `json:"cProjectId,omitempty" db:"project_id"`
|
CProjectId string `json:"cProjectId,omitempty" db:"project_id"`
|
||||||
CVersion string `json:"cVersion,omitempty" db:"version"`
|
CVersion string `json:"cVersion,omitempty" db:"version"`
|
||||||
CLabel string `json:"cLabel,omitempty" db:"label"`
|
CLabel string `json:"cLabel,omitempty" db:"label"`
|
||||||
COwnerId string `json:"cOwnerId,omitempty" db:"owner_id"`
|
COwnerId string `json:"cOwnerId,omitempty" db:"owner_id"`
|
||||||
CAuthType string `json:"cAuthType,omitempty" db:"auth_type"`
|
CAuthType string `json:"cAuthType,omitempty" db:"auth_type"`
|
||||||
CCreateTime string `json:"cCreateTime,omitempty" db:"created_time" gorm:"autoCreateTime"`
|
CCreateTime string `json:"cCreateTime,omitempty" db:"created_time" gorm:"autoCreateTime"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type (
|
type (
|
||||||
DictInfo {
|
DictInfo {
|
||||||
Id string `json:"id,omitempty"`
|
Id string `json:"id,omitempty"`
|
||||||
DictName string `json:"dictName,omitempty"`
|
DictName string `json:"dictName,omitempty"`
|
||||||
DictCode string `json:"dictCode,omitempty"`
|
DictCode string `json:"dictCode,omitempty"`
|
||||||
Description string `json:"description,omitempty"`
|
Description string `json:"description,omitempty"`
|
||||||
Type string `json:"type,omitempty" db:"type"`
|
Type string `json:"type,omitempty" db:"type"`
|
||||||
Status string `json:"status,omitempty" db:"status"`
|
Status string `json:"status,omitempty" db:"status"`
|
||||||
CreateTime string `json:"createTime,omitempty" db:"created_time" gorm:"autoCreateTime"`
|
CreateTime string `json:"createTime,omitempty" db:"created_time" gorm:"autoCreateTime"`
|
||||||
}
|
}
|
||||||
|
|
||||||
DictReq {
|
DictReq {
|
||||||
Id string `form:"id,optional"`
|
Id string `form:"id,optional"`
|
||||||
DictName string `form:"dictName,optional"`
|
DictName string `form:"dictName,optional"`
|
||||||
DictCode string `form:"dictCode,optional"`
|
DictCode string `form:"dictCode,optional"`
|
||||||
Description string `form:"description,optional"`
|
Description string `form:"description,optional"`
|
||||||
Type string `form:"type,optional"`
|
Type string `form:"type,optional"`
|
||||||
Status string `form:"status,optional"`
|
Status string `form:"status,optional"`
|
||||||
PageInfo
|
PageInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
DictEditReq {
|
DictEditReq {
|
||||||
Id string `json:"id,optional"`
|
Id string `json:"id,optional"`
|
||||||
DictName string `json:"dictName,optional"`
|
DictName string `json:"dictName,optional"`
|
||||||
DictCode string `json:"dictCode,optional"`
|
DictCode string `json:"dictCode,optional"`
|
||||||
Description string `json:"description,optional"`
|
Description string `json:"description,optional"`
|
||||||
Type string `json:"type,optional"`
|
Type string `json:"type,optional"`
|
||||||
Status string `json:"status,optional"`
|
Status string `json:"status,optional"`
|
||||||
}
|
}
|
||||||
|
|
||||||
DictResp {
|
DictResp {
|
||||||
Id string `json:"id,omitempty"`
|
Id string `json:"id,omitempty"`
|
||||||
DictName string `json:"dictName,omitempty"`
|
DictName string `json:"dictName,omitempty"`
|
||||||
DictCode string `json:"dictCode,omitempty"`
|
DictCode string `json:"dictCode,omitempty"`
|
||||||
Description string `json:"description,omitempty"`
|
Description string `json:"description,omitempty"`
|
||||||
Type string `json:"type,omitempty"`
|
Type string `json:"type,omitempty"`
|
||||||
Status string `json:"status,omitempty"`
|
Status string `json:"status,omitempty"`
|
||||||
CreateTime string `json:"createTime,omitempty" db:"created_time" gorm:"autoCreateTime"`
|
CreateTime string `json:"createTime,omitempty" db:"created_time" gorm:"autoCreateTime"`
|
||||||
DictItemInfo []*DictItemInfo `json:"dictItemInfo,omitempty"`
|
DictItemInfo []*DictItemInfo `json:"dictItemInfo,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
Dicts {
|
Dicts {
|
||||||
|
@ -764,55 +770,55 @@ type (
|
||||||
|
|
||||||
|
|
||||||
DictItemInfo {
|
DictItemInfo {
|
||||||
Id string `json:"id,omitempty"`
|
Id string `json:"id,omitempty"`
|
||||||
DictId string `json:"dictId,omitempty"`
|
DictId string `json:"dictId,omitempty"`
|
||||||
ItemText string `json:"itemText,omitempty"`
|
ItemText string `json:"itemText,omitempty"`
|
||||||
ItemValue string `json:"itemValue,omitempty"`
|
ItemValue string `json:"itemValue,omitempty"`
|
||||||
Description string `json:"description,omitempty"`
|
Description string `json:"description,omitempty"`
|
||||||
SortOrder string `json:"sortOrder,omitempty"`
|
SortOrder string `json:"sortOrder,omitempty"`
|
||||||
Type string `json:"type,omitempty" db:"type"`
|
Type string `json:"type,omitempty" db:"type"`
|
||||||
ParentId string `json:"parentId,omitempty"`
|
ParentId string `json:"parentId,omitempty"`
|
||||||
Status string `json:"status,omitempty" db:"status"`
|
Status string `json:"status,omitempty" db:"status"`
|
||||||
CreateTime string `json:"createTime,omitempty" db:"created_time" gorm:"autoCreateTime"`
|
CreateTime string `json:"createTime,omitempty" db:"created_time" gorm:"autoCreateTime"`
|
||||||
}
|
}
|
||||||
|
|
||||||
DictItemReq {
|
DictItemReq {
|
||||||
Id string `form:"id,optional"`
|
Id string `form:"id,optional"`
|
||||||
DictId string `form:"dictId,optional"`
|
DictId string `form:"dictId,optional"`
|
||||||
ItemText string `form:"itemText,optional"`
|
ItemText string `form:"itemText,optional"`
|
||||||
ItemValue string `form:"itemValue,optional"`
|
ItemValue string `form:"itemValue,optional"`
|
||||||
Description string `form:"description,optional"`
|
Description string `form:"description,optional"`
|
||||||
SortOrder string `form:"sortOrder,optional"`
|
SortOrder string `form:"sortOrder,optional"`
|
||||||
Type string `form:"type,optional"`
|
Type string `form:"type,optional"`
|
||||||
ParentId string `form:"parentId,optional"`
|
ParentId string `form:"parentId,optional"`
|
||||||
Status string `form:"status,optional"`
|
Status string `form:"status,optional"`
|
||||||
PageInfo
|
PageInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
DictItemEditReq {
|
DictItemEditReq {
|
||||||
Id string `json:"id,optional"`
|
Id string `json:"id,optional"`
|
||||||
DictId string `json:"dictId,optional"`
|
DictId string `json:"dictId,optional"`
|
||||||
ItemText string `json:"itemText,optional"`
|
ItemText string `json:"itemText,optional"`
|
||||||
ItemValue string `json:"itemValue,optional"`
|
ItemValue string `json:"itemValue,optional"`
|
||||||
Description string `json:"description,optional"`
|
Description string `json:"description,optional"`
|
||||||
SortOrder string `json:"sortOrder,optional"`
|
SortOrder string `json:"sortOrder,optional"`
|
||||||
Type string `json:"type,optional"`
|
Type string `json:"type,optional"`
|
||||||
ParentId string `json:"parentId,optional"`
|
ParentId string `json:"parentId,optional"`
|
||||||
Status string `json:"status,optional"`
|
Status string `json:"status,optional"`
|
||||||
}
|
}
|
||||||
|
|
||||||
DictItemResp {
|
DictItemResp {
|
||||||
Id string `json:"id,omitempty"`
|
Id string `json:"id,omitempty"`
|
||||||
DictId string `json:"dictId,omitempty"`
|
DictId string `json:"dictId,omitempty"`
|
||||||
ItemText string `json:"itemText,omitempty"`
|
ItemText string `json:"itemText,omitempty"`
|
||||||
ItemValue string `json:"itemValue,omitempty"`
|
ItemValue string `json:"itemValue,omitempty"`
|
||||||
Description string `json:"description,omitempty"`
|
Description string `json:"description,omitempty"`
|
||||||
SortOrder string `json:"sortOrder,omitempty"`
|
SortOrder string `json:"sortOrder,omitempty"`
|
||||||
Type string `json:"type,omitempty"`
|
Type string `json:"type,omitempty"`
|
||||||
ParentId string `json:"parentId,omitempty"`
|
ParentId string `json:"parentId,omitempty"`
|
||||||
Status string `json:"status,omitempty"`
|
Status string `json:"status,omitempty"`
|
||||||
CreateTime string `json:"createTime,omitempty" db:"created_time" gorm:"autoCreateTime"`
|
CreateTime string `json:"createTime,omitempty" db:"created_time" gorm:"autoCreateTime"`
|
||||||
DictInfo *DictInfo `json:"dictInfo,omitempty"`
|
DictInfo *DictInfo `json:"dictInfo,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
DictItems {
|
DictItems {
|
||||||
|
@ -840,14 +846,14 @@ type (
|
||||||
|
|
||||||
type (
|
type (
|
||||||
PageInfo {
|
PageInfo {
|
||||||
PageNum int `form:"pageNum"`
|
PageNum int `form:"pageNum"`
|
||||||
PageSize int `form:"pageSize"`
|
PageSize int `form:"pageSize"`
|
||||||
}
|
}
|
||||||
|
|
||||||
PageResult {
|
PageResult {
|
||||||
List interface{} `json:"list,omitempty"`
|
List interface{} `json:"list,omitempty"`
|
||||||
Total int64 `json:"total,omitempty"`
|
Total int64 `json:"total,omitempty"`
|
||||||
PageNum int `json:"pageNum,omitempty"`
|
PageNum int `json:"pageNum,omitempty"`
|
||||||
PageSize int `json:"pageSize,omitempty"`
|
PageSize int `json:"pageSize,omitempty"`
|
||||||
}
|
}
|
||||||
)
|
)
|
|
@ -49,6 +49,7 @@ type Config struct {
|
||||||
Password string
|
Password string
|
||||||
}
|
}
|
||||||
SnowflakeConf SnowflakeConf
|
SnowflakeConf SnowflakeConf
|
||||||
|
PromUrl string
|
||||||
}
|
}
|
||||||
|
|
||||||
// SnowflakeConf 雪花算法机器id配置
|
// SnowflakeConf 雪花算法机器id配置
|
||||||
|
|
|
@ -33,7 +33,7 @@ func SyncParticipantRpc(svc *svc.ServiceContext) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
svc.PromClient[participant.Id] = promClient
|
svc.MonitorClient[participant.Id] = promClient
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -134,16 +134,6 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
|
||||||
Path: "/core/metrics",
|
Path: "/core/metrics",
|
||||||
Handler: core.MetricsHandler(serverCtx),
|
Handler: core.MetricsHandler(serverCtx),
|
||||||
},
|
},
|
||||||
{
|
|
||||||
Method: http.MethodGet,
|
|
||||||
Path: "/core/pullTaskInfo",
|
|
||||||
Handler: core.PullTaskInfoHandler(serverCtx),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Method: http.MethodGet,
|
|
||||||
Path: "/core/pushTaskInfo",
|
|
||||||
Handler: core.PushTaskInfoHandler(serverCtx),
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
rest.WithPrefix("/pcm/v1"),
|
rest.WithPrefix("/pcm/v1"),
|
||||||
)
|
)
|
||||||
|
|
|
@ -27,14 +27,14 @@ func NewControllerMetricsLogic(ctx context.Context, svcCtx *svc.ServiceContext)
|
||||||
|
|
||||||
func (l *ControllerMetricsLogic) ControllerMetrics(req *types.ControllerMetricsReq) (resp *types.ControllerMetricsResp, err error) {
|
func (l *ControllerMetricsLogic) ControllerMetrics(req *types.ControllerMetricsReq) (resp *types.ControllerMetricsResp, err error) {
|
||||||
resp = &types.ControllerMetricsResp{}
|
resp = &types.ControllerMetricsResp{}
|
||||||
if _, ok := l.svcCtx.PromClient[req.ParticipantId]; ok {
|
if _, ok := l.svcCtx.MonitorClient[req.ParticipantId]; ok {
|
||||||
if len(req.Pod) != 0 {
|
if len(req.Pod) != 0 {
|
||||||
resp.Data = l.svcCtx.PromClient[req.ParticipantId].GetNamedMetricsByTime(req.Metrics, req.Start, req.End, 60*time.Minute, tracker.PodOption{
|
resp.Data = l.svcCtx.MonitorClient[req.ParticipantId].GetNamedMetricsByTime(req.Metrics, req.Start, req.End, 60*time.Minute, tracker.PodOption{
|
||||||
PodName: req.Pod,
|
PodName: req.Pod,
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
resp.Data = l.svcCtx.PromClient[req.ParticipantId].GetNamedMetricsByTime(req.Metrics, req.Start, req.End, 60*time.Minute, tracker.ControllerOption{
|
resp.Data = l.svcCtx.MonitorClient[req.ParticipantId].GetNamedMetricsByTime(req.Metrics, req.Start, req.End, 60*time.Minute, tracker.ControllerOption{
|
||||||
WorkloadName: req.WorkloadName,
|
WorkloadName: req.WorkloadName,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,8 @@ package core
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"github.com/prometheus/common/model"
|
||||||
|
"gitlink.org.cn/JointCloud/pcm-coordinator/pkg/tracker"
|
||||||
|
|
||||||
"gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc"
|
"gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc"
|
||||||
"gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types"
|
"gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types"
|
||||||
|
@ -24,31 +26,41 @@ func NewCenterResourcesLogic(ctx context.Context, svcCtx *svc.ServiceContext) *C
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *CenterResourcesLogic) CenterResources() (resp *types.CenterResourcesResp, err error) {
|
func (l *CenterResourcesLogic) CenterResources() (resp *types.CenterResourcesResp, err error) {
|
||||||
// todo: add your logic here and delete this line
|
|
||||||
centerIndex1 := types.CenterIndex{
|
|
||||||
Name: "阿里云",
|
|
||||||
Cpu: float32(12.33),
|
|
||||||
Memory: float32(64.55),
|
|
||||||
Storage: float32(33.90),
|
|
||||||
CenterType: "cloud",
|
|
||||||
}
|
|
||||||
centerIndex2 := types.CenterIndex{
|
|
||||||
Name: "A超算中心",
|
|
||||||
Cpu: float32(42.36),
|
|
||||||
Memory: float32(66.55),
|
|
||||||
Storage: float32(23.231),
|
|
||||||
CenterType: "hpc",
|
|
||||||
}
|
|
||||||
centerIndex3 := types.CenterIndex{
|
|
||||||
Name: "智算中心",
|
|
||||||
Cpu: float32(78.33),
|
|
||||||
Memory: float32(36.55),
|
|
||||||
Storage: float32(88.93),
|
|
||||||
CenterType: "ai",
|
|
||||||
}
|
|
||||||
resp = &types.CenterResourcesResp{}
|
resp = &types.CenterResourcesResp{}
|
||||||
resp.CentersIndex = append(resp.CentersIndex, centerIndex1)
|
rawData, err := l.svcCtx.PromClient.GetRawData("resource_top3", tracker.ClusterOption{})
|
||||||
resp.CentersIndex = append(resp.CentersIndex, centerIndex2)
|
if err != nil {
|
||||||
resp.CentersIndex = append(resp.CentersIndex, centerIndex3)
|
return nil, err
|
||||||
|
}
|
||||||
|
var centersIndex []*types.CenterIndex
|
||||||
|
data := rawData.(model.Vector)
|
||||||
|
for _, d := range data {
|
||||||
|
for _, v := range d.Metric {
|
||||||
|
centersIndex = append(centersIndex, &types.CenterIndex{Name: string(v)})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for _, centerIndex := range centersIndex {
|
||||||
|
// Query the types of resource centers
|
||||||
|
//l.svcCtx.DbEngin.Raw().Scan(¢erIndex.CenterType)
|
||||||
|
cpuRawData, err := l.svcCtx.PromClient.GetRawData("cluster_cpu_usage", tracker.ClusterOption{ClusterName: centerIndex.Name})
|
||||||
|
cpuData := cpuRawData.(model.Vector)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
centerIndex.Cpu = cpuData[0].Value.String()
|
||||||
|
memoryRawData, err := l.svcCtx.PromClient.GetRawData("cluster_memory_usage", tracker.ClusterOption{ClusterName: centerIndex.Name})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
memoryData := memoryRawData.(model.Vector)
|
||||||
|
|
||||||
|
centerIndex.Memory = memoryData[0].Value.String()
|
||||||
|
diskRawData, err := l.svcCtx.PromClient.GetRawData("cluster_disk_usage", tracker.ClusterOption{ClusterName: centerIndex.Name})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
diskData := diskRawData.(model.Vector)
|
||||||
|
centerIndex.Storage = diskData[0].Value.String()
|
||||||
|
resp.CentersIndex = append(resp.CentersIndex, *centerIndex)
|
||||||
|
}
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc"
|
"gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc"
|
||||||
"gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types"
|
"gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types"
|
||||||
"gitlink.org.cn/JointCloud/pcm-coordinator/pkg/tracker"
|
"gitlink.org.cn/JointCloud/pcm-coordinator/pkg/tracker"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
"github.com/zeromicro/go-zero/core/logx"
|
"github.com/zeromicro/go-zero/core/logx"
|
||||||
)
|
)
|
||||||
|
@ -26,9 +27,17 @@ func NewSyncClusterLoadLogic(ctx context.Context, svcCtx *svc.ServiceContext) *S
|
||||||
func (l *SyncClusterLoadLogic) SyncClusterLoad(req *types.SyncClusterLoadReq) error {
|
func (l *SyncClusterLoadLogic) SyncClusterLoad(req *types.SyncClusterLoadReq) error {
|
||||||
if len(req.ClusterLoadRecords) != 0 {
|
if len(req.ClusterLoadRecords) != 0 {
|
||||||
for _, record := range req.ClusterLoadRecords {
|
for _, record := range req.ClusterLoadRecords {
|
||||||
tracker.ClusterCpuGauge.WithLabelValues(record.ClusterName).Set(record.CpuUsage)
|
tracker.ClusterCpuUsageGauge.WithLabelValues(record.ClusterName, strconv.FormatInt(record.AdapterId, 10)).Set(record.CpuUsage)
|
||||||
tracker.ClusterMemoryGauge.WithLabelValues(record.ClusterName).Set(record.MemoryUsage)
|
tracker.ClusterCpuAvailGauge.WithLabelValues(record.ClusterName, strconv.FormatInt(record.AdapterId, 10)).Set(record.CpuAvail)
|
||||||
tracker.ClusterDiskGauge.WithLabelValues(record.ClusterName).Set(record.DiskUsage)
|
tracker.ClusterCpuTotalGauge.WithLabelValues(record.ClusterName, strconv.FormatInt(record.AdapterId, 10)).Set(record.CpuTotal)
|
||||||
|
|
||||||
|
tracker.ClusterMemoryUsageGauge.WithLabelValues(record.ClusterName, strconv.FormatInt(record.AdapterId, 10)).Set(record.MemoryUsage)
|
||||||
|
tracker.ClusterMemoryAvailGauge.WithLabelValues(record.ClusterName, strconv.FormatInt(record.AdapterId, 10)).Set(record.MemoryAvail)
|
||||||
|
tracker.ClusterMemoryTotalGauge.WithLabelValues(record.ClusterName, strconv.FormatInt(record.AdapterId, 10)).Set(record.MemoryTotal)
|
||||||
|
|
||||||
|
tracker.ClusterDiskUsageGauge.WithLabelValues(record.ClusterName, strconv.FormatInt(record.AdapterId, 10)).Set(record.DiskUsage)
|
||||||
|
tracker.ClusterDiskAvailGauge.WithLabelValues(record.ClusterName, strconv.FormatInt(record.AdapterId, 10)).Set(record.DiskAvail)
|
||||||
|
tracker.ClusterDiskTotalGauge.WithLabelValues(record.ClusterName, strconv.FormatInt(record.AdapterId, 10)).Set(record.DiskTotal)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -59,8 +59,9 @@ type ServiceContext struct {
|
||||||
Downloader *s3manager.Downloader
|
Downloader *s3manager.Downloader
|
||||||
Uploader *s3manager.Uploader
|
Uploader *s3manager.Uploader
|
||||||
K8sRpc kubernetesclient.Kubernetes
|
K8sRpc kubernetesclient.Kubernetes
|
||||||
PromClient map[int64]tracker.Prometheus
|
MonitorClient map[int64]tracker.Prometheus
|
||||||
ParticipantRpc participantservice.ParticipantService
|
ParticipantRpc participantservice.ParticipantService
|
||||||
|
PromClient tracker.Prometheus
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewServiceContext(c config.Config) *ServiceContext {
|
func NewServiceContext(c config.Config) *ServiceContext {
|
||||||
|
@ -72,8 +73,14 @@ func NewServiceContext(c config.Config) *ServiceContext {
|
||||||
DisableSSL: aws.Bool(false), //是否禁用https,这里表示不禁用,即使用HTTPS
|
DisableSSL: aws.Bool(false), //是否禁用https,这里表示不禁用,即使用HTTPS
|
||||||
S3ForcePathStyle: aws.Bool(true), //使用路径样式而非虚拟主机样式,区别请参考:https://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html
|
S3ForcePathStyle: aws.Bool(true), //使用路径样式而非虚拟主机样式,区别请参考:https://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html
|
||||||
})
|
})
|
||||||
|
promClient, err := tracker.NewPrometheus(c.PromUrl)
|
||||||
|
if err != nil {
|
||||||
|
logx.Errorf("InitPrometheus err: %v", err)
|
||||||
|
panic("InitSnowflake err")
|
||||||
|
}
|
||||||
|
|
||||||
//添加snowflake支持
|
//添加snowflake支持
|
||||||
err := utils.InitSnowflake(c.SnowflakeConf.MachineId)
|
err = utils.InitSnowflake(c.SnowflakeConf.MachineId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logx.Errorf("InitSnowflake err: %v", err)
|
logx.Errorf("InitSnowflake err: %v", err)
|
||||||
panic("InitSnowflake err")
|
panic("InitSnowflake err")
|
||||||
|
@ -122,10 +129,11 @@ func NewServiceContext(c config.Config) *ServiceContext {
|
||||||
OctopusRpc: octopusclient.NewOctopus(zrpc.MustNewClient(c.OctopusRpcConf)),
|
OctopusRpc: octopusclient.NewOctopus(zrpc.MustNewClient(c.OctopusRpcConf)),
|
||||||
OpenstackRpc: openstackclient.NewOpenstack(zrpc.MustNewClient(c.OpenstackRpcConf)),
|
OpenstackRpc: openstackclient.NewOpenstack(zrpc.MustNewClient(c.OpenstackRpcConf)),
|
||||||
K8sRpc: kubernetesclient.NewKubernetes(zrpc.MustNewClient(c.K8sNativeConf)),
|
K8sRpc: kubernetesclient.NewKubernetes(zrpc.MustNewClient(c.K8sNativeConf)),
|
||||||
PromClient: make(map[int64]tracker.Prometheus),
|
MonitorClient: make(map[int64]tracker.Prometheus),
|
||||||
ParticipantRpc: participantservice.NewParticipantService(zrpc.MustNewClient(c.PcmCoreRpcConf)),
|
ParticipantRpc: participantservice.NewParticipantService(zrpc.MustNewClient(c.PcmCoreRpcConf)),
|
||||||
DockerClient: dockerClient,
|
DockerClient: dockerClient,
|
||||||
Downloader: downloader,
|
Downloader: downloader,
|
||||||
Uploader: uploader,
|
Uploader: uploader,
|
||||||
|
PromClient: promClient,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,11 +17,11 @@ type CenterResourcesResp struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type CenterIndex struct {
|
type CenterIndex struct {
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
Cpu float32 `json:"cpu"`
|
Cpu string `json:"cpu"`
|
||||||
Memory float32 `json:"memory"`
|
Memory string `json:"memory"`
|
||||||
Storage float32 `json:"storage"`
|
Storage string `json:"storage"`
|
||||||
CenterType string `json:"centerType"`
|
CenterType string `json:"centerType"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type SyncClusterLoadReq struct {
|
type SyncClusterLoadReq struct {
|
||||||
|
@ -29,9 +29,16 @@ type SyncClusterLoadReq struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type ClusterLoadRecord struct {
|
type ClusterLoadRecord struct {
|
||||||
|
AdapterId int64 `json:"adapterId"`
|
||||||
ClusterName string `json:"clusterName"`
|
ClusterName string `json:"clusterName"`
|
||||||
|
CpuAvail float64 `json:"cpuAvail"`
|
||||||
|
CpuTotal float64 `json:"cpuTotal"`
|
||||||
CpuUsage float64 `json:"cpuUsage"`
|
CpuUsage float64 `json:"cpuUsage"`
|
||||||
|
MemoryAvail float64 `json:"memoryAvail"`
|
||||||
MemoryUsage float64 `json:"memoryUsage"`
|
MemoryUsage float64 `json:"memoryUsage"`
|
||||||
|
MemoryTotal float64 `json:"memoryTotal"`
|
||||||
|
DiskAvail float64 `json:"diskAvail"`
|
||||||
|
DiskTotal float64 `json:"diskTotal"`
|
||||||
DiskUsage float64 `json:"diskUsage"`
|
DiskUsage float64 `json:"diskUsage"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,7 +100,7 @@ type CommitVmTaskReq struct {
|
||||||
NsID string `json:"nsID"`
|
NsID string `json:"nsID"`
|
||||||
Replicas int64 `json:"replicas,optional"`
|
Replicas int64 `json:"replicas,optional"`
|
||||||
MatchLabels map[string]string `json:"matchLabels,optional"`
|
MatchLabels map[string]string `json:"matchLabels,optional"`
|
||||||
Server ServerCommit `json:"server,optional"`
|
Server []ServerCommit `json:"server,optional"`
|
||||||
Platform string `json:"platform,optional"`
|
Platform string `json:"platform,optional"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,10 @@
|
||||||
|
|
||||||
package tracker
|
package tracker
|
||||||
|
|
||||||
import "time"
|
import (
|
||||||
|
"github.com/prometheus/common/model"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
type Interface interface {
|
type Interface interface {
|
||||||
//GetMetric(expr string, time time.Time) Metric
|
//GetMetric(expr string, time time.Time) Metric
|
||||||
|
@ -27,4 +30,5 @@ type Interface interface {
|
||||||
//// meter
|
//// meter
|
||||||
//GetNamedMeters(meters []string, time time.Time, opts []QueryOption) []Metric
|
//GetNamedMeters(meters []string, time time.Time, opts []QueryOption) []Metric
|
||||||
//GetNamedMetersOverTime(metrics []string, start, end time.Time, step time.Duration, opts []QueryOption) []Metric
|
//GetNamedMetersOverTime(metrics []string, start, end time.Time, step time.Duration, opts []QueryOption) []Metric
|
||||||
|
GetRawData(expr string, o QueryOption) (model.Value, error)
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,37 +27,15 @@ const (
|
||||||
|
|
||||||
var promQLTemplates = map[string]string{
|
var promQLTemplates = map[string]string{
|
||||||
|
|
||||||
//namespace
|
"cluster_cpu_usage": "sum by (cluster_name)(cluster_cpu_usage{$1})",
|
||||||
"namespace_cpu_usage": `round(namespace:container_cpu_usage_seconds_total:sum_rate{namespace!="", $1}, 0.001)`,
|
"cluster_memory_usage": "sum by (cluster_name)(cluster_memory_usage{$1})",
|
||||||
"namespace_memory_usage": `namespace:container_memory_usage_bytes:sum{namespace!="", $1}`,
|
"cluster_disk_usage": "sum by (cluster_name)(cluster_disk_usage{$1})",
|
||||||
"namespace_memory_usage_wo_cache": `namespace:container_memory_usage_bytes_wo_cache:sum{namespace!="", $1}`,
|
"resource_top3": "topk(3,sum by (cluster_name)(cluster_cpu_usage +cluster_memory_usage +cluster_disk_usage)/3)",
|
||||||
"namespace_net_bytes_transmitted": `sum by (namespace) (irate(container_network_transmit_bytes_total{namespace!="", pod!="", interface!~"^(cali.+|tunl.+|dummy.+|kube.+|flannel.+|cni.+|docker.+|veth.+|lo.*)", job="kubelet"}[5m]) * on (namespace) group_left(workspace) kube_namespace_labels{$1}) or on(namespace) max by(namespace) (kube_namespace_labels{$1} * 0)`,
|
"namespace_cpu_usage": `round(namespace:container_cpu_usage_seconds_total:sum_rate{namespace!="", $1}, 0.001)`,
|
||||||
"namespace_net_bytes_received": `sum by (namespace) (irate(container_network_receive_bytes_total{namespace!="", pod!="", interface!~"^(cali.+|tunl.+|dummy.+|kube.+|flannel.+|cni.+|docker.+|veth.+|lo.*)", job="kubelet"}[5m]) * on (namespace) group_left(workspace) kube_namespace_labels{$1}) or on(namespace) max by(namespace) (kube_namespace_labels{$1} * 0)`,
|
"namespace_memory_usage": `namespace:container_memory_usage_bytes:sum{namespace!="", $1}`,
|
||||||
"namespace_pod_count": `sum by (namespace) (kube_pod_status_phase{phase!~"Failed|Succeeded", namespace!=""} * on (namespace) group_left(workspace) kube_namespace_labels{$1}) or on(namespace) max by(namespace) (kube_namespace_labels{$1} * 0)`,
|
"namespace_memory_usage_wo_cache": `namespace:container_memory_usage_bytes_wo_cache:sum{namespace!="", $1}`,
|
||||||
"namespace_pod_running_count": `sum by (namespace) (kube_pod_status_phase{phase="Running", namespace!=""} * on (namespace) group_left(workspace) kube_namespace_labels{$1}) or on(namespace) max by(namespace) (kube_namespace_labels{$1} * 0)`,
|
"controller_cpu_usage_rate": `sum( node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{}* on(namespace,pod) group_left(workload) namespace_workload_pod:kube_pod_owner:relabel{$1}) by (workload)/sum( kube_pod_container_resource_limits{job="kube-state-metrics", resource="cpu"}* on(namespace,pod) group_left(workload) namespace_workload_pod:kube_pod_owner:relabel{ }) by (workload)`,
|
||||||
"namespace_pod_succeeded_count": `sum by (namespace) (kube_pod_status_phase{phase="Succeeded", namespace!=""} * on (namespace) group_left(workspace) kube_namespace_labels{$1}) or on(namespace) max by(namespace) (kube_namespace_labels{$1} * 0)`,
|
"controller_memory_usage_rate": `sum( container_memory_working_set_bytes{job="kubelet", metrics_path="/metrics/cadvisor", container!="", image!=""} * on(namespace,pod) group_left(workload) namespace_workload_pod:kube_pod_owner:relabel{$1}) by (workload)/sum( kube_pod_container_resource_limits{job="kube-state-metrics", resource="memory"}* on(namespace,pod) group_left(workload) namespace_workload_pod:kube_pod_owner:relabel{ }) by (workload)`,
|
||||||
"namespace_pod_abnormal_count": `namespace:pod_abnormal:count{namespace!="", $1}`,
|
|
||||||
"namespace_pod_abnormal_ratio": `namespace:pod_abnormal:ratio{namespace!="", $1}`,
|
|
||||||
"namespace_memory_limit_hard": `min by (namespace) (kube_resourcequota{resourcequota!="quota", type="hard", namespace!="", resource="limits.memory"} * on (namespace) group_left(workspace) kube_namespace_labels{$1})`,
|
|
||||||
"namespace_cpu_limit_hard": `min by (namespace) (kube_resourcequota{resourcequota!="quota", type="hard", namespace!="", resource="limits.cpu"} * on (namespace) group_left(workspace) kube_namespace_labels{$1})`,
|
|
||||||
"namespace_pod_count_hard": `min by (namespace) (kube_resourcequota{resourcequota!="quota", type="hard", namespace!="", resource="count/pods"} * on (namespace) group_left(workspace) kube_namespace_labels{$1})`,
|
|
||||||
"namespace_cronjob_count": `sum by (namespace) (kube_cronjob_labels{namespace!=""} * on (namespace) group_left(workspace) kube_namespace_labels{$1})`,
|
|
||||||
"namespace_pvc_count": `sum by (namespace) (kube_persistentvolumeclaim_info{namespace!=""} * on (namespace) group_left(workspace) kube_namespace_labels{$1})`,
|
|
||||||
"namespace_daemonset_count": `sum by (namespace) (kube_daemonset_labels{namespace!=""} * on (namespace) group_left(workspace) kube_namespace_labels{$1})`,
|
|
||||||
"namespace_deployment_count": `sum by (namespace) (kube_deployment_labels{namespace!=""} * on (namespace) group_left(workspace) kube_namespace_labels{$1})`,
|
|
||||||
"namespace_endpoint_count": `sum by (namespace) (kube_endpoint_labels{namespace!=""} * on (namespace) group_left(workspace) kube_namespace_labels{$1})`,
|
|
||||||
"namespace_hpa_count": `sum by (namespace) (kube_horizontalpodautoscaler_labels{namespace!=""} * on (namespace) group_left(workspace) kube_namespace_labels{$1})`,
|
|
||||||
"namespace_job_count": `sum by (namespace) (kube_job_labels{namespace!=""} * on (namespace) group_left(workspace) kube_namespace_labels{$1})`,
|
|
||||||
"namespace_statefulset_count": `sum by (namespace) (kube_statefulset_labels{namespace!=""} * on (namespace) group_left(workspace) kube_namespace_labels{$1})`,
|
|
||||||
"namespace_replicaset_count": `count by (namespace) (kube_replicaset_labels{namespace!=""} * on (namespace) group_left(workspace) kube_namespace_labels{$1})`,
|
|
||||||
"namespace_service_count": `sum by (namespace) (kube_service_info{namespace!=""} * on (namespace) group_left(workspace) kube_namespace_labels{$1})`,
|
|
||||||
"namespace_secret_count": `sum by (namespace) (kube_secret_info{namespace!=""} * on (namespace) group_left(workspace) kube_namespace_labels{$1})`,
|
|
||||||
"namespace_configmap_count": `sum by (namespace) (kube_configmap_info{namespace!=""} * on (namespace) group_left(workspace) kube_namespace_labels{$1})`,
|
|
||||||
"namespace_ingresses_extensions_count": `sum by (namespace) (kube_ingress_labels{namespace!=""} * on (namespace) group_left(workspace) kube_namespace_labels{$1})`,
|
|
||||||
"namespace_s2ibuilder_count": `sum by (namespace) (s2i_s2ibuilder_created{namespace!=""} * on (namespace) group_left(workspace) kube_namespace_labels{$1})`,
|
|
||||||
|
|
||||||
"controller_cpu_usage_rate": `sum( node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{}* on(namespace,pod) group_left(workload) namespace_workload_pod:kube_pod_owner:relabel{$1}) by (workload)/sum( kube_pod_container_resource_limits{job="kube-state-metrics", resource="cpu"}* on(namespace,pod) group_left(workload) namespace_workload_pod:kube_pod_owner:relabel{ }) by (workload)`,
|
|
||||||
"controller_memory_usage_rate": `sum( container_memory_working_set_bytes{job="kubelet", metrics_path="/metrics/cadvisor", container!="", image!=""} * on(namespace,pod) group_left(workload) namespace_workload_pod:kube_pod_owner:relabel{$1}) by (workload)/sum( kube_pod_container_resource_limits{job="kube-state-metrics", resource="memory"}* on(namespace,pod) group_left(workload) namespace_workload_pod:kube_pod_owner:relabel{ }) by (workload)`,
|
|
||||||
// pod
|
// pod
|
||||||
"pod_cpu_usage": `round(sum by (namespace, pod) (irate(container_cpu_usage_seconds_total{job="kubelet", pod!="", image!=""}[5m])) * on (namespace, pod) group_left(owner_kind,owner_name) kube_pod_owner{$1} * on (namespace, pod) group_left(node) kube_pod_info{$2}, 0.001)`,
|
"pod_cpu_usage": `round(sum by (namespace, pod) (irate(container_cpu_usage_seconds_total{job="kubelet", pod!="", image!=""}[5m])) * on (namespace, pod) group_left(owner_kind,owner_name) kube_pod_owner{$1} * on (namespace, pod) group_left(node) kube_pod_info{$2}, 0.001)`,
|
||||||
"pod_cpu_usage_rate": `sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{ $1}) by (pod) / sum(kube_pod_container_resource_limits{ $1,unit="core"}) by (pod)`,
|
"pod_cpu_usage_rate": `sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{ $1}) by (pod) / sum(kube_pod_container_resource_limits{ $1,unit="core"}) by (pod)`,
|
||||||
|
@ -81,7 +59,7 @@ func makeExpr(metric string, opts QueryOptions) string {
|
||||||
tmpl := promQLTemplates[metric]
|
tmpl := promQLTemplates[metric]
|
||||||
switch opts.Level {
|
switch opts.Level {
|
||||||
case LevelCluster:
|
case LevelCluster:
|
||||||
return tmpl
|
return makeClusterMetricExpr(tmpl, opts)
|
||||||
case LevelNode:
|
case LevelNode:
|
||||||
return makeNodeMetricExpr(tmpl, opts)
|
return makeNodeMetricExpr(tmpl, opts)
|
||||||
case LevelWorkspace:
|
case LevelWorkspace:
|
||||||
|
@ -105,6 +83,14 @@ func makeExpr(metric string, opts QueryOptions) string {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func makeClusterMetricExpr(tmpl string, o QueryOptions) string {
|
||||||
|
var clusterSelector string
|
||||||
|
if o.ClusterName != "" {
|
||||||
|
clusterSelector = fmt.Sprintf(`cluster_name="%s"`, o.ClusterName)
|
||||||
|
}
|
||||||
|
return strings.Replace(tmpl, "$1", clusterSelector, -1)
|
||||||
|
|
||||||
|
}
|
||||||
func makeNodeMetricExpr(tmpl string, o QueryOptions) string {
|
func makeNodeMetricExpr(tmpl string, o QueryOptions) string {
|
||||||
var nodeSelector string
|
var nodeSelector string
|
||||||
if o.NodeName != "" {
|
if o.NodeName != "" {
|
||||||
|
@ -177,19 +163,12 @@ func makePVCMetricExpr(tmpl string, o QueryOptions) string {
|
||||||
// GET /namespaces/{namespace}/persistentvolumeclaims/{persistentvolumeclaim} or
|
// GET /namespaces/{namespace}/persistentvolumeclaims/{persistentvolumeclaim} or
|
||||||
// GET /namespaces/{namespace}/persistentvolumeclaims
|
// GET /namespaces/{namespace}/persistentvolumeclaims
|
||||||
if o.Namespace != "" {
|
if o.Namespace != "" {
|
||||||
if o.PersistentVolumeClaimName != "" {
|
|
||||||
pvcSelector = fmt.Sprintf(`namespace="%s", persistentvolumeclaim="%s"`, o.Namespace, o.PersistentVolumeClaimName)
|
pvcSelector = fmt.Sprintf(`namespace="%s", persistentvolumeclaim=~"%s"`, o.Namespace, o.ResourceFilter)
|
||||||
} else {
|
|
||||||
pvcSelector = fmt.Sprintf(`namespace="%s", persistentvolumeclaim=~"%s"`, o.Namespace, o.ResourceFilter)
|
|
||||||
}
|
|
||||||
return strings.Replace(tmpl, "$1", pvcSelector, -1)
|
return strings.Replace(tmpl, "$1", pvcSelector, -1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// For monitoring persistentvolumeclaims of the specific storageclass
|
|
||||||
// GET /storageclasses/{storageclass}/persistentvolumeclaims
|
|
||||||
if o.StorageClassName != "" {
|
|
||||||
pvcSelector = fmt.Sprintf(`storageclass="%s", persistentvolumeclaim=~"%s"`, o.StorageClassName, o.ResourceFilter)
|
|
||||||
}
|
|
||||||
return strings.Replace(tmpl, "$1", pvcSelector, -1)
|
return strings.Replace(tmpl, "$1", pvcSelector, -1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -68,6 +68,7 @@ type QueryOptions struct {
|
||||||
NamespacedResourcesFilter string
|
NamespacedResourcesFilter string
|
||||||
QueryType string
|
QueryType string
|
||||||
ResourceFilter string
|
ResourceFilter string
|
||||||
|
ClusterName string
|
||||||
NodeName string
|
NodeName string
|
||||||
WorkspaceName string
|
WorkspaceName string
|
||||||
Namespace string
|
Namespace string
|
||||||
|
@ -77,10 +78,6 @@ type QueryOptions struct {
|
||||||
PodName string
|
PodName string
|
||||||
PodsName string
|
PodsName string
|
||||||
ContainerName string
|
ContainerName string
|
||||||
StorageClassName string
|
|
||||||
PersistentVolumeClaimName string
|
|
||||||
PVCFilter string
|
|
||||||
ApplicationName string
|
|
||||||
ServiceName string
|
ServiceName string
|
||||||
Ingress string
|
Ingress string
|
||||||
Job string
|
Job string
|
||||||
|
@ -92,10 +89,13 @@ func NewQueryOptions() *QueryOptions {
|
||||||
return &QueryOptions{}
|
return &QueryOptions{}
|
||||||
}
|
}
|
||||||
|
|
||||||
type ClusterOption struct{}
|
type ClusterOption struct {
|
||||||
|
ClusterName string
|
||||||
|
}
|
||||||
|
|
||||||
func (_ ClusterOption) Apply(o *QueryOptions) {
|
func (c ClusterOption) Apply(o *QueryOptions) {
|
||||||
o.Level = LevelCluster
|
o.Level = LevelCluster
|
||||||
|
o.ClusterName = c.ClusterName
|
||||||
}
|
}
|
||||||
|
|
||||||
type NodeOption struct {
|
type NodeOption struct {
|
||||||
|
@ -110,8 +110,6 @@ func (no NodeOption) Apply(o *QueryOptions) {
|
||||||
o.Level = LevelNode
|
o.Level = LevelNode
|
||||||
o.ResourceFilter = no.ResourceFilter
|
o.ResourceFilter = no.ResourceFilter
|
||||||
o.NodeName = no.NodeName
|
o.NodeName = no.NodeName
|
||||||
o.PVCFilter = no.PVCFilter
|
|
||||||
o.StorageClassName = no.StorageClassName
|
|
||||||
o.QueryType = no.QueryType
|
o.QueryType = no.QueryType
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -126,8 +124,6 @@ func (wo WorkspaceOption) Apply(o *QueryOptions) {
|
||||||
o.Level = LevelWorkspace
|
o.Level = LevelWorkspace
|
||||||
o.ResourceFilter = wo.ResourceFilter
|
o.ResourceFilter = wo.ResourceFilter
|
||||||
o.WorkspaceName = wo.WorkspaceName
|
o.WorkspaceName = wo.WorkspaceName
|
||||||
o.PVCFilter = wo.PVCFilter
|
|
||||||
o.StorageClassName = wo.StorageClassName
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type NamespaceOption struct {
|
type NamespaceOption struct {
|
||||||
|
@ -143,8 +139,6 @@ func (no NamespaceOption) Apply(o *QueryOptions) {
|
||||||
o.ResourceFilter = no.ResourceFilter
|
o.ResourceFilter = no.ResourceFilter
|
||||||
o.WorkspaceName = no.WorkspaceName
|
o.WorkspaceName = no.WorkspaceName
|
||||||
o.Namespace = no.NamespaceName
|
o.Namespace = no.NamespaceName
|
||||||
o.PVCFilter = no.PVCFilter
|
|
||||||
o.StorageClassName = no.StorageClassName
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type ApplicationsOption struct {
|
type ApplicationsOption struct {
|
||||||
|
@ -183,8 +177,6 @@ type ApplicationOption struct {
|
||||||
func (ao ApplicationOption) Apply(o *QueryOptions) {
|
func (ao ApplicationOption) Apply(o *QueryOptions) {
|
||||||
o.Level = LevelApplication
|
o.Level = LevelApplication
|
||||||
o.Namespace = ao.NamespaceName
|
o.Namespace = ao.NamespaceName
|
||||||
o.ApplicationName = ao.Application
|
|
||||||
o.StorageClassName = ao.StorageClassName
|
|
||||||
|
|
||||||
app_components := strings.Join(ao.ApplicationComponents[:], "|")
|
app_components := strings.Join(ao.ApplicationComponents[:], "|")
|
||||||
|
|
||||||
|
@ -303,11 +295,6 @@ func (po PVCOption) Apply(o *QueryOptions) {
|
||||||
o.Level = LevelPVC
|
o.Level = LevelPVC
|
||||||
o.ResourceFilter = po.ResourceFilter
|
o.ResourceFilter = po.ResourceFilter
|
||||||
o.Namespace = po.NamespaceName
|
o.Namespace = po.NamespaceName
|
||||||
o.StorageClassName = po.StorageClassName
|
|
||||||
o.PersistentVolumeClaimName = po.PersistentVolumeClaimName
|
|
||||||
|
|
||||||
// for meter
|
|
||||||
o.PVCFilter = po.PersistentVolumeClaimName
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type IngressOption struct {
|
type IngressOption struct {
|
||||||
|
|
|
@ -27,22 +27,53 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
ClusterCpuGauge = prometheus.NewGaugeVec(prometheus.GaugeOpts{
|
ClusterCpuUsageGauge = prometheus.NewGaugeVec(prometheus.GaugeOpts{
|
||||||
Name: "cluster_cpu_usage",
|
Name: "cluster_cpu_usage",
|
||||||
Help: "Cluster CPU Utilization Rate.",
|
Help: "Cluster CPU Utilization Rate.",
|
||||||
}, []string{"cluster_name"})
|
}, []string{"cluster_name", "adapter_id"})
|
||||||
ClusterMemoryGauge = prometheus.NewGaugeVec(prometheus.GaugeOpts{
|
ClusterCpuAvailGauge = prometheus.NewGaugeVec(prometheus.GaugeOpts{
|
||||||
|
Name: "cluster_cpu_avail",
|
||||||
|
Help: "Cluster CPU Available.",
|
||||||
|
}, []string{"cluster_name", "adapter_id"})
|
||||||
|
ClusterCpuTotalGauge = prometheus.NewGaugeVec(prometheus.GaugeOpts{
|
||||||
|
Name: "cluster_cpu_total",
|
||||||
|
Help: "Cluster CPU Total.",
|
||||||
|
}, []string{"cluster_name", "adapter_id"})
|
||||||
|
ClusterMemoryUsageGauge = prometheus.NewGaugeVec(prometheus.GaugeOpts{
|
||||||
Name: "cluster_memory_usage",
|
Name: "cluster_memory_usage",
|
||||||
Help: "Cluster Memory Utilization Rate.",
|
Help: "Cluster Memory Utilization Rate.",
|
||||||
}, []string{"cluster_name"})
|
}, []string{"cluster_name", "adapter_id"})
|
||||||
ClusterDiskGauge = prometheus.NewGaugeVec(prometheus.GaugeOpts{
|
ClusterMemoryAvailGauge = prometheus.NewGaugeVec(prometheus.GaugeOpts{
|
||||||
|
Name: "cluster_memory_avail",
|
||||||
|
Help: "Cluster Memory Available.",
|
||||||
|
}, []string{"cluster_name", "adapter_id"})
|
||||||
|
ClusterMemoryTotalGauge = prometheus.NewGaugeVec(prometheus.GaugeOpts{
|
||||||
|
Name: "cluster_memory_total",
|
||||||
|
Help: "Cluster Memory Total.",
|
||||||
|
}, []string{"cluster_name", "adapter_id"})
|
||||||
|
ClusterDiskUsageGauge = prometheus.NewGaugeVec(prometheus.GaugeOpts{
|
||||||
Name: "cluster_disk_usage",
|
Name: "cluster_disk_usage",
|
||||||
Help: "Cluster Disk Utilization Rate.",
|
Help: "Cluster Disk Utilization Rate.",
|
||||||
}, []string{"cluster_name"})
|
}, []string{"cluster_name", "adapter_id"})
|
||||||
|
ClusterDiskAvailGauge = prometheus.NewGaugeVec(prometheus.GaugeOpts{
|
||||||
|
Name: "cluster_disk_avail",
|
||||||
|
Help: "Cluster Disk Available.",
|
||||||
|
}, []string{"cluster_name", "adapter_id"})
|
||||||
|
ClusterDiskTotalGauge = prometheus.NewGaugeVec(prometheus.GaugeOpts{
|
||||||
|
Name: "cluster_disk_total",
|
||||||
|
Help: "Cluster Disk Total.",
|
||||||
|
}, []string{"cluster_name", "adapter_id"})
|
||||||
|
|
||||||
metrics = []prometheus.Collector{
|
metrics = []prometheus.Collector{
|
||||||
ClusterCpuGauge,
|
ClusterCpuUsageGauge,
|
||||||
ClusterMemoryGauge,
|
ClusterCpuAvailGauge,
|
||||||
ClusterDiskGauge,
|
ClusterCpuTotalGauge,
|
||||||
|
ClusterMemoryUsageGauge,
|
||||||
|
ClusterMemoryAvailGauge,
|
||||||
|
ClusterMemoryTotalGauge,
|
||||||
|
ClusterDiskUsageGauge,
|
||||||
|
ClusterDiskAvailGauge,
|
||||||
|
ClusterDiskTotalGauge,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -225,3 +256,13 @@ func genMetricFilter(o QueryOption) func(metric model.Metric) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p Prometheus) GetRawData(expr string, o QueryOption) (model.Value, error) {
|
||||||
|
opts := NewQueryOptions()
|
||||||
|
o.Apply(opts)
|
||||||
|
value, _, err := p.client.Query(context.Background(), makeExpr(expr, *opts), time.Now())
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return value, nil
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue