On Fri, Oct 19, 2018 at 1:55 AM 'Daniel Schierbeck' via Ruby on Rails: Core <rubyonrails-core@googlegroups.com> wrote:
> On Thu, Oct 18, 2018 at 9:24 PM Jeremy Daer <jeremyd...@gmail.com> wrote: > >> On Thu, Oct 18, 2018 at 2:52 AM 'Daniel Schierbeck' via Ruby on Rails: >> Core <rubyonrails-core@googlegroups.com> wrote: >> >>> Looks like OpenCensus already has support for development mode UIs, >>> currently only for Java and Go though: >>> https://opencensus.io/core-concepts/z-pages/ >>> >> >> This is a great starting point. Rails dev can level up from there. >> >> Have you deployed an OpenCensus integration to production? At least the >>> metrics part looks pretty advanced, maybe too much so. >>> >> >> Not in production. We have a branch of Basecamp that exports to >> Stackdriver. In production, we'd prefer to use local agents and collectors >> rather than export directly to a vendor: >> https://github.com/census-instrumentation/opencensus-service >> > > Sounds like you are farther ahead than us then – we're pushing stuff > directly to Datadog right now. > Your instrumentation is likely further along since Datadog supports tagging and ingests traces :) How about this as a starting point: I try to add proper AS::N > instrumentation to the places where monkey patches are currently used, e.g. > middleware execution. I'll CC you on the PRs. Maybe we can stay in touch > regarding your experience with OpenCensus in production, what, if anything, > would be needed in order to "natively" support it, and anything else you > might think relevant? It sounds like it's too premature to add a dependency > on the opencensus gem and push traces from Rails itself, unless you think > we're ready? > Great path; agreed. One problem is that we're unlikely to be able to run on Rails master in > production, so there's little production feedback I can give. > A "rails-canary" branch could be enough! > > >> >> >>> >>> Cheers, >>> Daniel >>> >>> On Thu, Oct 18, 2018 at 11:26 AM Daniel Schierbeck < >>> dschierb...@zendesk.com> wrote: >>> >>>> On Wed, Oct 17, 2018 at 7:26 PM Jeremy Daer <jeremyd...@gmail.com> >>>> wrote: >>>> >>>>> Hey Daniel, >>>>> >>>>> Absolutely! We're looking at OpenCensus (https://opencensus.io) >>>>> integration, which seems to be leapfrogging OpenTracing in standardization >>>>> and adoption. >>>>> >>>> >>>> So now there are two standards? 😬 >>>> Is there clarity on where things are going? The point of a standard >>>> would be that we'd only need to support *one*, and not have an extra layer >>>> of abstraction. >>>> >>>> >>>>> >>>>> Current Ruby integration, including early Rack and Rails support: >>>>> https://github.com/census-instrumentation/opencensus-ruby >>>>> >>>>> Datadog exporter: >>>>> https://github.com/DataDog/opencensus-go-exporter-datadog >>>>> Stackdriver exporter: >>>>> https://github.com/census-ecosystem/opencensus-ruby-exporter-stackdriver >>>>> Zipkin/Jaeger exporter: >>>>> https://github.com/census-ecosystem/opencensus-ruby-exporter-zipkin >>>>> Or use a local collector/relay: >>>>> https://github.com/census-instrumentation/opencensus-service >>>>> >>>> >>>> Compared to OpenTracing, is the ecosystem mature enough to warrant us >>>> going all-in on this? I definitely see the theoretical point of a unified >>>> stats and trace standard, especially seeing as Statsd has fragmented >>>> somewhat, but is it a horse we want to bet on? I'm fine with either, as >>>> long as there are working, scalable solutions *today* for getting things >>>> working in a variety of languages and without duct tape. For instance, it >>>> seems like the Datadog exporter only supports Go? >>>> >>>> >>>>> Production use is fantastic, but I'd particularly love to see a >>>>> collector and built-in visualization for local app development and tests. >>>>> >>>> >>>> Me too 😄 but that's probably not going to be my initial focus, I'm >>>> meanly looking at the instrumentation side of things. >>>> >>>> >>>> We have an existing ActiveSupport::Notifications API which works much >>>>> like typical parent-span instrumentation, but it doesn't propagate or >>>>> report trace context. >>>>> >>>> For deeper Rails integration, we could adapt the AS::N design to more >>>>> directly map to OpenCensus, or introduce ActiveSupport::Tracing if there's >>>>> too much mismatch or compatibility concern. >>>>> >>>> >>>> I've done a bunch of work on AS::N in the past (I'm the one who created >>>> the original ActiveSupport::Subscriber base class) and feel pretty >>>> confident that it can form the basis for this work. We'd probably want to >>>> instrument more places, e.g. each middleware invocation and maybe filters >>>> in controllers, but otherwise it's a good starting point. >>>> >>>> I do think we need to have a specific mapping from AS::N to the tracing >>>> backend, selecting which payload keys should be propagated and maybe >>>> formatting some of the values, so it's probably not just a matter of >>>> copying everything verbatim. It sounds like you're doing the verbatim thing >>>> at Basecamp though – how is that working out? Would you be in favor of >>>> that? >>>> >>>> We've seen issues when tracing gets too granular or too much data is >>>> captured, so I'd like to be a bit conservative. >>>> >>>> >>>>> That'd allow these libraries to plug in directly without needing to >>>>> carefully instrument Rails on their own. Rails should be able to >>>>> participate in distributed tracing out of the box, report stats out of the >>>>> box, show traces and stats in development mode, and flip between >>>>> production >>>>> APM vendors without specialized integration. >>>>> >>>> >>>> Yup, that's my goal as well. APM vendors should not compete on their >>>> quality of instrumentation, but on the quality of their product. One thing >>>> I want to emphasize though is that I think we need to push for >>>> standardization *beyond* Rails. AS::N could have been a great standard if >>>> it wasn't tied to AS – it hasn't seen widespread adoption because gem >>>> authors are unwilling to add a dependency on AS, I think. So we should >>>> think holistically about the entire ecosystem and what would make sense for >>>> Ruby as a whole. >>>> >>>> >>>>> At Basecamp, we have a home-grown StatsD setup, similar to Datadog, >>>>> that hooks Active Support notifications ( >>>>> https://signalvnoise.com/posts/3091-pssst-your-rails-application-has-a-secret-to-tell-you). >>>>> We >>>>> also parse logs from Kafka to reconstruct some traces. We'd love to >>>>> extract >>>>> this and rely on Rails to natively export traces and stats. >>>>> >>>> >>>>> I'd love to hear what you're doing at Zendesk, where you're headed, >>>>> and whether this sketch aligns well. And anyone else who's working in this >>>>> area! >>>>> >>>> >>>> We're currently all-in on Datadog, and I've helped improve their >>>> instrumentation. However, I keep running into ad-hoc instrumentation being >>>> brittle, which is why I'm interested in first-class support. I think the >>>> only sustainable path forward is that gems natively support some form of >>>> tracing, either through AS::N (which would need to be extracted) or >>>> directly with a standardized tracing gem. >>>> >>>> How would you feel about extracting AS::N, actually? Then gems could >>>> adopt it for pub/sub and it would be a lot simpler to plug in a tracing >>>> subscriber. >>>> >>>> >>>>> >>>>> Best, >>>>> Jeremy >>>>> >>>>> On Wed, Oct 17, 2018 at 5:58 AM 'Daniel Schierbeck' via Ruby on Rails: >>>>> Core <rubyonrails-core@googlegroups.com> wrote: >>>>> >>>>>> With the advent of OpenTracing (https://opentracing.io) along with >>>>>> an official Ruby library ( >>>>>> https://github.com/opentracing/opentracing-ruby) as well as growing >>>>>> industry support (e.g. >>>>>> https://www.datadoghq.com/blog/opentracing-datadog-cncf/ and >>>>>> http://blog.scoutapp.com/articles/2018/01/17/tutorial-distributed-tracing-in-ruby-with-opentracing), >>>>>> would it make sense to provide native tracing of Rails using the >>>>>> opentracing-ruby library? >>>>>> >>>>>> At Zendesk we're using Datadog's proprietary tracing API, which >>>>>> monkey patches Rails and other libraries in order to trace key >>>>>> interactions. I think a more sustainable approach would be for libraries >>>>>> to >>>>>> include tracing support out of the box using the standardized OpenTracing >>>>>> APIs. It is then merely a matter of hooking up e.g. the Datadog trace >>>>>> collector in order to get a working tracing setup. >>>>>> >>>>>> If there's interest in this I'd be willing to contribute code. I've >>>>>> done a bunch of working in order to trace various aspects of Rails, >>>>>> including Rack middleware and before/after filters, but without native >>>>>> support, these implementations are brittle and prone to breakage when >>>>>> internal Rails APIs change. >>>>>> >>>>>> I'd love to hear your thoughts on this. >>>>>> >>>>>> Cheers, >>>>>> Daniel Schierbeck >>>>>> >>>>>> -- >>>>>> >>>>> You received this message because you are subscribed to the Google >>>>>> Groups "Ruby on Rails: Core" group. >>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>> send an email to rubyonrails-core+unsubscr...@googlegroups.com. >>>>> >>>>> >>>>>> To post to this group, send email to >>>>>> rubyonrails-core@googlegroups.com. >>>>>> Visit this group at https://groups.google.com/group/rubyonrails-core. >>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>> >>>>> -- >>>>> You received this message because you are subscribed to a topic in the >>>>> Google Groups "Ruby on Rails: Core" group. >>>>> To unsubscribe from this topic, visit >>>>> https://groups.google.com/d/topic/rubyonrails-core/qJlL_uVxsnU/unsubscribe >>>>> . >>>>> To unsubscribe from this group and all its topics, send an email to >>>>> rubyonrails-core+unsubscr...@googlegroups.com. >>>>> To post to this group, send email to rubyonrails-core@googlegroups.com >>>>> . >>>>> Visit this group at https://groups.google.com/group/rubyonrails-core. >>>>> For more options, visit https://groups.google.com/d/optout. >>>>> >>>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Ruby on Rails: Core" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to rubyonrails-core+unsubscr...@googlegroups.com. >>> To post to this group, send email to rubyonrails-core@googlegroups.com. >>> Visit this group at https://groups.google.com/group/rubyonrails-core. >>> For more options, visit https://groups.google.com/d/optout. >>> >> -- >> You received this message because you are subscribed to a topic in the >> Google Groups "Ruby on Rails: Core" group. >> To unsubscribe from this topic, visit >> https://groups.google.com/d/topic/rubyonrails-core/qJlL_uVxsnU/unsubscribe >> . >> To unsubscribe from this group and all its topics, send an email to >> rubyonrails-core+unsubscr...@googlegroups.com. >> To post to this group, send email to rubyonrails-core@googlegroups.com. >> Visit this group at https://groups.google.com/group/rubyonrails-core. >> For more options, visit https://groups.google.com/d/optout. >> > -- > You received this message because you are subscribed to the Google Groups > "Ruby on Rails: Core" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to rubyonrails-core+unsubscr...@googlegroups.com. > To post to this group, send email to rubyonrails-core@googlegroups.com. > Visit this group at https://groups.google.com/group/rubyonrails-core. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-core+unsubscr...@googlegroups.com. To post to this group, send email to rubyonrails-core@googlegroups.com. Visit this group at https://groups.google.com/group/rubyonrails-core. For more options, visit https://groups.google.com/d/optout.