example/metric_agg/metric_agg_example.go (134 lines of code) (raw):

package main import ( "encoding/json" "fmt" sls "github.com/aliyun/aliyun-log-go-sdk" ) func crud(client *sls.Client, sourceProject string, aggRules *sls.MetricAggRules, testId string) { err := client.CreateMetricAggRules(sourceProject, aggRules) if err != nil { panic(err) } listAggRules, err := client.ListMetricAggRules(sourceProject, 0, 10) if err != nil { panic(err) } listAggRulesJson, _ := json.Marshal(listAggRules) fmt.Println(string(listAggRulesJson)) err = client.UpdateMetricAggRules(sourceProject, aggRules) if err != nil { panic(err) } newAggRules, err := client.GetMetricAggRules(sourceProject, testId) if err != nil { panic(err) } newAggRulesJson, _ := json.Marshal(newAggRules) fmt.Println(string(newAggRulesJson)) err = client.DeleteMetricAggRules(sourceProject, testId) if err != nil { panic(err) } } func sqlConfig(accessKeyID string, accessKeySecret string, testId string) *sls.MetricAggRules { aggRuleItem := &sls.MetricAggRuleItem{ Name: testId, QueryType: sls.MetricAggRulesSQL, Query: "* | select max(__time__) as time, COUNT_if(Status < 500) as success, count_if(Status >= 500) as fail, count(1) as total, InvokerUid as aliuid, Project as project, LogStore as logstore from log group by InvokerUid, Project, LogStore limit 100000", TimeName: "time", MetricNames: []string{ "success", "fail", "total", }, LabelNames: map[string]string{ "aliuid": "aliuid", "logstore": "logstore", "project": "project", }, BeginUnixTime: 1610506297, EndUnixTime: -1, Interval: 30, DelaySeconds: 30, } aggRuleItem1 := &sls.MetricAggRuleItem{ Name: "testId2", QueryType: sls.MetricAggRulesSQL, Query: "* | select max(__time__) as time, COUNT_if(Status < 300) as ok, count_if(Status >= 300) as not_ok, Method as method,UserAgent as agent from log group by method, agent limit 100000", TimeName: "time", MetricNames: []string{ "ok", "not_ok", }, LabelNames: map[string]string{ "method": "method", "agent": "agent", }, BeginUnixTime: 1610506297, EndUnixTime: -1, Interval: 30, DelaySeconds: 30, } aggRules := &sls.MetricAggRules{ ID: testId, Name: testId, Desc: "测试CreateMetricAggRules", SrcStore: "internal-operation_log", SrcAccessKeyID: accessKeyID, SrcAccessKeySecret: accessKeySecret, DestEndpoint: "cn-hangzhou-intranet.log.aliyuncs.com", DestProject: "test-hangzhou-b", DestStore: "test", DestAccessKeyID: accessKeyID, DestAccessKeySecret: accessKeySecret, AggRules: []sls.MetricAggRuleItem{*aggRuleItem, *aggRuleItem1}, } return aggRules } func promqlConfig(accessKeyID string, accessKeySecret string, testId string) *sls.MetricAggRules { aggRuleItem := &sls.MetricAggRuleItem{ Name: testId, QueryType: sls.MetricAggRulesPromQL, Query: "* | SELECT promql_query('sum(sum_over_time(total[1m]))') FROM metrics limit 1000", TimeName: "time", MetricNames: []string{ "total_count", }, LabelNames: map[string]string{}, BeginUnixTime: 1610433565, EndUnixTime: -1, Interval: 60, DelaySeconds: 60, } aggRules := &sls.MetricAggRules{ ID: testId, Name: testId, Desc: "测试CreateMetricAggRules", SrcStore: "test", SrcAccessKeyID: accessKeyID, SrcAccessKeySecret: accessKeySecret, DestEndpoint: "cn-hangzhou-intranet.log.aliyuncs.com", DestProject: "test-hangzhou-b", DestStore: "test2", DestAccessKeyID: accessKeyID, DestAccessKeySecret: accessKeySecret, AggRules: []sls.MetricAggRuleItem{*aggRuleItem}, } return aggRules } func main() { accessKeyID := "" accessKeySecret := "" sourceProject := "k8s-log-cdc990939f2f547e883a4cb9236e85872" client := &sls.Client{ Endpoint: "cn-hangzhou.log.aliyuncs.com", AccessKeyID: accessKeyID, AccessKeySecret: accessKeySecret, } testId := "metric_agg_rules1" aggRules := sqlConfig(accessKeyID, accessKeySecret, testId) crud(client, sourceProject, aggRules, testId) testId = "metric_agg_rules2" aggRules = promqlConfig(accessKeyID, accessKeySecret, testId) crud(client, sourceProject, aggRules, testId) }