未验证 提交 d30a9202 编写于 作者: M MrPresent-Han 提交者: GitHub

add log trace for segcore(#26277) (#26339)

Signed-off-by: NMrPresent-Han <chun.han@zilliz.com>
上级 f371ec03
...@@ -34,6 +34,9 @@ namespace jaeger = opentelemetry::exporter::jaeger; ...@@ -34,6 +34,9 @@ namespace jaeger = opentelemetry::exporter::jaeger;
namespace ostream = opentelemetry::exporter::trace; namespace ostream = opentelemetry::exporter::trace;
namespace otlp = opentelemetry::exporter::otlp; namespace otlp = opentelemetry::exporter::otlp;
static const int trace_id_size = 2 * opentelemetry::trace::TraceId::kSize;
static bool enable_trace = true;
void void
initTelementry(TraceConfig* config) { initTelementry(TraceConfig* config) {
std::unique_ptr<opentelemetry::sdk::trace::SpanExporter> exporter; std::unique_ptr<opentelemetry::sdk::trace::SpanExporter> exporter;
...@@ -50,6 +53,7 @@ initTelementry(TraceConfig* config) { ...@@ -50,6 +53,7 @@ initTelementry(TraceConfig* config) {
exporter = otlp::OtlpGrpcExporterFactory::Create(opts); exporter = otlp::OtlpGrpcExporterFactory::Create(opts);
} else { } else {
LOG_SEGCORE_INFO_ << "Empty Trace"; LOG_SEGCORE_INFO_ << "Empty Trace";
enable_trace = false;
} }
auto processor = auto processor =
trace_sdk::BatchSpanProcessorFactory::Create(std::move(exporter), {}); trace_sdk::BatchSpanProcessorFactory::Create(std::move(exporter), {});
...@@ -84,4 +88,39 @@ StartSpan(std::string name, TraceContext* parentCtx) { ...@@ -84,4 +88,39 @@ StartSpan(std::string name, TraceContext* parentCtx) {
return GetTracer()->StartSpan(name, opts); return GetTracer()->StartSpan(name, opts);
} }
thread_local std::shared_ptr<trace::Span> local_span;
void
SetRootSpan(std::shared_ptr<trace::Span> span) {
if (enable_trace) {
local_span = span;
}
}
void
CloseRootSpan() {
if (enable_trace) {
local_span = nullptr;
}
}
std::shared_ptr<trace::Span>
GetRootSpan() {
if (enable_trace && local_span != nullptr) {
return local_span;
}
return nullptr;
}
void
logTraceContext(const std::string& extended_info,
const std::shared_ptr<trace::Span> span) {
if (enable_trace && span != nullptr) {
char traceID[trace_id_size];
span->GetContext().trace_id().ToLowerBase16(
nostd::span<char, 2 * opentelemetry::trace::TraceId::kSize>{
&traceID[0], trace_id_size});
LOG_SEGCORE_INFO_ << extended_info << ", traceID:" << traceID;
}
}
} // namespace milvus::tracer } // namespace milvus::tracer
...@@ -42,4 +42,17 @@ GetTracer(); ...@@ -42,4 +42,17 @@ GetTracer();
std::shared_ptr<trace::Span> std::shared_ptr<trace::Span>
StartSpan(std::string name, TraceContext* ctx = nullptr); StartSpan(std::string name, TraceContext* ctx = nullptr);
void
logTraceContext(const std::string& extended_info,
std::shared_ptr<trace::Span> span);
void
SetRootSpan(std::shared_ptr<trace::Span> span);
void
CloseRootSpan();
std::shared_ptr<trace::Span>
GetRootSpan();
} // namespace milvus::tracer } // namespace milvus::tracer
...@@ -78,9 +78,12 @@ Search(CSegmentInterface c_segment, ...@@ -78,9 +78,12 @@ Search(CSegmentInterface c_segment,
c_placeholder_group); c_placeholder_group);
auto ctx = milvus::tracer::TraceContext{ auto ctx = milvus::tracer::TraceContext{
c_trace.traceID, c_trace.spanID, c_trace.flag}; c_trace.traceID, c_trace.spanID, c_trace.flag};
auto span = milvus::tracer::StartSpan("SegCoreSearch", &ctx);
auto span = milvus::tracer::StartSpan("SegcoreSearch", &ctx); milvus::tracer::logTraceContext(
"SegCore_SegmentSearch_SegmentID:" +
std::to_string(segment->get_segment_id()),
span);
milvus::tracer::SetRootSpan(span);
auto search_result = segment->Search(plan, phg_ptr); auto search_result = segment->Search(plan, phg_ptr);
if (!milvus::PositivelyRelated( if (!milvus::PositivelyRelated(
plan->plan_node_->search_info_.metric_type_)) { plan->plan_node_->search_info_.metric_type_)) {
...@@ -89,8 +92,8 @@ Search(CSegmentInterface c_segment, ...@@ -89,8 +92,8 @@ Search(CSegmentInterface c_segment,
} }
} }
*result = search_result.release(); *result = search_result.release();
span->End(); span->End();
milvus::tracer::CloseRootSpan();
return milvus::SuccessCStatus(); return milvus::SuccessCStatus();
} catch (std::exception& e) { } catch (std::exception& e) {
return milvus::FailureCStatus(UnexpectedError, e.what()); return milvus::FailureCStatus(UnexpectedError, e.what());
......
...@@ -95,7 +95,7 @@ func (it *insertTask) OnEnqueue() error { ...@@ -95,7 +95,7 @@ func (it *insertTask) OnEnqueue() error {
} }
func (it *insertTask) PreExecute(ctx context.Context) error { func (it *insertTask) PreExecute(ctx context.Context) error {
ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Insert-PreExecute") ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-Insert-PreExecute")
defer sp.End() defer sp.End()
it.result = &milvuspb.MutationResult{ it.result = &milvuspb.MutationResult{
...@@ -212,7 +212,7 @@ func (it *insertTask) PreExecute(ctx context.Context) error { ...@@ -212,7 +212,7 @@ func (it *insertTask) PreExecute(ctx context.Context) error {
} }
func (it *insertTask) Execute(ctx context.Context) error { func (it *insertTask) Execute(ctx context.Context) error {
ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-Insert-PreExecute") ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-Insert-Execute")
defer sp.End() defer sp.End()
tr := timerecord.NewTimeRecorder(fmt.Sprintf("proxy execute insert %d", it.ID())) tr := timerecord.NewTimeRecorder(fmt.Sprintf("proxy execute insert %d", it.ID()))
......
...@@ -20,10 +20,10 @@ import ( ...@@ -20,10 +20,10 @@ import (
"fmt" "fmt"
"sync" "sync"
"go.uber.org/zap"
"github.com/milvus-io/milvus/pkg/log" "github.com/milvus-io/milvus/pkg/log"
"github.com/milvus-io/milvus/pkg/util/tsoutil"
. "github.com/milvus-io/milvus/pkg/util/typeutil" . "github.com/milvus-io/milvus/pkg/util/typeutil"
"go.uber.org/zap"
) )
// Manager is the interface for tsafe manager. // Manager is the interface for tsafe manager.
...@@ -58,8 +58,9 @@ func (t *tSafeManager) WatchChannel(channel string) Listener { ...@@ -58,8 +58,9 @@ func (t *tSafeManager) WatchChannel(channel string) Listener {
} }
func (t *tSafeManager) Add(vChannel string, timestamp uint64) { func (t *tSafeManager) Add(vChannel string, timestamp uint64) {
ts, _ := tsoutil.ParseTS(timestamp)
log.Info("add tSafe done", log.Info("add tSafe done",
zap.String("channel", vChannel)) zap.String("channel", vChannel), zap.Time("timestamp", ts))
t.mu.Lock() t.mu.Lock()
defer t.mu.Unlock() defer t.mu.Unlock()
if _, ok := t.tSafes[vChannel]; !ok { if _, ok := t.tSafes[vChannel]; !ok {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册