package k8s import ( "fmt" monitoringv1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1" "github.com/spf13/cast" "gitlab.wodcloud.com/smart-operation/so-operation-api/src/common/conf" "gitlab.wodcloud.com/smart-operation/so-operation-api/src/pkg/beagle/constant" "k8s.io/apimachinery/pkg/util/intstr" "log" "testing" "time" ) var svc PrometheusRule var pr monitoringv1.PrometheusRule func init() { conf.Options = &conf.Config{} conf.Options.AweRestURL = "https://cloud.wodcloud.com/awecloud/rest" conf.Options.KubernetesToken = "380e3557499a13c4ec4aa11d7456bb45ef2303c1" header := make(map[string]string) header["Authorization"] = "Bearer " + conf.Options.KubernetesToken svc = PrometheusRule{Header: header} pr = monitoringv1.PrometheusRule{} alertRulesId := "45a50875-20fd-4d93-a7d5-c6790186ad97" // 预警规则id prometheusRuleName := GetPrometheusRuleName(alertRulesId) pr.Name = prometheusRuleName pr.Namespace = "beagle-monitoring" pr.Labels = AlertDefLabels } func TestRule(t *testing.T) { group := monitoringv1.RuleGroup{} groupInterval := monitoringv1.Duration("5m") group.Interval = &groupInterval rule1 := monitoringv1.Rule{} rule1.Alert = "kubernetes启动状态" group.Name = GetPrometheusRuleGroupName(rule1.Alert, string(*group.Interval)) rule1.Annotations = make(map[string]string) rule1.Annotations["value"] = "{{ $value }}" rule1.Annotations["message"] = "启动了" rule1.Expr = intstr.FromString(`up{endpoint="https", instance="192.168.1.244:6443", job="apiserver", namespace="default", service="kubernetes"} == 1`) ruleFor := monitoringv1.Duration("1m") rule1.For = &ruleFor rule1.Labels = map[string]string{ "severity": "warning", "risk_level": cast.ToString(constant.RiskLevelLow), "risk_level_name": constant.RiskLeveText(constant.RiskLevelLow), "source": "so-operation-api", "alert_rules_id": "83343ef6-4a99-47bd-abb4-bcff52feb2ec", } rule2 := monitoringv1.Rule{} rule2.Alert = "kubernetes启动状态" rule2.Annotations = make(map[string]string) rule2.Annotations["value"] = "{{ $value }}" rule2.Annotations["message"] = "启动了" rule2.Expr = intstr.FromString(`up{endpoint="https", instance="192.168.1.244:6443", job="apiserver", namespace="default", service="kubernetes"} == 0`) ruleFor2 := monitoringv1.Duration("1m") rule2.For = &ruleFor2 rule2.Labels = map[string]string{ "severity": "warning", "risk_level": cast.ToString(constant.RiskLevelModerate), "risk_level_name": constant.RiskLeveText(constant.RiskLevelModerate), "source": "so-operation-api", "alert_rules_id": "83343ef6-4a99-47bd-abb4-bcff52feb2ec", } group.Rules = append(group.Rules, rule1, rule2) pr.Spec.Groups = append(pr.Spec.Groups, group) err := svc.Create(&pr) if err != nil { log.Println("添加失败" + err.Error()) } else { log.Println("添加成功") } } func TestGet(t *testing.T) { // 获取对象 ruleObj, err := svc.Get(pr.Namespace, pr.Name) if err != nil { fmt.Println("获取失败" + err.Error()) } else { fmt.Println("获取成功") } log.Printf("ruleObj:%+v\n", ruleObj) } func TestUpdate(t *testing.T) { ruleObj, err := svc.Get(pr.Namespace, pr.Name) if err != nil { fmt.Println("获取失败" + err.Error()) } else { fmt.Println("获取成功") } // 更新 ruleObj.Name = "galileo-101" ruleObj.Spec.Groups[0].Rules[0].Alert = "请求次数大于10" ruleObj.Spec.Groups[0].Name = "2分钟组" ruleFor := monitoringv1.Duration("2m") ruleObj.Spec.Groups[0].Rules[0].For = &ruleFor ruleObj.Spec.Groups[0].Rules[0].Expr = intstr.FromString(`up{endpoint="https", instance="192.168.1.244:6443", job="apiserver", namespace="default", service="kubernetes"} == 0`) err = svc.Update(ruleObj) if err != nil { fmt.Println("更新失败" + err.Error()) } else { fmt.Println("更新成功") } } func TestDelete(t *testing.T) { // 删除 time.Sleep(time.Second * 10) err := svc.Delete(pr.Namespace, pr.Name) if err != nil { fmt.Println("删除失败" + err.Error()) } else { fmt.Println("删除成功") } }