Rollbar: Getting Started

Published: Dec 17, 2020 by Isaac Johnson

What is Rollbar? They bill themselves as the Continuous Code Improvement Platform with real time AI-assisted workflows.Interestingly enough I found them through a mobile advert and subsequently signed up on my phone.  It has a great name, but what can it really do?

Signing Up

You can sign up from the website

/content/images/2020/12/image-68.png

Once your account is created, you can setup a Rollbar error

/content/images/2020/12/image-69.png

Setting up with NodeJS

First, let’s create a quick node package:

builder@DESKTOP-2SQ9NQM:~/Workspaces/rollbar$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (rollbardemo)
version: (1.0.0)
description: A Test for Rollbar
entry point: (index.js)
test command:
git repository:
keywords: Rollbar
author: Isaac Johnson
license: (ISC) MIT
About to write to /home/builder/Workspaces/rollbar/package.json:

{
  "name": "rollbardemo",
  "version": "1.0.0",
  "description": "A Test for Rollbar",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [
    "Rollbar"
  ],
  "author": "Isaac Johnson",
  "license": "MIT"
}


Is this ok? (yes)

Now let’s install and save rollbar as a package dependency:

$ npm install --save rollbar
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN rollbardemo@1.0.0 No repository field.

+ rollbar@2.19.4
added 14 packages in 2.948s

Now just call a rollbar log:

$ cat index.js | sed "s/accessToken: '.*/accessToken: ' **masked**'/"
// include and initialize the rollbar library with your access token
var Rollbar = require("rollbar");
var rollbar = new Rollbar({
  accessToken: ' **masked**'
  captureUncaught: true,
  captureUnhandledRejections: true
});

// record a generic message and send it to Rollbar
rollbar.log("Hello world!");

run it

$ node index.js

Almost immediately i see a response:

/content/images/2020/12/image-71.png

Setting up Deployment Tracking

Since Azure DevOps isn’t listed yet as a plugin, we can set up a curl command based on the API docs: https://explorer.docs.rollbar.com/#operation/post-deploy

We will want to use https://api.rollbar.com/api/1/deploy with the payload

{
  "environment": "string",
  "revision": "string",
  "rollbar_username": "string",
  "local_username": "string",
  "comment": "string",
  "status": "string"
}

Additionally to tie to our account we’ll want to pass X-Rollbar-Access-Token

For this, we will want to go to Settings, Project Access Tokens. We can create a new token, but we should have already a server scoped token meant for deployments:

/content/images/2020/12/image-72.png

We can do a quick test locally:

$ curl -H "X-Rollbar-Access-Token: 5 ***************************** 6" -H Content-Type: application/json" --request POST --data '{"environment":"example","revision":"7955bbd","rollbar_username":"isaac.johnson","local_username":"isaac","comment":"first","status":"succeeded"}' https://api.rollbar.com/api/1/deploy
{
  "data": {
    "deploy_id": 19034354
  }
}

The revision is the SHA deployed and the status needs to be one of “started”, “succeeded”, “failed” or “timed_out”.

We can then see the results in the Deployments area

/content/images/2020/12/image-73.png

So what if we add a step in our Azure DevOps pipelines.

In our aws-release.yaml:

  - bash: |
      #!/bin/bash
      set -x
 
      curl -H "X-Rollbar-Access-Token: $(myToken)" -H "Content-Type: application/json" --request POST --data '{"environment":"$(System.StageDisplayName)","revision":"$(Build.SourceVersion)","rollbar_username":"isaac.johnson","local_username":"isaac","comment":"Build $(Build.BuildNumber)","status":"succeeded"}' https://api.rollbar.com/api/1/deploy
    displayName: 'Rollbar Notifications'

We can now see the results:

/content/images/2020/12/image-74.png

Next, let’s connect to AzDO for WI

/content/images/2020/12/image-78.png

Click connect with Azure DevOps

/content/images/2020/12/image-76.png

Then connect

/content/images/2020/12/image-79.png

But we still need to actually enable Rollbar to create Work Items

/content/images/2020/12/image-81.png

After clicking Enable we can set the types and state:

/content/images/2020/12/image-82.png

The rules are at the bottom

/content/images/2020/12/image-83.png

We can filter on a few fields:

/content/images/2020/12/image-84.png

So for instance, we can set a rule like this:

/content/images/2020/12/image-86.png

And another for just info:

/content/images/2020/12/image-87.png

Notifications

Once enabled, we can actually trigger notifications to slack through Rollbar:

/content/images/2020/12/image-88.png

