@@ -530,7 +530,7 @@ func cloudWatch(ctx *ctx.Context, datasourceId, datasourceType string, rule mode
530530}
531531
532532func kubernetesEvent (ctx * ctx.Context , datasourceId , datasourceType string , rule models.AlertRule ) []string {
533- var externalLabels map [ string ] interface {}
533+ // 获取数据源实例信息
534534 datasourceObj , err := ctx .DB .Datasource ().GetInstance (datasourceId )
535535 if err != nil {
536536 logc .Errorf (ctx .Ctx , "获取数据源实例失败, 规则ID: %s, 规则名称: %s, 数据源ID: %s, 错误: %v" , rule .RuleId , rule .RuleName , datasourceId , err )
@@ -543,66 +543,70 @@ func kubernetesEvent(ctx *ctx.Context, datasourceId, datasourceType string, rule
543543 logc .Errorf (ctx .Ctx , "获取Kubernetes数据源客户端失败, 规则ID: %s, 规则名称: %s, 数据源ID: %s, 错误: %v" , rule .RuleId , rule .RuleName , datasourceId , err )
544544 return []string {}
545545 }
546- externalLabels = cli .(provider.KubernetesClient ).GetExternalLabels ()
547546
548- k8sEvent , err := cli .(provider.KubernetesClient ).GetWarningEvent (rule .KubernetesConfig .Reason , rule .KubernetesConfig .Scope , rule .KubernetesConfig .Filter )
547+ k8sClient := cli .(provider.KubernetesClient )
548+ externalLabels := k8sClient .GetExternalLabels ()
549+
550+ // 查询 Kubernetes 事件
551+ k8sEventMap , err := k8sClient .GetWarningEvent (rule .KubernetesConfig .Reason , rule .KubernetesConfig .Scope , rule .KubernetesConfig .Filter )
549552 if err != nil {
550- logc .Errorf (ctx .Ctx , "获取Kubernetes警告事件失败, 规则ID: %s, 规则名称: %s, 数据源ID: %s, 资源 : %s, 错误: %v" , rule .RuleId , rule .RuleName , datasourceId , rule .KubernetesConfig .Resource , err )
553+ logc .Errorf (ctx .Ctx , "获取Kubernetes警告事件失败, 规则ID: %s, 规则名称: %s, 数据源ID: %s, 原因 : %s, 错误: %v" , rule .RuleId , rule .RuleName , datasourceId , rule .KubernetesConfig .Reason , err )
551554 return []string {}
552555 }
553556
554- if k8sEvent == nil {
557+ // 无事件返回
558+ if len (k8sEventMap ) == 0 {
555559 return []string {}
556560 }
557561
558- var curFingerprints []string
559- for _ , items := range k8sEvent {
560- // 不满足阈值,跳过
561- if len (items ) < rule .KubernetesConfig .Value {
562- continue
563- }
562+ // 遍历事件组,评估并生成告警
563+ curFingerprints := make ([]string , 0 , len (k8sEventMap ))
564+ for _ , eventItems := range k8sEventMap {
565+ for _ , k8sEvent := range eventItems {
566+ fingerprint := k8sEvent .GetFingerprint ()
564567
565- // 取第一个作为代表生成告警
566- item := items [0 ]
568+ // 构建告警事件
569+ event := process .BuildEvent (rule , func () map [string ]interface {} {
570+ metric := k8sEvent .GetMetrics ()
571+ metric ["rule_name" ] = rule .RuleName
572+ metric ["severity" ] = rule .Severity
573+ metric ["fingerprint" ] = fingerprint
574+ for k , v := range externalLabels {
575+ metric [k ] = v
576+ }
577+ for k , v := range rule .ExternalLabels {
578+ metric [k ] = v
579+ }
580+ return metric
581+ })
567582
568- // 构造告警内容
569- fingerprint := item .GetFingerprint ()
570- event := process .BuildEvent (rule , func () map [string ]interface {} {
571- metric := item .GetMetrics ()
572- metric ["rule_name" ] = rule .RuleName
573- metric ["severity" ] = rule .Severity
574- metric ["fingerprint" ] = fingerprint
575- metric ["value" ] = len (items )
576- for ek , ev := range externalLabels {
577- metric [ek ] = ev
578- }
579- for ek , ev := range rule .ExternalLabels {
580- metric [ek ] = ev
583+ // 设置事件基本信息
584+ event .DatasourceId = datasourceId
585+ event .Fingerprint = fingerprint
586+ event .SearchQL = rule .KubernetesConfig .Resource
587+
588+ // 构建注释信息
589+ var msgList []string
590+ for _ , e := range eventItems {
591+ msg := strings .ReplaceAll (e .Message , "\" " , "'" )
592+ msgList = append (msgList , msg )
581593 }
582- return metric
583- })
584- event .DatasourceId = datasourceId
585- event .Fingerprint = fingerprint
586- event .SearchQL = rule .KubernetesConfig .Resource
587-
588- // 拼接注释信息
589- var msgList []string
590- for _ , e := range items {
591- msg := strings .ReplaceAll (e .Message , "\" " , "'" )
592- msgList = append (msgList , msg )
593- }
594- event .Annotations = fmt .Sprintf (
595- "- 数据源: %s\n - 命名空间: %s\n - 资源类型: %s\n - 资源名称: %s\n - 事件类型: %s\n - 事件详情:\n %s" ,
596- datasourceObj .Name ,
597- item .Namespace ,
598- item .InvolvedObject .Kind ,
599- item .InvolvedObject .Name ,
600- item .Reason ,
601- strings .Join (msgList , "\n " ),
602- )
603594
604- curFingerprints = append (curFingerprints , event .Fingerprint )
605- process .PushEventToFaultCenter (ctx , & event )
595+ event .Annotations = fmt .Sprintf (
596+ "- 数据源: %s\n - 命名空间: %s\n - 资源类型: %s\n - 资源名称: %s\n - 事件类型: %s\n - 事件详情:\n %s" ,
597+ datasourceObj .Name ,
598+ k8sEvent .Namespace ,
599+ k8sEvent .InvolvedObject .Kind ,
600+ k8sEvent .InvolvedObject .Name ,
601+ k8sEvent .Reason ,
602+ strings .Join (msgList , "\n " ),
603+ )
604+
605+ // 推送到故障中心
606+ process .PushEventToFaultCenter (ctx , & event )
607+ curFingerprints = append (curFingerprints , fingerprint )
608+ }
609+
606610 }
607611
608612 return curFingerprints
0 commit comments