Skip to content

Commit 0fbef02

Browse files
author
tangjiawei
committed
#830 自定义模版生成不了阈值告警bug修复
1 parent 8dd7ca2 commit 0fbef02

File tree

3 files changed

+41
-11
lines changed

3 files changed

+41
-11
lines changed

monitor-server/api/v2/monitor/metric.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ func QueryMetricTagValue(c *gin.Context) {
292292
continue
293293
}
294294
// 如果该指标为自定义类型的业务配置创建,tags内容: tags="test_service_code=addUser,test_retcode=200",需要做特殊解析处理
295-
if logType == "custom" && seriesMap["tags"] != "" {
295+
if logType == models.LogMonitorJsonType && seriesMap["tags"] != "" {
296296
seriesMap = datasource.ResetPrometheusMetricMap(seriesMap)
297297
}
298298
if tmpTagValue, ok := seriesMap[v]; ok {

monitor-server/services/db/alarm_strategy.go

+39-9
Original file line numberDiff line numberDiff line change
@@ -736,6 +736,8 @@ func buildRuleFileContentNew(ruleFileName, guidExpr, addressExpr, ipExpr string,
736736
}
737737

738738
func buildStrategyAlarmRuleExpr(guidExpr, addressExpr, ipExpr string, strategy *models.AlarmStrategyMetricObj) {
739+
var logType string
740+
var err error
739741
if strings.Contains(strategy.MetricExpr, "$address") {
740742
if strings.Contains(addressExpr, "|") {
741743
strategy.MetricExpr = strings.Replace(strategy.MetricExpr, "=\"$address\"", "=~\""+addressExpr+"\"", -1)
@@ -763,18 +765,35 @@ func buildStrategyAlarmRuleExpr(guidExpr, addressExpr, ipExpr string, strategy *
763765
strategy.MetricExpr = strings.ReplaceAll(strategy.MetricExpr, "$ip", ipExpr)
764766
}
765767
}
768+
// 看指标是否为 业务配置过来的,查询业务配置类型,自定义类型需要特殊处理 tags,tags="test_service_code=deleteUser,test_retcode=304"
769+
if logType, err = GetLogTypeByMetric(strategy.Metric); err != nil {
770+
log.Logger.Error("GetLogTypeByMetric err", log.Error(err))
771+
}
766772
if len(strategy.Tags) > 0 {
767-
for _, tagObj := range strategy.Tags {
768-
tagSourceString := "$t_" + tagObj.TagName
769-
if strings.Contains(strategy.MetricExpr, tagSourceString) {
770-
if len(tagObj.TagValue) == 0 {
771-
strategy.MetricExpr = strings.Replace(strategy.MetricExpr, "=\""+tagSourceString+"\"", "=~\".*\"", -1)
773+
if logType == models.LogMonitorCustomType {
774+
originPromQl := strategy.MetricExpr
775+
// 原表达式: node_log_metric_monitor_value{key="key",agg="max",service_group="log_sys",tags="$t_tags"}
776+
// 正则字符串匹配 替换成 node_log_metric_monitor_value{key="key",agg="max",service_group="log_sys",tags!~".*test_service_code=addUser.*"}
777+
for i, tagObj := range strategy.Tags {
778+
if i == 0 {
779+
strategy.MetricExpr = getTagPromQl(convertMetricTag2Dto(tagObj), originPromQl)
772780
} else {
773-
tmpEqual := "=~"
774-
if tagObj.Equal == "notin" {
775-
tmpEqual = "!~"
781+
strategy.MetricExpr = "(" + strategy.MetricExpr + ") and (" + getTagPromQl(convertMetricTag2Dto(tagObj), originPromQl) + ")"
782+
}
783+
}
784+
} else {
785+
for _, tagObj := range strategy.Tags {
786+
tagSourceString := "$t_" + tagObj.TagName
787+
if strings.Contains(strategy.MetricExpr, tagSourceString) {
788+
if len(tagObj.TagValue) == 0 {
789+
strategy.MetricExpr = strings.Replace(strategy.MetricExpr, "=\""+tagSourceString+"\"", "=~\".*\"", -1)
790+
} else {
791+
tmpEqual := "=~"
792+
if tagObj.Equal == "notin" {
793+
tmpEqual = "!~"
794+
}
795+
strategy.MetricExpr = strings.Replace(strategy.MetricExpr, "=\""+tagSourceString+"\"", tmpEqual+"\""+strings.Join(tagObj.TagValue, "|")+"\"", -1)
776796
}
777-
strategy.MetricExpr = strings.Replace(strategy.MetricExpr, "=\""+tagSourceString+"\"", tmpEqual+"\""+strings.Join(tagObj.TagValue, "|")+"\"", -1)
778797
}
779798
}
780799
}
@@ -784,6 +803,17 @@ func buildStrategyAlarmRuleExpr(guidExpr, addressExpr, ipExpr string, strategy *
784803
}
785804
}
786805

806+
func convertMetricTag2Dto(tag *models.MetricTag) *models.TagDto {
807+
if tag == nil {
808+
return &models.TagDto{}
809+
}
810+
return &models.TagDto{
811+
TagName: tag.TagName,
812+
Equal: tag.Equal,
813+
TagValue: tag.TagValue,
814+
}
815+
}
816+
787817
func copyStrategyListNew(inputs []*models.AlarmStrategyMetricObj) (result []*models.AlarmStrategyMetricObj) {
788818
result = []*models.AlarmStrategyMetricObj{}
789819
for _, strategy := range inputs {

monitor-server/services/db/dashboard.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ func ReplacePromQlKeyword(promQl, metric string, host *m.EndpointNewTable, tagLi
210210
log.Logger.Error("GetLogTypeByMetric err", log.Error(err))
211211
}
212212
if len(tagList) > 0 {
213-
if logType == "custom" {
213+
if logType == m.LogMonitorCustomType {
214214
originPromQl := promQl
215215
// 原表达式: node_log_metric_monitor_value{key="key",agg="max",service_group="log_sys",tags="$t_tags"}
216216
// 正则字符串匹配 替换成 node_log_metric_monitor_value{key="key",agg="max",service_group="log_sys",tags!~".*test_service_code=addUser.*"}

0 commit comments

Comments
 (0)