Honeycomb's Open Source Connectors

We’re happy to announce 3 open sourced components to help you get your data into Honeycomb - 2 libraries and a log tailing utility.

We have two libraries available to make it easy to send events to Honeycomb directly from within your application: go and python. For details of how our libraries integrate with your code, you can read our docs on SDKs.

// call Init before using libhoney
libhoney.Init(libhoney.Config{
    WriteKey:   "abcabc123123defdef456456",
    Dataset:    "Example Service",
})
defer libhoney.Close()

// create an event, add fields
ev := libhoney.NewEvent()
ev.AddField("duration_ms", 153.12)
ev.AddField("method", "get")
// send the event
ev.Send()

Honeytail is a small utility that will tail your log files and submit events to Honeycomb. A compiled linux binary is also available for download. Honeytail has parsers built in for nginx, mysql, and mongo logs, as well as one to parse JSON logs. Please let us know if you’d like other parsers for Honeytail!

We happily consider contributions to all of our open source repos! Please open a Github issue or pull request.

How Honeycomb Uses Honeycomb, Part 1: The Long Tail

At Honeycomb, we dogfood everything: we try to solve all our own problems using our own service. And like any young company, we’re moving fast and uncovering plenty of new problems all the time.

We built Honeycomb because we were dissatisfied with the “split brain” flow of being alerted by one dashboard product and falling through to a second log aggregation product for investigation. We wanted to be able to capture transient state in the moment of something happening in our system for later exploration.

Here’s an example of how we debugged one real problem with Honeycomb, using Honeycomb. Context: a user has pinged us and complained that some of their queries are slow or timing out.

Begin debugging

So, let’s start out by getting a baseline for query performance across the system for the last few days, for all users. (We’re running a platform, we need to start by making sure the problem isn’t widespread and affecting lots of users.)

Screenshot: Get Baseline Distribution

Our top-level metrics seem to be reporting a totally acceptable average/P95/P99 completion times for our queries: 73.1, 247.3, and 352.2ms, respectively (we can see this in the summary table underneath the graphs). This user isn’t the heaviest source of traffic on the platform, so it’s possible their bad experience is just being drowned out by other folks’ goods ones.

Let’s filter down to just the dataset in question, and inspect the latency distribution for queries over a particular threshold (we’ll choose the system-wide 99th percentile of latency, 352ms):

Screenshot: Show Filtered Results

Whoa! Those query times are terrible—an average of 30 seconds to complete a query? A P99 of over two minutes? Let’s see if we can look a little deeper into why that dataset is experiencing such slow queries by zooming into the more recent of these two spikes and looking at some raw rows:

Screenshot: Get to Data Mode

Huh. It sure looks like a lot of these slow queries are only running on one partition—in other words, the queries aren’t being spread out across our various shards correctly. Let’s take a look at all of the dataset’s queries to confirm this, and break down by the number of partitions used by each query:

Screenshot: Break Down by num_partitions

This graph tells us two main things: first, that we were correct in our hunch that increased latency is correlated with a smaller number of partitions. Second, it means that there’s something off with our sharding logic—all queries for this dataset should be hitting all 6 partitions, not just a small fraction of them. So now we know what we need to go and fix!

Post mortem

Averages, percentiles, and time series are nothing new—but with Honeycomb, we don’t have to make hard decisions about what to capture or not. Anything we think might ever be useful, we drop in as an attribute for the event, because the marginal cost is approximately zero. Here’s a sample event from this dataset:

{
  "aggregates":"[{\"op\":1}]",
  "build_id":"1855",
  "dataset_id":"907bc9ef",
  "end_time":1470768545,
  "engine_rows_processed":17431728,
  "filters":"[{\"column\":2199,\"op\":11,\"value\":{\"Str\":\"sp.\"}}]",
  "groups":"[2211]",
  "host":"app-c0da5f85",
  "limit":1000,
  "local_msec":2.07953,
  "memory_inuse":4447848,
  "num_goroutines":65,
  "num_partitions":1,
  "orders":"[{\"Descending\":true,\"op\":1}]",
  "series_len":120,
  "start_time":1470761339,
  "storage_glob_msec":0.971951,
  "storage_rows_examined":17866164,
  "storage_wrong_timestamp":434436,
  "total_msec":8358.785709
} 

As you can see, we don’t have to worry about cardinality limits to support breaking events down by dataset_id, and we can send lots of secondary and tertiary attributes along, just in case they end up being useful (like num_partitions did!). And if there is a missing attribute, there are no schemas to define or combinatorial explosions to avoid—we can just toss another key/value pair into new events and start querying against it right away.

We were able to go from a user complaint to the source of the problem in just a couple minutes. Yay!

This is the first in a series of dogfooding posts showing how and why we think this is the future of metrics exploration. Stay tuned!

Get Started!

Sign up to try Honeycomb for free!

Welcome to Honeycomb

Hello friends!

It’s been about seven months since our first day of work, when we first said “hi” and asked for your feedback. We now have a new name, a real office, and the actual glimmerings of a real product. Holy crap!

We’ve been partnering with some early users and building off their experiences for a while, and it’s time for the next step.

Next Monday, August 15th, we will start accepting signups. (Not open signups, we’re not nuts.) If you’re interested, please skim the docs and blog posts and think about whether we’re a good fit for your problems – Honeycomb is not the right tool for everyone, especially at this early stage! If you think we’re a fit, please make sure you’re on our list and watch for the signup link later this week. We’ll start issuing signup tokens on Monday and every few days afterwards.

The early stage Honeycomb is free, of course, and comes with LOTS of hands-on help. We are limiting signups mainly so we can spend quality time pairing with you, building integrations, making sure everything works and makes sense. We are entirely focused on doing whatever it takes to encourage usage and get good feedback. Your time is valuable to us, and we will happily credit you months of free service later, based on your help.

This blog is about to get busy. :) We have lots of posts queued up to describe what Honeycomb is, the future of observability and where we fit in, how to structure your events to get the most out of them, and more. We are also open sourcing our integrations, publishing a contributor spec, and bringing tons of documentation online. So much!!

Enough prelude, on to the good stuff. Starting with What is Honeycomb?, and more.

We’re so excited!
Charity, Christine, Ben and Chris.

P.S. Thank you so, SO much to everyone who signed up, filled out surveys, streamed us data, or came by the office for lunch and UX testing. We could never have gotten this far without you.

Hello world

We are incredibly excited to announce the start of our new venture. Our mission is to empower engineering teams to make decisions faster using real data.

The pace of innovation for application developers has accelerated over the past few years, and so has the complexity and composability of infrastructure. But when it comes to understanding and debugging those systems, we are still in the horse-and-buggy days. There is an urgent need for more flexibility, power, and speed.

We have decades of combined experience building and operating Internet systems that run the gamut of size and scale. With Honeycomb, we are leveraging this experience to build the kind of observability product that empowers engineers like us to move faster, understand their systems better, and solve problems faster.

We can’t wait to get this into your hands and start hearing your feedback. We’ll have so much more to share in the coming months. If you would like to sign up for email updates (and early alpha access!), please leave us your email in the form linked below. (or follow us @honeycombio)