mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-08-16 02:25:58 +08:00
chore: address some gaps in k8s monitoring (#6653)
This commit is contained in:
parent
cecc57e72d
commit
77420b9d3a
@ -23,10 +23,11 @@ var (
|
|||||||
}
|
}
|
||||||
|
|
||||||
queryNamesForNamespaces = map[string][]string{
|
queryNamesForNamespaces = map[string][]string{
|
||||||
"cpu": {"A"},
|
"cpu": {"A"},
|
||||||
"memory": {"D"},
|
"memory": {"D"},
|
||||||
|
"pod_phase": {"H", "I", "J", "K"},
|
||||||
}
|
}
|
||||||
namespaceQueryNames = []string{"A", "D"}
|
namespaceQueryNames = []string{"A", "D", "H", "I", "J", "K"}
|
||||||
|
|
||||||
attributesKeysForNamespaces = []v3.AttributeKey{
|
attributesKeysForNamespaces = []v3.AttributeKey{
|
||||||
{Key: "k8s_namespace_name"},
|
{Key: "k8s_namespace_name"},
|
||||||
@ -307,6 +308,19 @@ func (p *NamespacesRepo) GetNamespaceList(ctx context.Context, req model.Namespa
|
|||||||
record.MemoryUsage = memory
|
record.MemoryUsage = memory
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if pending, ok := row.Data["H"].(float64); ok {
|
||||||
|
record.CountByPhase.Pending = int(pending)
|
||||||
|
}
|
||||||
|
if running, ok := row.Data["I"].(float64); ok {
|
||||||
|
record.CountByPhase.Running = int(running)
|
||||||
|
}
|
||||||
|
if succeeded, ok := row.Data["J"].(float64); ok {
|
||||||
|
record.CountByPhase.Succeeded = int(succeeded)
|
||||||
|
}
|
||||||
|
if failed, ok := row.Data["K"].(float64); ok {
|
||||||
|
record.CountByPhase.Failed = int(failed)
|
||||||
|
}
|
||||||
|
|
||||||
record.Meta = map[string]string{}
|
record.Meta = map[string]string{}
|
||||||
if _, ok := namespaceAttrs[record.NamespaceName]; ok {
|
if _, ok := namespaceAttrs[record.NamespaceName]; ok {
|
||||||
record.Meta = namespaceAttrs[record.NamespaceName]
|
record.Meta = namespaceAttrs[record.NamespaceName]
|
||||||
|
@ -17,7 +17,7 @@ import (
|
|||||||
var (
|
var (
|
||||||
metricToUseForNodes = "k8s_node_cpu_utilization"
|
metricToUseForNodes = "k8s_node_cpu_utilization"
|
||||||
|
|
||||||
nodeAttrsToEnrich = []string{"k8s_node_name", "k8s_node_uid"}
|
nodeAttrsToEnrich = []string{"k8s_node_name", "k8s_node_uid", "k8s_cluster_name"}
|
||||||
|
|
||||||
k8sNodeUIDAttrKey = "k8s_node_uid"
|
k8sNodeUIDAttrKey = "k8s_node_uid"
|
||||||
|
|
||||||
@ -27,13 +27,14 @@ var (
|
|||||||
"memory": {"C"},
|
"memory": {"C"},
|
||||||
"memory_allocatable": {"D"},
|
"memory_allocatable": {"D"},
|
||||||
}
|
}
|
||||||
nodeQueryNames = []string{"A", "B", "C", "D"}
|
nodeQueryNames = []string{"A", "B", "C", "D", "E", "F"}
|
||||||
|
|
||||||
metricNamesForNodes = map[string]string{
|
metricNamesForNodes = map[string]string{
|
||||||
"cpu": "k8s_node_cpu_utilization",
|
"cpu": "k8s_node_cpu_utilization",
|
||||||
"cpu_allocatable": "k8s_node_allocatable_cpu",
|
"cpu_allocatable": "k8s_node_allocatable_cpu",
|
||||||
"memory": "k8s_node_memory_usage",
|
"memory": "k8s_node_memory_usage",
|
||||||
"memory_allocatable": "k8s_node_allocatable_memory",
|
"memory_allocatable": "k8s_node_allocatable_memory",
|
||||||
|
"node_condition": "k8s_node_condition_ready",
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -325,6 +326,14 @@ func (p *NodesRepo) GetNodeList(ctx context.Context, req model.NodeListRequest)
|
|||||||
record.NodeMemoryAllocatable = memory
|
record.NodeMemoryAllocatable = memory
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ready, ok := row.Data["E"].(float64); ok {
|
||||||
|
record.CountByCondition.Ready = int(ready)
|
||||||
|
}
|
||||||
|
|
||||||
|
if notReady, ok := row.Data["F"].(float64); ok {
|
||||||
|
record.CountByCondition.NotReady = int(notReady)
|
||||||
|
}
|
||||||
|
|
||||||
record.Meta = map[string]string{}
|
record.Meta = map[string]string{}
|
||||||
if _, ok := nodeAttrs[record.NodeUID]; ok {
|
if _, ok := nodeAttrs[record.NodeUID]; ok {
|
||||||
record.Meta = nodeAttrs[record.NodeUID]
|
record.Meta = nodeAttrs[record.NodeUID]
|
||||||
|
@ -109,6 +109,74 @@ var NodesTableListQuery = v3.QueryRangeParamsV3{
|
|||||||
SpaceAggregation: v3.SpaceAggregationSum,
|
SpaceAggregation: v3.SpaceAggregationSum,
|
||||||
Disabled: false,
|
Disabled: false,
|
||||||
},
|
},
|
||||||
|
// node conditions - Ready
|
||||||
|
"E": {
|
||||||
|
QueryName: "E",
|
||||||
|
DataSource: v3.DataSourceMetrics,
|
||||||
|
AggregateAttribute: v3.AttributeKey{
|
||||||
|
Key: metricNamesForNodes["node_condition"],
|
||||||
|
DataType: v3.AttributeKeyDataTypeFloat64,
|
||||||
|
},
|
||||||
|
Temporality: v3.Unspecified,
|
||||||
|
Filters: &v3.FilterSet{
|
||||||
|
Operator: "AND",
|
||||||
|
Items: []v3.FilterItem{
|
||||||
|
{
|
||||||
|
Key: v3.AttributeKey{
|
||||||
|
Key: "__value",
|
||||||
|
},
|
||||||
|
Operator: v3.FilterOperatorEqual,
|
||||||
|
Value: 1,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
GroupBy: []v3.AttributeKey{
|
||||||
|
{
|
||||||
|
Key: k8sNodeUIDAttrKey,
|
||||||
|
DataType: v3.AttributeKeyDataTypeString,
|
||||||
|
Type: v3.AttributeKeyTypeResource,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Expression: "E",
|
||||||
|
ReduceTo: v3.ReduceToOperatorAvg,
|
||||||
|
TimeAggregation: v3.TimeAggregationAnyLast,
|
||||||
|
SpaceAggregation: v3.SpaceAggregationSum,
|
||||||
|
Disabled: false,
|
||||||
|
},
|
||||||
|
// node conditions - NotReady
|
||||||
|
"F": {
|
||||||
|
QueryName: "F",
|
||||||
|
DataSource: v3.DataSourceMetrics,
|
||||||
|
AggregateAttribute: v3.AttributeKey{
|
||||||
|
Key: metricNamesForNodes["node_condition"],
|
||||||
|
DataType: v3.AttributeKeyDataTypeFloat64,
|
||||||
|
},
|
||||||
|
Temporality: v3.Unspecified,
|
||||||
|
Filters: &v3.FilterSet{
|
||||||
|
Operator: "AND",
|
||||||
|
Items: []v3.FilterItem{
|
||||||
|
{
|
||||||
|
Key: v3.AttributeKey{
|
||||||
|
Key: "__value",
|
||||||
|
},
|
||||||
|
Operator: v3.FilterOperatorEqual,
|
||||||
|
Value: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
GroupBy: []v3.AttributeKey{
|
||||||
|
{
|
||||||
|
Key: k8sNodeUIDAttrKey,
|
||||||
|
DataType: v3.AttributeKeyDataTypeString,
|
||||||
|
Type: v3.AttributeKeyTypeResource,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Expression: "F",
|
||||||
|
ReduceTo: v3.ReduceToOperatorAvg,
|
||||||
|
TimeAggregation: v3.TimeAggregationAnyLast,
|
||||||
|
SpaceAggregation: v3.SpaceAggregationSum,
|
||||||
|
Disabled: false,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
PanelType: v3.PanelTypeTable,
|
PanelType: v3.PanelTypeTable,
|
||||||
QueryType: v3.QueryTypeBuilder,
|
QueryType: v3.QueryTypeBuilder,
|
||||||
|
@ -27,6 +27,7 @@ var (
|
|||||||
"k8s_daemonset_name",
|
"k8s_daemonset_name",
|
||||||
"k8s_job_name",
|
"k8s_job_name",
|
||||||
"k8s_cronjob_name",
|
"k8s_cronjob_name",
|
||||||
|
"k8s_cluster_name",
|
||||||
}
|
}
|
||||||
|
|
||||||
k8sPodUIDAttrKey = "k8s_pod_uid"
|
k8sPodUIDAttrKey = "k8s_pod_uid"
|
||||||
@ -39,8 +40,9 @@ var (
|
|||||||
"memory_request": {"E", "D"},
|
"memory_request": {"E", "D"},
|
||||||
"memory_limit": {"F", "D"},
|
"memory_limit": {"F", "D"},
|
||||||
"restarts": {"G", "A"},
|
"restarts": {"G", "A"},
|
||||||
|
"pod_phase": {"H", "I", "J", "K"},
|
||||||
}
|
}
|
||||||
podQueryNames = []string{"A", "B", "C", "D", "E", "F", "G"}
|
podQueryNames = []string{"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K"}
|
||||||
|
|
||||||
metricNamesForPods = map[string]string{
|
metricNamesForPods = map[string]string{
|
||||||
"cpu": "k8s_pod_cpu_utilization",
|
"cpu": "k8s_pod_cpu_utilization",
|
||||||
@ -50,6 +52,7 @@ var (
|
|||||||
"memory_request": "k8s_pod_memory_request_utilization",
|
"memory_request": "k8s_pod_memory_request_utilization",
|
||||||
"memory_limit": "k8s_pod_memory_limit_utilization",
|
"memory_limit": "k8s_pod_memory_limit_utilization",
|
||||||
"restarts": "k8s_container_restarts",
|
"restarts": "k8s_container_restarts",
|
||||||
|
"pod_phase": "k8s_pod_phase",
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -365,6 +368,22 @@ func (p *PodsRepo) GetPodList(ctx context.Context, req model.PodListRequest) (mo
|
|||||||
record.RestartCount = int(restarts)
|
record.RestartCount = int(restarts)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if pending, ok := row.Data["H"].(float64); ok {
|
||||||
|
record.CountByPhase.Pending = int(pending)
|
||||||
|
}
|
||||||
|
|
||||||
|
if running, ok := row.Data["I"].(float64); ok {
|
||||||
|
record.CountByPhase.Running = int(running)
|
||||||
|
}
|
||||||
|
|
||||||
|
if succeeded, ok := row.Data["J"].(float64); ok {
|
||||||
|
record.CountByPhase.Succeeded = int(succeeded)
|
||||||
|
}
|
||||||
|
|
||||||
|
if failed, ok := row.Data["K"].(float64); ok {
|
||||||
|
record.CountByPhase.Failed = int(failed)
|
||||||
|
}
|
||||||
|
|
||||||
record.Meta = map[string]string{}
|
record.Meta = map[string]string{}
|
||||||
if _, ok := podAttrs[record.PodUID]; ok {
|
if _, ok := podAttrs[record.PodUID]; ok {
|
||||||
record.Meta = podAttrs[record.PodUID]
|
record.Meta = podAttrs[record.PodUID]
|
||||||
|
@ -54,7 +54,7 @@ var PodsTableListQuery = v3.QueryRangeParamsV3{
|
|||||||
Expression: "B",
|
Expression: "B",
|
||||||
ReduceTo: v3.ReduceToOperatorAvg,
|
ReduceTo: v3.ReduceToOperatorAvg,
|
||||||
TimeAggregation: v3.TimeAggregationAvg,
|
TimeAggregation: v3.TimeAggregationAvg,
|
||||||
SpaceAggregation: v3.SpaceAggregationSum,
|
SpaceAggregation: v3.SpaceAggregationAvg,
|
||||||
Disabled: false,
|
Disabled: false,
|
||||||
},
|
},
|
||||||
// pod cpu limit utilization
|
// pod cpu limit utilization
|
||||||
@ -80,7 +80,7 @@ var PodsTableListQuery = v3.QueryRangeParamsV3{
|
|||||||
Expression: "C",
|
Expression: "C",
|
||||||
ReduceTo: v3.ReduceToOperatorAvg,
|
ReduceTo: v3.ReduceToOperatorAvg,
|
||||||
TimeAggregation: v3.TimeAggregationAvg,
|
TimeAggregation: v3.TimeAggregationAvg,
|
||||||
SpaceAggregation: v3.SpaceAggregationSum,
|
SpaceAggregation: v3.SpaceAggregationAvg,
|
||||||
Disabled: false,
|
Disabled: false,
|
||||||
},
|
},
|
||||||
// pod memory utilization
|
// pod memory utilization
|
||||||
@ -132,7 +132,7 @@ var PodsTableListQuery = v3.QueryRangeParamsV3{
|
|||||||
Expression: "E",
|
Expression: "E",
|
||||||
ReduceTo: v3.ReduceToOperatorAvg,
|
ReduceTo: v3.ReduceToOperatorAvg,
|
||||||
TimeAggregation: v3.TimeAggregationAvg,
|
TimeAggregation: v3.TimeAggregationAvg,
|
||||||
SpaceAggregation: v3.SpaceAggregationSum,
|
SpaceAggregation: v3.SpaceAggregationAvg,
|
||||||
Disabled: false,
|
Disabled: false,
|
||||||
},
|
},
|
||||||
// pod memory limit utilization
|
// pod memory limit utilization
|
||||||
@ -158,7 +158,7 @@ var PodsTableListQuery = v3.QueryRangeParamsV3{
|
|||||||
Expression: "F",
|
Expression: "F",
|
||||||
ReduceTo: v3.ReduceToOperatorAvg,
|
ReduceTo: v3.ReduceToOperatorAvg,
|
||||||
TimeAggregation: v3.TimeAggregationAvg,
|
TimeAggregation: v3.TimeAggregationAvg,
|
||||||
SpaceAggregation: v3.SpaceAggregationSum,
|
SpaceAggregation: v3.SpaceAggregationAvg,
|
||||||
Disabled: false,
|
Disabled: false,
|
||||||
},
|
},
|
||||||
"G": {
|
"G": {
|
||||||
@ -187,6 +187,142 @@ var PodsTableListQuery = v3.QueryRangeParamsV3{
|
|||||||
Functions: []v3.Function{{Name: v3.FunctionNameRunningDiff}},
|
Functions: []v3.Function{{Name: v3.FunctionNameRunningDiff}},
|
||||||
Disabled: false,
|
Disabled: false,
|
||||||
},
|
},
|
||||||
|
// pod phase pending
|
||||||
|
"H": {
|
||||||
|
QueryName: "H",
|
||||||
|
DataSource: v3.DataSourceMetrics,
|
||||||
|
AggregateAttribute: v3.AttributeKey{
|
||||||
|
Key: metricNamesForPods["pod_phase"],
|
||||||
|
DataType: v3.AttributeKeyDataTypeFloat64,
|
||||||
|
},
|
||||||
|
Temporality: v3.Unspecified,
|
||||||
|
Filters: &v3.FilterSet{
|
||||||
|
Operator: "AND",
|
||||||
|
Items: []v3.FilterItem{
|
||||||
|
{
|
||||||
|
Key: v3.AttributeKey{
|
||||||
|
Key: "__value",
|
||||||
|
},
|
||||||
|
Operator: v3.FilterOperatorEqual,
|
||||||
|
Value: 1,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
GroupBy: []v3.AttributeKey{
|
||||||
|
{
|
||||||
|
Key: k8sPodUIDAttrKey,
|
||||||
|
DataType: v3.AttributeKeyDataTypeString,
|
||||||
|
Type: v3.AttributeKeyTypeResource,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Expression: "H",
|
||||||
|
ReduceTo: v3.ReduceToOperatorLast,
|
||||||
|
TimeAggregation: v3.TimeAggregationAnyLast,
|
||||||
|
SpaceAggregation: v3.SpaceAggregationCount,
|
||||||
|
Disabled: false,
|
||||||
|
},
|
||||||
|
// pod phase running
|
||||||
|
"I": {
|
||||||
|
QueryName: "I",
|
||||||
|
DataSource: v3.DataSourceMetrics,
|
||||||
|
AggregateAttribute: v3.AttributeKey{
|
||||||
|
Key: metricNamesForPods["pod_phase"],
|
||||||
|
DataType: v3.AttributeKeyDataTypeFloat64,
|
||||||
|
},
|
||||||
|
Temporality: v3.Unspecified,
|
||||||
|
Filters: &v3.FilterSet{
|
||||||
|
Operator: "AND",
|
||||||
|
Items: []v3.FilterItem{
|
||||||
|
{
|
||||||
|
Key: v3.AttributeKey{
|
||||||
|
Key: "__value",
|
||||||
|
},
|
||||||
|
Operator: v3.FilterOperatorEqual,
|
||||||
|
Value: 2,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
GroupBy: []v3.AttributeKey{
|
||||||
|
{
|
||||||
|
Key: k8sPodUIDAttrKey,
|
||||||
|
DataType: v3.AttributeKeyDataTypeString,
|
||||||
|
Type: v3.AttributeKeyTypeResource,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Expression: "I",
|
||||||
|
ReduceTo: v3.ReduceToOperatorLast,
|
||||||
|
TimeAggregation: v3.TimeAggregationAnyLast,
|
||||||
|
SpaceAggregation: v3.SpaceAggregationCount,
|
||||||
|
Disabled: false,
|
||||||
|
},
|
||||||
|
// pod phase succeeded
|
||||||
|
"J": {
|
||||||
|
QueryName: "J",
|
||||||
|
DataSource: v3.DataSourceMetrics,
|
||||||
|
AggregateAttribute: v3.AttributeKey{
|
||||||
|
Key: metricNamesForPods["pod_phase"],
|
||||||
|
DataType: v3.AttributeKeyDataTypeFloat64,
|
||||||
|
},
|
||||||
|
Temporality: v3.Unspecified,
|
||||||
|
Filters: &v3.FilterSet{
|
||||||
|
Operator: "AND",
|
||||||
|
Items: []v3.FilterItem{
|
||||||
|
{
|
||||||
|
Key: v3.AttributeKey{
|
||||||
|
Key: "__value",
|
||||||
|
},
|
||||||
|
Operator: v3.FilterOperatorEqual,
|
||||||
|
Value: 3,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
GroupBy: []v3.AttributeKey{
|
||||||
|
{
|
||||||
|
Key: k8sPodUIDAttrKey,
|
||||||
|
DataType: v3.AttributeKeyDataTypeString,
|
||||||
|
Type: v3.AttributeKeyTypeResource,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Expression: "J",
|
||||||
|
ReduceTo: v3.ReduceToOperatorLast,
|
||||||
|
TimeAggregation: v3.TimeAggregationAnyLast,
|
||||||
|
SpaceAggregation: v3.SpaceAggregationCount,
|
||||||
|
Disabled: false,
|
||||||
|
},
|
||||||
|
// pod phase failed
|
||||||
|
"K": {
|
||||||
|
QueryName: "K",
|
||||||
|
DataSource: v3.DataSourceMetrics,
|
||||||
|
AggregateAttribute: v3.AttributeKey{
|
||||||
|
Key: metricNamesForPods["pod_phase"],
|
||||||
|
DataType: v3.AttributeKeyDataTypeFloat64,
|
||||||
|
},
|
||||||
|
Temporality: v3.Unspecified,
|
||||||
|
Filters: &v3.FilterSet{
|
||||||
|
Operator: "AND",
|
||||||
|
Items: []v3.FilterItem{
|
||||||
|
{
|
||||||
|
Key: v3.AttributeKey{
|
||||||
|
Key: "__value",
|
||||||
|
},
|
||||||
|
Operator: v3.FilterOperatorEqual,
|
||||||
|
Value: 4,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
GroupBy: []v3.AttributeKey{
|
||||||
|
{
|
||||||
|
Key: k8sPodUIDAttrKey,
|
||||||
|
DataType: v3.AttributeKeyDataTypeString,
|
||||||
|
Type: v3.AttributeKeyTypeResource,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Expression: "K",
|
||||||
|
ReduceTo: v3.ReduceToOperatorLast,
|
||||||
|
TimeAggregation: v3.TimeAggregationAnyLast,
|
||||||
|
SpaceAggregation: v3.SpaceAggregationCount,
|
||||||
|
Disabled: false,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
PanelType: v3.PanelTypeTable,
|
PanelType: v3.PanelTypeTable,
|
||||||
QueryType: v3.QueryTypeBuilder,
|
QueryType: v3.QueryTypeBuilder,
|
||||||
|
@ -4,13 +4,13 @@ import v3 "go.signoz.io/signoz/pkg/query-service/model/v3"
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
metricNamesForWorkloads = map[string]string{
|
metricNamesForWorkloads = map[string]string{
|
||||||
"cpu": "k8s_pod_cpu_utilization",
|
"cpu": "k8s_pod_cpu_utilization",
|
||||||
"cpu_req": "k8s_pod_cpu_request_utilization",
|
"cpu_request": "k8s_pod_cpu_request_utilization",
|
||||||
"cpu_limit": "k8s_pod_cpu_limit_utilization",
|
"cpu_limit": "k8s_pod_cpu_limit_utilization",
|
||||||
"memory": "k8s_pod_memory_usage",
|
"memory": "k8s_pod_memory_usage",
|
||||||
"memory_req": "k8s_pod_memory_request_utilization",
|
"memory_request": "k8s_pod_memory_request_utilization",
|
||||||
"memory_limit": "k8s_pod_memory_limit_utilization",
|
"memory_limit": "k8s_pod_memory_limit_utilization",
|
||||||
"restarts": "k8s_container_restarts",
|
"restarts": "k8s_container_restarts",
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -54,7 +54,7 @@ var WorkloadTableListQuery = v3.QueryRangeParamsV3{
|
|||||||
Expression: "B",
|
Expression: "B",
|
||||||
ReduceTo: v3.ReduceToOperatorAvg,
|
ReduceTo: v3.ReduceToOperatorAvg,
|
||||||
TimeAggregation: v3.TimeAggregationAvg,
|
TimeAggregation: v3.TimeAggregationAvg,
|
||||||
SpaceAggregation: v3.SpaceAggregationSum,
|
SpaceAggregation: v3.SpaceAggregationAvg,
|
||||||
Disabled: false,
|
Disabled: false,
|
||||||
},
|
},
|
||||||
// pod cpu limit utilization
|
// pod cpu limit utilization
|
||||||
@ -74,7 +74,7 @@ var WorkloadTableListQuery = v3.QueryRangeParamsV3{
|
|||||||
Expression: "C",
|
Expression: "C",
|
||||||
ReduceTo: v3.ReduceToOperatorAvg,
|
ReduceTo: v3.ReduceToOperatorAvg,
|
||||||
TimeAggregation: v3.TimeAggregationAvg,
|
TimeAggregation: v3.TimeAggregationAvg,
|
||||||
SpaceAggregation: v3.SpaceAggregationSum,
|
SpaceAggregation: v3.SpaceAggregationAvg,
|
||||||
Disabled: false,
|
Disabled: false,
|
||||||
},
|
},
|
||||||
// pod memory utilization
|
// pod memory utilization
|
||||||
@ -114,7 +114,7 @@ var WorkloadTableListQuery = v3.QueryRangeParamsV3{
|
|||||||
Expression: "E",
|
Expression: "E",
|
||||||
ReduceTo: v3.ReduceToOperatorAvg,
|
ReduceTo: v3.ReduceToOperatorAvg,
|
||||||
TimeAggregation: v3.TimeAggregationAvg,
|
TimeAggregation: v3.TimeAggregationAvg,
|
||||||
SpaceAggregation: v3.SpaceAggregationSum,
|
SpaceAggregation: v3.SpaceAggregationAvg,
|
||||||
Disabled: false,
|
Disabled: false,
|
||||||
},
|
},
|
||||||
// pod memory limit utilization
|
// pod memory limit utilization
|
||||||
@ -134,7 +134,7 @@ var WorkloadTableListQuery = v3.QueryRangeParamsV3{
|
|||||||
Expression: "F",
|
Expression: "F",
|
||||||
ReduceTo: v3.ReduceToOperatorAvg,
|
ReduceTo: v3.ReduceToOperatorAvg,
|
||||||
TimeAggregation: v3.TimeAggregationAvg,
|
TimeAggregation: v3.TimeAggregationAvg,
|
||||||
SpaceAggregation: v3.SpaceAggregationSum,
|
SpaceAggregation: v3.SpaceAggregationAvg,
|
||||||
Disabled: false,
|
Disabled: false,
|
||||||
},
|
},
|
||||||
"G": {
|
"G": {
|
||||||
|
@ -5,9 +5,73 @@ import (
|
|||||||
"reflect"
|
"reflect"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
v3 "go.signoz.io/signoz/pkg/query-service/model/v3"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func AddMetricValueFilter(mq *v3.BuilderQuery) *v3.MetricValueFilter {
|
||||||
|
|
||||||
|
var metricValueFilter *v3.MetricValueFilter = nil
|
||||||
|
|
||||||
|
if mq != nil && mq.Filters != nil && mq.Filters.Items != nil {
|
||||||
|
for _, item := range mq.Filters.Items {
|
||||||
|
if item.Key.Key == "__value" {
|
||||||
|
switch v := item.Value.(type) {
|
||||||
|
case float64:
|
||||||
|
metricValueFilter = &v3.MetricValueFilter{
|
||||||
|
Value: v,
|
||||||
|
}
|
||||||
|
case float32:
|
||||||
|
metricValueFilter = &v3.MetricValueFilter{
|
||||||
|
Value: float64(v),
|
||||||
|
}
|
||||||
|
case int:
|
||||||
|
metricValueFilter = &v3.MetricValueFilter{
|
||||||
|
Value: float64(v),
|
||||||
|
}
|
||||||
|
case int8:
|
||||||
|
metricValueFilter = &v3.MetricValueFilter{
|
||||||
|
Value: float64(v),
|
||||||
|
}
|
||||||
|
case int16:
|
||||||
|
metricValueFilter = &v3.MetricValueFilter{
|
||||||
|
Value: float64(v),
|
||||||
|
}
|
||||||
|
case int32:
|
||||||
|
metricValueFilter = &v3.MetricValueFilter{
|
||||||
|
Value: float64(v),
|
||||||
|
}
|
||||||
|
case int64:
|
||||||
|
metricValueFilter = &v3.MetricValueFilter{
|
||||||
|
Value: float64(v),
|
||||||
|
}
|
||||||
|
case uint:
|
||||||
|
metricValueFilter = &v3.MetricValueFilter{
|
||||||
|
Value: float64(v),
|
||||||
|
}
|
||||||
|
case uint8:
|
||||||
|
metricValueFilter = &v3.MetricValueFilter{
|
||||||
|
Value: float64(v),
|
||||||
|
}
|
||||||
|
case uint16:
|
||||||
|
metricValueFilter = &v3.MetricValueFilter{
|
||||||
|
Value: float64(v),
|
||||||
|
}
|
||||||
|
case uint32:
|
||||||
|
metricValueFilter = &v3.MetricValueFilter{
|
||||||
|
Value: float64(v),
|
||||||
|
}
|
||||||
|
case uint64:
|
||||||
|
metricValueFilter = &v3.MetricValueFilter{
|
||||||
|
Value: float64(v),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return metricValueFilter
|
||||||
|
}
|
||||||
|
|
||||||
// FormattedValue formats the value to be used in clickhouse query
|
// FormattedValue formats the value to be used in clickhouse query
|
||||||
func FormattedValue(v interface{}) string {
|
func FormattedValue(v interface{}) string {
|
||||||
switch x := v.(type) {
|
switch x := v.(type) {
|
||||||
|
@ -5,6 +5,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"go.signoz.io/signoz/pkg/query-service/app/metrics"
|
||||||
"go.signoz.io/signoz/pkg/query-service/app/metrics/v4/helpers"
|
"go.signoz.io/signoz/pkg/query-service/app/metrics/v4/helpers"
|
||||||
"go.signoz.io/signoz/pkg/query-service/common"
|
"go.signoz.io/signoz/pkg/query-service/common"
|
||||||
"go.signoz.io/signoz/pkg/query-service/constants"
|
"go.signoz.io/signoz/pkg/query-service/constants"
|
||||||
@ -335,6 +336,10 @@ func PrepareMetricQuery(start, end int64, queryType v3.QueryType, panelType v3.P
|
|||||||
|
|
||||||
start, end = common.AdjustedMetricTimeRange(start, end, mq.StepInterval, *mq)
|
start, end = common.AdjustedMetricTimeRange(start, end, mq.StepInterval, *mq)
|
||||||
|
|
||||||
|
if valFilter := metrics.AddMetricValueFilter(mq); valFilter != nil {
|
||||||
|
mq.MetricValueFilter = valFilter
|
||||||
|
}
|
||||||
|
|
||||||
// if the aggregate operator is a histogram quantile, and user has not forgotten
|
// if the aggregate operator is a histogram quantile, and user has not forgotten
|
||||||
// the le tag in the group by then add the le tag to the group by
|
// the le tag in the group by then add the le tag to the group by
|
||||||
if mq.AggregateOperator == v3.AggregateOperatorHistQuant50 ||
|
if mq.AggregateOperator == v3.AggregateOperatorHistQuant50 ||
|
||||||
|
@ -20,11 +20,16 @@ func PrepareMetricQueryCumulativeTable(start, end, step int64, mq *v3.BuilderQue
|
|||||||
orderBy := helpers.OrderByAttributeKeyTags(mq.OrderBy, mq.GroupBy)
|
orderBy := helpers.OrderByAttributeKeyTags(mq.OrderBy, mq.GroupBy)
|
||||||
selectLabels := helpers.GroupByAttributeKeyTags(mq.GroupBy...)
|
selectLabels := helpers.GroupByAttributeKeyTags(mq.GroupBy...)
|
||||||
|
|
||||||
|
valueFilter := " WHERE isNaN(per_series_value) = 0"
|
||||||
|
if mq.MetricValueFilter != nil {
|
||||||
|
valueFilter += fmt.Sprintf(" AND per_series_value = %f", mq.MetricValueFilter.Value)
|
||||||
|
}
|
||||||
|
|
||||||
queryTmpl :=
|
queryTmpl :=
|
||||||
"SELECT %s," +
|
"SELECT %s," +
|
||||||
" %s as value" +
|
" %s as value" +
|
||||||
" FROM (%s)" +
|
" FROM (%s)" +
|
||||||
" WHERE isNaN(per_series_value) = 0" +
|
valueFilter +
|
||||||
" GROUP BY %s" +
|
" GROUP BY %s" +
|
||||||
" ORDER BY %s"
|
" ORDER BY %s"
|
||||||
|
|
||||||
|
@ -190,11 +190,16 @@ func PrepareMetricQueryCumulativeTimeSeries(start, end, step int64, mq *v3.Build
|
|||||||
orderBy := helpers.OrderByAttributeKeyTags(mq.OrderBy, mq.GroupBy)
|
orderBy := helpers.OrderByAttributeKeyTags(mq.OrderBy, mq.GroupBy)
|
||||||
selectLabels := helpers.GroupByAttributeKeyTags(mq.GroupBy...)
|
selectLabels := helpers.GroupByAttributeKeyTags(mq.GroupBy...)
|
||||||
|
|
||||||
|
valueFilter := " WHERE isNaN(per_series_value) = 0"
|
||||||
|
if mq.MetricValueFilter != nil {
|
||||||
|
valueFilter += fmt.Sprintf(" AND per_series_value = %f", mq.MetricValueFilter.Value)
|
||||||
|
}
|
||||||
|
|
||||||
queryTmpl :=
|
queryTmpl :=
|
||||||
"SELECT %s," +
|
"SELECT %s," +
|
||||||
" %s as value" +
|
" %s as value" +
|
||||||
" FROM (%s)" +
|
" FROM (%s)" +
|
||||||
" WHERE isNaN(per_series_value) = 0" +
|
valueFilter +
|
||||||
" GROUP BY %s" +
|
" GROUP BY %s" +
|
||||||
" ORDER BY %s"
|
" ORDER BY %s"
|
||||||
|
|
||||||
|
@ -25,11 +25,16 @@ func PrepareMetricQueryDeltaTable(start, end, step int64, mq *v3.BuilderQuery) (
|
|||||||
orderBy := helpers.OrderByAttributeKeyTags(mq.OrderBy, mq.GroupBy)
|
orderBy := helpers.OrderByAttributeKeyTags(mq.OrderBy, mq.GroupBy)
|
||||||
selectLabels := helpers.GroupByAttributeKeyTags(mq.GroupBy...)
|
selectLabels := helpers.GroupByAttributeKeyTags(mq.GroupBy...)
|
||||||
|
|
||||||
|
valueFilter := " WHERE isNaN(per_series_value) = 0"
|
||||||
|
if mq.MetricValueFilter != nil {
|
||||||
|
valueFilter += fmt.Sprintf(" AND per_series_value = %f", mq.MetricValueFilter.Value)
|
||||||
|
}
|
||||||
|
|
||||||
queryTmpl :=
|
queryTmpl :=
|
||||||
"SELECT %s," +
|
"SELECT %s," +
|
||||||
" %s as value" +
|
" %s as value" +
|
||||||
" FROM (%s)" +
|
" FROM (%s)" +
|
||||||
" WHERE isNaN(per_series_value) = 0" +
|
valueFilter +
|
||||||
" GROUP BY %s" +
|
" GROUP BY %s" +
|
||||||
" ORDER BY %s"
|
" ORDER BY %s"
|
||||||
|
|
||||||
|
@ -142,11 +142,16 @@ func PrepareMetricQueryDeltaTimeSeries(start, end, step int64, mq *v3.BuilderQue
|
|||||||
orderBy := helpers.OrderByAttributeKeyTags(mq.OrderBy, mq.GroupBy)
|
orderBy := helpers.OrderByAttributeKeyTags(mq.OrderBy, mq.GroupBy)
|
||||||
selectLabels := helpers.GroupByAttributeKeyTags(mq.GroupBy...)
|
selectLabels := helpers.GroupByAttributeKeyTags(mq.GroupBy...)
|
||||||
|
|
||||||
|
valueFilter := " WHERE isNaN(per_series_value) = 0"
|
||||||
|
if mq.MetricValueFilter != nil {
|
||||||
|
valueFilter += fmt.Sprintf(" AND per_series_value = %f", mq.MetricValueFilter.Value)
|
||||||
|
}
|
||||||
|
|
||||||
queryTmpl :=
|
queryTmpl :=
|
||||||
"SELECT %s," +
|
"SELECT %s," +
|
||||||
" %s as value" +
|
" %s as value" +
|
||||||
" FROM (%s)" +
|
" FROM (%s)" +
|
||||||
" WHERE isNaN(per_series_value) = 0" +
|
valueFilter +
|
||||||
" GROUP BY %s" +
|
" GROUP BY %s" +
|
||||||
" ORDER BY %s"
|
" ORDER BY %s"
|
||||||
|
|
||||||
|
@ -270,6 +270,10 @@ func PrepareTimeseriesFilterQuery(start, end int64, mq *v3.BuilderQuery) (string
|
|||||||
|
|
||||||
if fs != nil && len(fs.Items) != 0 {
|
if fs != nil && len(fs.Items) != 0 {
|
||||||
for _, item := range fs.Items {
|
for _, item := range fs.Items {
|
||||||
|
if item.Key.Key == "__value" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
toFormat := item.Value
|
toFormat := item.Value
|
||||||
op := v3.FilterOperator(strings.ToLower(strings.TrimSpace(string(item.Operator))))
|
op := v3.FilterOperator(strings.ToLower(strings.TrimSpace(string(item.Operator))))
|
||||||
if op == v3.FilterOperatorContains || op == v3.FilterOperatorNotContains {
|
if op == v3.FilterOperatorContains || op == v3.FilterOperatorNotContains {
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"go.signoz.io/signoz/pkg/query-service/app/metrics"
|
||||||
metricsV3 "go.signoz.io/signoz/pkg/query-service/app/metrics/v3"
|
metricsV3 "go.signoz.io/signoz/pkg/query-service/app/metrics/v3"
|
||||||
"go.signoz.io/signoz/pkg/query-service/app/metrics/v4/cumulative"
|
"go.signoz.io/signoz/pkg/query-service/app/metrics/v4/cumulative"
|
||||||
"go.signoz.io/signoz/pkg/query-service/app/metrics/v4/delta"
|
"go.signoz.io/signoz/pkg/query-service/app/metrics/v4/delta"
|
||||||
@ -19,6 +20,9 @@ import (
|
|||||||
// step is in seconds
|
// step is in seconds
|
||||||
func PrepareMetricQuery(start, end int64, queryType v3.QueryType, panelType v3.PanelType, mq *v3.BuilderQuery, options metricsV3.Options) (string, error) {
|
func PrepareMetricQuery(start, end int64, queryType v3.QueryType, panelType v3.PanelType, mq *v3.BuilderQuery, options metricsV3.Options) (string, error) {
|
||||||
|
|
||||||
|
if valFilter := metrics.AddMetricValueFilter(mq); valFilter != nil {
|
||||||
|
mq.MetricValueFilter = valFilter
|
||||||
|
}
|
||||||
start, end = common.AdjustedMetricTimeRange(start, end, mq.StepInterval, *mq)
|
start, end = common.AdjustedMetricTimeRange(start, end, mq.StepInterval, *mq)
|
||||||
|
|
||||||
var quantile float64
|
var quantile float64
|
||||||
|
@ -151,13 +151,20 @@ type NodeListResponse struct {
|
|||||||
Total int `json:"total"`
|
Total int `json:"total"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type NodeCountByCondition struct {
|
||||||
|
Ready int `json:"ready"`
|
||||||
|
NotReady int `json:"notReady"`
|
||||||
|
Unknown int `json:"unknown"`
|
||||||
|
}
|
||||||
|
|
||||||
type NodeListRecord struct {
|
type NodeListRecord struct {
|
||||||
NodeUID string `json:"nodeUID,omitempty"`
|
NodeUID string `json:"nodeUID,omitempty"`
|
||||||
NodeCPUUsage float64 `json:"nodeCPUUsage"`
|
NodeCPUUsage float64 `json:"nodeCPUUsage"`
|
||||||
NodeCPUAllocatable float64 `json:"nodeCPUAllocatable"`
|
NodeCPUAllocatable float64 `json:"nodeCPUAllocatable"`
|
||||||
NodeMemoryUsage float64 `json:"nodeMemoryUsage"`
|
NodeMemoryUsage float64 `json:"nodeMemoryUsage"`
|
||||||
NodeMemoryAllocatable float64 `json:"nodeMemoryAllocatable"`
|
NodeMemoryAllocatable float64 `json:"nodeMemoryAllocatable"`
|
||||||
Meta map[string]string `json:"meta"`
|
CountByCondition NodeCountByCondition `json:"countByCondition"`
|
||||||
|
Meta map[string]string `json:"meta"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type NamespaceListRequest struct {
|
type NamespaceListRequest struct {
|
||||||
@ -180,6 +187,7 @@ type NamespaceListRecord struct {
|
|||||||
NamespaceName string `json:"namespaceName"`
|
NamespaceName string `json:"namespaceName"`
|
||||||
CPUUsage float64 `json:"cpuUsage"`
|
CPUUsage float64 `json:"cpuUsage"`
|
||||||
MemoryUsage float64 `json:"memoryUsage"`
|
MemoryUsage float64 `json:"memoryUsage"`
|
||||||
|
CountByPhase PodCountByPhase `json:"countByPhase"`
|
||||||
Meta map[string]string `json:"meta"`
|
Meta map[string]string `json:"meta"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -770,6 +770,19 @@ type MetricTableHints struct {
|
|||||||
SamplesTableName string
|
SamplesTableName string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type MetricValueFilter struct {
|
||||||
|
Value float64
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MetricValueFilter) Clone() *MetricValueFilter {
|
||||||
|
if m == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &MetricValueFilter{
|
||||||
|
Value: m.Value,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type BuilderQuery struct {
|
type BuilderQuery struct {
|
||||||
QueryName string `json:"queryName"`
|
QueryName string `json:"queryName"`
|
||||||
StepInterval int64 `json:"stepInterval"`
|
StepInterval int64 `json:"stepInterval"`
|
||||||
@ -795,7 +808,8 @@ type BuilderQuery struct {
|
|||||||
ShiftBy int64
|
ShiftBy int64
|
||||||
IsAnomaly bool
|
IsAnomaly bool
|
||||||
QueriesUsedInFormula []string
|
QueriesUsedInFormula []string
|
||||||
MetricTableHints *MetricTableHints `json:"-"`
|
MetricTableHints *MetricTableHints `json:"-"`
|
||||||
|
MetricValueFilter *MetricValueFilter `json:"-"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *BuilderQuery) SetShiftByFromFunc() {
|
func (b *BuilderQuery) SetShiftByFromFunc() {
|
||||||
@ -859,6 +873,7 @@ func (b *BuilderQuery) Clone() *BuilderQuery {
|
|||||||
ShiftBy: b.ShiftBy,
|
ShiftBy: b.ShiftBy,
|
||||||
IsAnomaly: b.IsAnomaly,
|
IsAnomaly: b.IsAnomaly,
|
||||||
QueriesUsedInFormula: b.QueriesUsedInFormula,
|
QueriesUsedInFormula: b.QueriesUsedInFormula,
|
||||||
|
MetricValueFilter: b.MetricValueFilter.Clone(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user