Upgrade to Pro — share decks privately, control downloads, hide ads and more …

It's not how good your app is, its' how good yo...

joshk
August 31, 2012

It's not how good your app is, its' how good you want it to be - RubyConf Brazil

Travis CI is a distributed continuous integration system running over 7,000 tests daily. For us to get a true insight into what is going on behind the scenes we have had to come a long way by integrating and building both tools and libraries so that Travis and its many parts are not just a black box of information.

Reading logs and using NewRelic is not new, but far from enough, especially when it comes to apps which are composed of many smaller apps, like Travis. How do you track and visualize requests being processed by multiple services? How do you silence verbose logs while not losing the core of the message? And how do you aggregate, visualize and share metrics?

A lot of how we track, manage, and visualize what is going on in Travis has been created as a set of internal tools and by using a range of awesome services, but core to a lot of this is ActiveSupport Notifications and Travis Instrumentation.

This session will give insight to how Travis is composed and connected, as well as shedding light on how simple it can be to gain more visibility into even a complex, distributed system like Travis, as well as your applications too.

joshk

August 31, 2012
Tweet

More Decks by joshk

Other Decks in Programming

Transcript

  1. ?

  2. BUT

  3. Started GET "/" for 127.0.0.1 at 2012-03-10 14:28:14 +0100 Processing

    by HomeController#index as HTML Rendered text template within layouts/application (0.0ms) Rendered layouts/_assets.html.erb (2.0ms) Rendered layouts/_top.html.erb (2.6ms) Rendered layouts/_about.html.erb (0.3ms) Rendered layouts/_google_analytics.html.erb (0.4ms) Completed 200 OK in 79ms (Views: 78.8ms | ActiveRecord: 0.0ms)
  4. E [githubcommitstatus] Could not update the PR status on https://api.github.com/repo

    d18173d510eadf063917db62956f25edab9f70c1 (the server responded with status 404: 40 I Travis::Task::GithubCommitStatus#run for #<Build id=2277110> I Travis::Event::Handler::GithubCommitStatus#notify(build:finished) for #<Build id=22 I Travis::Hub::Handler::Job#update for #<Job id="2277119"> I Travis::Task::Pusher#run for #<Job id=2277152> I Travis::Event::Handler::Pusher#notify(job:test:finished) for #<Job::Test id=2277152> I Travis::Task::Pusher#run for #<Build id=2277146> I Travis::Event::Handler::Pusher#notify(build:finished) for #<Build id=2277146> I Travis::Event::Handler::Email#notify(build:finished) for #<Build id=2277146> I Travis::Event::Handler::Irc#notify(build:finished) for #<Build id=2277146> I Travis::Event::Handler::Webhook#notify(build:finished) for #<Build id=2277146> I Travis::Event::Handler::Campfire#notify(build:finished) for #<Build id=2277146> I [github] Successfully commented on https://api.github.com/repos/mozilla/browserid I Travis::Task::Github#run for #<Build id=2277146> I Travis::Event::Handler::Github#notify(build:finished) for #<Build id=2277146> I Travis::Task::GithubCommitStatus#run for #<Build id=2277146>
  5. E [githubcommitstatus] Could not update the PR status on https://api.github.com/repo

    d18173d510eadf063917db62956f25edab9f70c1 (the server responded with status 404: 40 I Travis::Task::GithubCommitStatus#run for #<Build id=2277110> I Travis::Event::Handler::GithubCommitStatus#notify(build:finished) for #<Build id=22 I Travis::Hub::Handler::Job#update for #<Job id="2277119"> I Travis::Task::Pusher#run for #<Job id=2277152> I Travis::Event::Handler::Pusher#notify(job:test:finished) for #<Job::Test id=2277152> I Travis::Task::Pusher#run for #<Build id=2277146> I Travis::Event::Handler::Pusher#notify(build:finished) for #<Build id=2277146> I Travis::Event::Handler::Email#notify(build:finished) for #<Build id=2277146> I Travis::Event::Handler::Irc#notify(build:finished) for #<Build id=2277146> I Travis::Event::Handler::Webhook#notify(build:finished) for #<Build id=2277146> I Travis::Event::Handler::Campfire#notify(build:finished) for #<Build id=2277146> I [github] Successfully commented on https://api.github.com/repos/mozilla/browserid I Travis::Task::Github#run for #<Build id=2277146> I Travis::Event::Handler::Github#notify(build:finished) for #<Build id=2277146> I Travis::Task::GithubCommitStatus#run for #<Build id=2277146>
  6. I [ruby-2:worker] starting job slug:Nedomas/ta id:2277524 I [ruby-2:build:remote] about to

    run I [ruby-2:worker:virtual_box] ruby-2 started with process id : 5772 I [ruby-2:shell:session] starting ssh session to 127.0.0.1:2222 ... I [ruby-2:build:job:test:ruby] about to run I [ruby-2:build:job:test:ruby] about to perform I [ruby-2:build:job:test:ruby] about to chdir I [ruby-2:build:job:test:ruby] about to export I [ruby-2:build:job:test:ruby] about to checkout I [ruby-2:build:job:test:ruby] about to setup I [ruby-2:build:job:test:ruby] about to run_command(:install, "bundle i
  7. I [ruby-2:worker] starting job slug:Nedomas/ta id:2277524 I [ruby-2:build:remote] about to

    run I [ruby-2:worker:virtual_box] ruby-2 started with process id : 5772 I [ruby-2:shell:session] starting ssh session to 127.0.0.1:2222 ... I [ruby-2:build:job:test:ruby] about to run I [ruby-2:build:job:test:ruby] about to perform I [ruby-2:build:job:test:ruby] about to chdir I [ruby-2:build:job:test:ruby] about to export I [ruby-2:build:job:test:ruby] about to checkout I [ruby-2:build:job:test:ruby] about to setup I [ruby-2:build:job:test:ruby] about to run_command(:install, "bundle i ruby-2
  8. udp

  9. 2012-08-30T13:19:00+00:00 app[web.1]: metriks: time=1346332740 name=active_record.reads type=timer count=161949 one_minute_rate=19.766511278513352 five_minute_rate=14.933384246388295 fifteen_minute_rate=14.305129976012195

    mean_rate=14.150840349575361 min=0.001665 max=29831.347368 mean=39.30880807099759 stddev=163468.0162387811 median=1.565408 95th_percentile=91.46994964999998