From b639fd66b4a71093c0b2f9a8abec7352ab5e6acc Mon Sep 17 00:00:00 2001 From: aoiasd <45024769+aoiasd@users.noreply.github.com> Date: Fri, 8 Dec 2023 02:00:36 +0800 Subject: [PATCH] fix: [Cherry-pick] accesslog can not print search expression (#28931) relate: https://github.com/milvus-io/milvus/issues/28893 pr: https://github.com/milvus-io/milvus/pull/28899 --------- Signed-off-by: aoiasd --- configs/milvus.yaml | 8 ++++---- internal/proxy/accesslog/info.go | 17 ++++++++++------- internal/proxy/accesslog/info_test.go | 20 +++++++++++++++++++- pkg/util/paramtable/component_param.go | 2 +- 4 files changed, 34 insertions(+), 13 deletions(-) diff --git a/configs/milvus.yaml b/configs/milvus.yaml index 6a694a8b92..08b34cd6d8 100644 --- a/configs/milvus.yaml +++ b/configs/milvus.yaml @@ -200,18 +200,18 @@ proxy: ginLogging: true maxTaskNum: 1024 # max task number of proxy task queue accessLog: - enable: true + enable: false # Log filename, set as "" to use stdout. - filename: "" + # filename: "" # define formatters for access log by XXX:{format: XXX, method:[XXX,XXX]} formatters: # "base" formatter could not set methods # all method will use "base" formatter default base: # will not print access log if set as "" - format: "[$time_now] [ACCESS] <$user_name: $user_addr> $method_name [status: $method_status] [code: $error_code] [msg: $error_msg] [traceID: $trace_id] [timeCost: $time_cost]" + format: "[$time_now] [ACCESS] <$user_name: $user_addr> $method_name [status: $method_status] [code: $error_code] [sdk: $sdk_version] [msg: $error_msg] [traceID: $trace_id] [timeCost: $time_cost]" query: - format: "[$time_now] [ACCESS] <$user_name: $user_addr> $method_name [status: $method_status] [code: $error_code] [msg: $error_msg] [traceID: $trace_id] [timeCost: $time_cost] [database: $database_name] [collection: $collection_name] [partitions: $partition_name] [expr: $method_expr]" + format: "[$time_now] [ACCESS] <$user_name: $user_addr> $method_name [status: $method_status] [code: $error_code] [sdk: $sdk_version] [msg: $error_msg] [traceID: $trace_id] [timeCost: $time_cost] [database: $database_name] [collection: $collection_name] [partitions: $partition_name] [expr: $method_expr]" # set formatter owners by method name(method was all milvus external interface) # all method will use base formatter default # one method only could use one formatter diff --git a/internal/proxy/accesslog/info.go b/internal/proxy/accesslog/info.go index 488347447d..68ed4eed26 100644 --- a/internal/proxy/accesslog/info.go +++ b/internal/proxy/accesslog/info.go @@ -88,11 +88,8 @@ func (i *GrpcAccessInfo) SetResult(resp interface{}, err error) { func (i *GrpcAccessInfo) Get(keys ...string) []string { result := []string{} - metricMap := map[string]string{} for _, key := range keys { - if value, ok := metricMap[key]; ok { - result = append(result, value) - } else if getFunc, ok := metricFuncMap[key]; ok { + if getFunc, ok := metricFuncMap[key]; ok { result = append(result, getFunc(i)) } } @@ -108,6 +105,7 @@ func (i *GrpcAccessInfo) Write() bool { if !ok { return false } + _, err := _globalW.Write([]byte(formatter.Format(i))) return err == nil } @@ -256,10 +254,15 @@ func getPartitionName(i *GrpcAccessInfo) string { func getExpr(i *GrpcAccessInfo) string { expr, ok := requestutil.GetExprFromRequest(i.req) - if !ok { - return unknownString + if ok { + return expr.(string) } - return expr.(string) + + dsl, ok := requestutil.GetDSLFromRequest(i.req) + if ok { + return dsl.(string) + } + return unknownString } func getSdkVersion(i *GrpcAccessInfo) string { diff --git a/internal/proxy/accesslog/info_test.go b/internal/proxy/accesslog/info_test.go index 7c9fbffe61..873b0fc5e8 100644 --- a/internal/proxy/accesslog/info_test.go +++ b/internal/proxy/accesslog/info_test.go @@ -45,7 +45,7 @@ type GrpcAccessInfoSuite struct { info *GrpcAccessInfo } -func (s *GrpcAccessInfoSuite) SetupSuite() { +func (s *GrpcAccessInfoSuite) SetupTest() { s.username = "test-user" s.traceID = "test-trace" @@ -130,6 +130,24 @@ func (s *GrpcAccessInfoSuite) TestSdkInfo() { s.Equal(info.SdkType+"-"+info.SdkVersion, result[0]) } +func (s *GrpcAccessInfoSuite) TestExpression() { + result := s.info.Get("$method_expr") + s.Equal(unknownString, result[0]) + + testExpr := "test" + s.info.req = &milvuspb.QueryRequest{ + Expr: testExpr, + } + result = s.info.Get("$method_expr") + s.Equal(testExpr, result[0]) + + s.info.req = &milvuspb.SearchRequest{ + Dsl: testExpr, + } + result = s.info.Get("$method_expr") + s.Equal(testExpr, result[0]) +} + func TestGrpcAccssInfo(t *testing.T) { suite.Run(t, new(GrpcAccessInfoSuite)) } diff --git a/pkg/util/paramtable/component_param.go b/pkg/util/paramtable/component_param.go index 3f2980f58e..ef5a2a6adf 100644 --- a/pkg/util/paramtable/component_param.go +++ b/pkg/util/paramtable/component_param.go @@ -1062,7 +1062,7 @@ please adjust in embedded Milvus: false`, p.AccessLog.Filename = ParamItem{ Key: "proxy.accessLog.filename", Version: "2.2.0", - DefaultValue: "milvus_access_log.log", + DefaultValue: "", Doc: "Log filename, leave empty to use stdout.", Export: true, }