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

meet.php #11 - Huston, we have an airbrake

Max Małecki
November 29, 2013

meet.php #11 - Huston, we have an airbrake

Introducing airbrake.io or opensource errbit in to your company software development process. Word about error handling in php. Some more about integrating an php application with errbit.

Code used in live coding: https://github.com/emgiezet/symfony2-errbit

Max Małecki

November 29, 2013
Tweet

More Decks by Max Małecki

Other Decks in Programming

Transcript

  1. “ “Huston, we have an Huston, we have an AirBrake”

    AirBrake” Application Error monitoring in PHP meet.php #11 By @emgiezet (c) 1995 Universal
  2. meet.php #11 2 $whoami $whoami • Tech Lead @ Redexperts.net

    • With PHP since 2002 • Sorry Ladies but I got Wife. • Speaker @ {meet.php} since #8
  3. meet.php #11 3 Agenda Agenda 1. PHP error tracking 2.

    Airbrake 3. Errbit 4. emgiezet/errbitPHP 5. Case Study
  4. meet.php #11 4 How I can track errors in PHP?

    How I can track errors in PHP? • Override error handler set_error_handler( array($this, 'onError'), error_reporting() ); • Override exception handler set_exception_handler( array($this, 'onException') ); • Use the shutdown function register_shutdown_function( array($this, 'onShutdown') );
  5. meet.php #11 5 How do you track the errors? How

    do you track the errors? • Common Strategies: – Read Apache / ngnix / PHP Logs – Read application logs (ex. monolog) – Emails with Stack Traces – Wait until customer report some errors. – I'm so PRO that my application never crash on production. xoxo
  6. meet.php #11 6 Sudden error rate of 50% for your

    Sudden error rate of 50% for your Application Application http://devopsreactions.tumblr.com/post/67741920428/sudden-error-rate-of-50-for-your-application
  7. meet.php #11 7 How your customers reports an How your

    customers reports an error? error? • Link to the page is attached? • Time-stamp of the error occurrence to grep the log? • Is there any screen-shot or screen-cast attached? • Maybe some unicorns are dancing on rainbow?
  8. meet.php #11 8 To repeat the error you must.. To

    repeat the error you must.. a) Play email ping-pong. b) Dig the logs for the next few hours. c) Daft Punk - Get Lucky? d) Have a Error tracking application.
  9. meet.php #11 9 AirBrake.io AirBrake.io • Trusted by: Trusted by:

    – grupon grupon – Oracle Oracle – SoundCloud + SoundCloud + • Integrates with: Integrates with: GitHub, Bitbucket, JIRA, GitHub, Bitbucket, JIRA, HipChat, Asana, Pivotal, HipChat, Asana, Pivotal, Flowdock, Campfire, Flowdock, Campfire, Lighthouse Lighthouse • Webhooks Webhooks • Customer Support Customer Support
  10. meet.php #11 10 AirBrake.io Notifier API AirBrake.io Notifier API <?xml

    version="1.0" encoding="UTF-8"?> <notice version="2.3"> <api-key>76fdb93ab2cf276ec080671a8b3d3866</api-key> <notifier> <name>Airbrake Notifier</name> <version>3.1.6</version> <url>http://api.airbrake.io</url> </notifier> <error> <class>RuntimeError</class> <message>RuntimeError: I've made a huge mistake</message> <backtrace> <line method="public" file="/testapp/app/models/user.rb" number="53"/> <line method="index" file="/testapp/app/controllers/users_controller.rb" number="14"/> </backtrace> </error> <request> <url>http://example.com</url> <component/> <action/> <cgi-data> <var key="SERVER_NAME">example.org</var> <var key="HTTP_USER_AGENT">Mozilla</var> </cgi-data> </request> <server-environment> <project-root>/testapp</project-root> <environment-name>production</environment-name> <app-version>1.0.0</app-version> </server-environment> </notice> • XML Based • RESTFull
  11. meet.php #11 11 Whoaaaa cool but give me the price

    Whoaaaa cool but give me the price • Small $39/Month – 5 Users – 10 Projects • Medium $89/Month – 20 Users – 15 Projects – Phone support – Custom setup • Enterprise $199/Month – 30 Users – 40 Projects – Phone support – Custom setup
  12. meet.php #11 12 Can't afford AirBrake. Can't afford AirBrake. No

    time for negotiations. It's time for OpenSource solution.
  13. meet.php #11 13 Errbit Errbit • Compatible API with Airbrake

    Notifier API • Written in Ruby srsly must be cool • Can be hosted at Heroku freebie! • You know first when sth is screwed up. • Setup takes one hour.
  14. meet.php #11 14 AirBrake AirBrake vs vs Errbit Errbit •

    God damn expensive • App count limited by plan (max 40) • Hosted in atomic bomb proof shelter • Unlimited error retention • Super-fast notifications. Application don't lags on error reporting • Freebie • Unlimited Apps and Users • Can be hosted on heroku • 15 MB of MongoDB on heroku free plan • Sleeping after 5 min of inactivity
  15. meet.php #11 22 Not enough? Not enough? • Error Comments

    – and replies with notifications • Deploy hook – To clean your error counter for previous deploy • Issue tracker integration: – Github – BitBucket – Gitlab – Redmine – FogBugz – Mingle – Pivotal Labs – Sorry no Jira.
  16. meet.php #11 23 But how can I integrate Errbit with

    But how can I integrate Errbit with my PHP App? my PHP App? • Requires: – PHP >= 5.3.2 – Without cURL • Integrates with – Plain PHP esoteric mutants – Symfony2 – Kohana 3 – ...
  17. meet.php #11 24 History of errbit-php History of errbit-php •

    Original concept was made by: flippa/errbit-php and dbtlr/php-airbrake • But both of them doesn't work at all. And wasn't OOP. • Flippa don't accept any pull-requests so: • 90% of code were rewritten to match psr-2. • 80% LOC were covered by unit tests. • Added TravisCI build for – PHP 5.3 – PHP 5.4 – PHP 5.5 • Already have merged few pull request • Got more than 200 Installs • Is linked in a readme of errbit/errbit ;)
  18. meet.php #11 25 Enough bullshit. Time to code! Enough bullshit.

    Time to code! • Symfony2 Integration 1. Add to composer.json 2. Composer update 3. Create a Listener onKernelException 4. Register a service 5. Set the api key in parameters.yml 6. Collect the errors • Plain PHP Integration 1. Download 2. Add the “use” in your “kernel” file 3. Create an Errbit instance 4. Call the start() 5. Collect the errors
  19. meet.php #11 28 Use Cases Use Cases • Tracking errors

    • Production live debugging • Support test team
  20. meet.php #11 33 Advantages of using Errbit Advantages of using

    Errbit • You know first that error occurred. • You know much more than customer will report you. • You can fix the bug and make a #ninja deploy before customer will notice the error. • Cloud solution friendly – no more grep'ing the error logs from all PHP nodes • You care about the support and maintenance you gain lots of professional #swag
  21. meet.php #11 34 Things to remember Things to remember “Writing

    tests is our professional responsibility” ~@jakub_zalas • This is your last line of defense. • Fix bugs and do the homework in your next projects