Hello,
I have some issues setting up grpc++ and Opencensus. Before anything else, I have built grpc_opencensus_plugin(and its dependencies) with Cmake. Could I have missed something regarding some kind of static init? Dynamic linking? Anyway, the prometheus stats are correctly exported, but I can not get the traces to work(both stdout and zipkin). The traces are correctly logged/exported, but they always have the same “Parent SpanId: 30c6ffffff7f0000”. Based on the stacktrace below, I can confirm one of CensusContext’s constructors is indeed called for each request, but it calls StartSpanWithRemoteParent instead of StartSpan. The result is that in zipkin, I basically have only one “meta span” for the whole duration of the server. That span is typically 200-300s, depending on how often I restart the server(local dev server). Example: I start something in the client, a span with 2-3 requests appears in zipkin. Then 5 minutes later, I do something else client side and the same span will be modified, and now have a duration of 300s. grpc::CensusContext::CensusContext(grpc::CensusContext * this, > absl::string_view name, const opencensus::trace::SpanContext & parent_ctxt) > (....grpc/src/cpp/ext/filters/census/context.h:54) > > grpc::GenerateServerContext(absl::string_view tracing, absl::string_view > stats, absl::string_view primary_role, absl::string_view method, > grpc::CensusContext * context) > (....grpc/src/cpp/ext/filters/census/context.cc:34) > > grpc::CensusServerCallData::OnDoneRecvInitialMetadataCb(void * user_data, > grpc_error * error) > (....grpc/src/cpp/ext/filters/census/server_filter.cc:113) > > exec_ctx_run(grpc_closure * closure, grpc_error * error) > (....grpc/src/core/lib/iomgr/exec_ctx.cc:40) > > grpc_closure_run(const char * file, int line, grpc_closure * c, grpc_error > * error) (....grpc/src/core/lib/iomgr/closure.h:258) > > recv_initial_metadata_ready(void * arg, grpc_error * error) > (....grpc/src/core/ext/filters/deadline/deadline_filter.cc:298) > > exec_ctx_run(grpc_closure * closure, grpc_error * error) > (....grpc/src/core/lib/iomgr/exec_ctx.cc:40) > > grpc_closure_run(const char * file, int line, grpc_closure * c, grpc_error > * error) (....grpc/src/core/lib/iomgr/closure.h:258) > > hs_recv_initial_metadata_ready(void * user_data, grpc_error * err) > (....grpc/src/core/ext/filters/http/server/http_server_filter.cc:289) > > exec_ctx_run(grpc_closure * closure, grpc_error * error) > (....grpc/src/core/lib/iomgr/exec_ctx.cc:40) > > grpc_core::ExecCtx::Flush(grpc_core::ExecCtx * this) > (....grpc/src/core/lib/iomgr/exec_ctx.cc:134) > > pollset_work(grpc_pollset * pollset, grpc_pollset_worker ** worker_hdl, > grpc_millis deadline) (....grpc/src/core/lib/iomgr/ev_epollex_linux.cc:1195) > > pollset_work(grpc_pollset * pollset, grpc_pollset_worker ** worker, > grpc_millis deadline) (....grpc/src/core/lib/iomgr/ev_posix.cc:313) > > grpc_pollset_work(grpc_pollset * pollset, grpc_pollset_worker ** worker, > grpc_millis deadline) (....grpc/src/core/lib/iomgr/pollset.cc:48) > > cq_next(grpc_completion_queue * cq, gpr_timespec deadline, void * > reserved) (....grpc/src/core/lib/surface/completion_queue.cc:1030) > > grpc_completion_queue_next(grpc_completion_queue * cq, gpr_timespec > deadline, void * reserved) > (....grpc/src/core/lib/surface/completion_queue.cc:1106) > > grpc::CompletionQueue::AsyncNextInternal(grpc::CompletionQueue * this, > void ** tag, bool * ok, gpr_timespec deadline) > (....grpc/src/cpp/common/completion_queue_cc.cc:56) > > grpc::CompletionQueue::Next(grpc::CompletionQueue * this, void ** tag, > bool * ok) (....grpc/include/grpcpp/impl/codegen/completion_queue.h:171) > > ServerImpl::HandleRpcs(ServerImpl * this) > (.../grpc_servers/api_server_async.cpp:105) > > ServerImpl::Run(ServerImpl * this, const std::__cxx11::string & > server_address) (.../grpc_servers/api_server_async.cpp:69) > What can I do to have 1 span per request? Should I instrument the route manually? But in that case what is the point of the census plugin? Should this come from the client? PS: I don’t know if that is relevant, but I’m using the async routes(unary, not streaming). PS2: the stats(prometheus) works fine PS3: client is grpc-java, android -- You received this message because you are subscribed to the Google Groups "grpc.io" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/grpc-io. To view this discussion on the web visit https://groups.google.com/d/msgid/grpc-io/bf4b62d5-7aac-45d8-8363-ab919ead45ba%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
