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
Once your account is created, you can setup a Rollbar error
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:
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:
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
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:
Next, let’s connect to AzDO for WI
Click connect with Azure DevOps
Then connect
But we still need to actually enable Rollbar to create Work Items
After clicking Enable we can set the types and state:
The rules are at the bottom
We can filter on a few fields:
So for instance, we can set a rule like this:
And another for just info:
Notifications
Once enabled, we can actually trigger notifications to slack through Rollbar:
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:
Clicking test notifications, we can then see the result in slack.
We can then create a notification.
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.
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.
I can then tie in a repo and even limit to a path if i desire:
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:
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:
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
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.