setting the channel

builder@DESKTOP-2SQ9NQM:~/Workspaces/rollbar$ curl -H "X-Rollbar-Access-Token: 3 ****************** 3" -H "
Content-Type: application/json" -X PUT --data '{"enabled":true,"service_account_id":250952,"channel":"#builds"}' http
s://api.rollbar.com/api/1/notifications/slack
{
  "result": {},
  "err": 0
}builder@DESKTOP-2SQ9NQM:~/Workspaces/rollbar$

Now in the Notifications area we can see the right slack channel:

/content/images/2020/12/image-89.png

Clicking test notifications, we can then see the result in slack.

/content/images/2020/12/image-90.png

We can then create a notification.

/content/images/2020/12/image-91.png

GIT integration

The choices here are a bit limited. I’ve reached out to ask about others, but as of this writing have yet to hear back.

/content/images/2020/12/image-93.png

While i used Azure Repos, i do have content in Github so let’s try that.

We can click connect and choose which areas to grant access.

/content/images/2020/12/image-94.png

I can then tie in a repo and even limit to a path if i desire:

/content/images/2020/12/image-96.png

This lines up to one of my public repos: https://github.com/idjohnson/kubeless-perl-cicd

I made a small change the README but didn’t see any event trigger in Rollbar. I must assume it’s for tracking deployments back to their code via the SHA.

To prove it out, I set my build to push the correct SHA via Azure-pipelines (not the new variable for non-master builds):

 - bash: |
      #!/bin/bash
      set -x

      curl -H "X-Rollbar-Access-Token: *********************************" -H "Content-Type: application/json" --request POST --data '{"environment":"$(System.StageDisplayName)","revision":"$(Build.SourceVersion)","rollbar_username":"isaac.johnson","local_username":"isaac","comment":"Build $(Build.BuildNumber)","status":"succeeded"}' https://api.rollbar.com/api/1/deploy
    displayName: 'Rollbar Notifications (Master)'
    condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'))

  - bash: |
      #!/bin/bash
      set -x

      curl -H "X-Rollbar-Access-Token: *********************************" -H "Content-Type: application/json" --request POST --data '{"environment":"$(System.StageDisplayName)","revision":"$(System.PullRequest.SourceCommitID)","rollbar_username":"isaac.johnson","local_username":"isaac","comment":"Build $(Build.BuildNumber)","status":"succeeded"}' https://api.rollbar.com/api/1/deploy
    displayName: 'Rollbar Notifications (PR)'
    condition: and(succeeded(), ne(variables['Build.SourceBranch'], 'refs/heads/master'))

Note, i could more clearly denote PR and non-PR with

condition: and(succeeded(), not(startsWith(variables['Build.SourceBranch'], 'refs/pull/')))

_ Pro-tip : in Azure DevOps, the SHA on a PR is a post-merge value which doesn’t correspond with source. So to get the source version that triggered a build, use the undocumented “System.PullRequest.SourceCommitID” variable_

I forced a sync from my Azure Repos repo into Github just to prove it out:

/content/images/2020/12/image-97.png

I don’t intend to keep this in Github, but it shows a basic connection works. I noted in testing my change, the notifications kick in and work just fine:

/content/images/2020/12/image-98.png

RQL

There is a search query area (Rollbar Query Language) which looks a lot like SQL.  Here we can query events and download as csv if we want

/content/images/2020/12/image-99.png

Adding developers

In Teams, we can invite people

And like most good tools out there, it has SAML integration if we wish to federate our logins out:

Billing

There is a common feature I look for on good SaaS providers and that is the ability to see my costs and know how to change them.

In Subscription, we can see our Plan as well as usage:

And the plan:

Changing plans:

Summary

Rollbar.com was created in 2012 and presently homed in the Bay area but with development also in Barcelona and Budapest.   They’ve had just over $18m in private funding and are still privately held.  

I’m so far rather impressed in the offering.  It still feels a little rough around the edges; some things needed REST updates, some connectivity is not so clear on how to use it.  

However, even the free tier brings some real value and in that regards, it’s worth checking out.  This is one of those services I definitely plan to circle back for a second pass on with a more full backed end to end solution tour.

rollbar trace getting-started

Have something to add? Feedback? You can use the feedback form

Isaac Johnson

Isaac Johnson

Cloud Solutions Architect

Isaac is a CSA and DevOps engineer who focuses on cloud migrations and devops processes. He also is a dad to three wonderful daughters (hence the references to Princess King sprinkled throughout the blog).

Theme built by C.S. Rhymes