Our Experience: Thundra Integration for HoneycombBy Guest Blogger | Last modified on January 11, 2019
This is a guest post from Salih Kardan, Software Engineer @Thundra and Committer at Apache, formerly SRE @Opsgenie. He specializes in managing AWS services and loves to improve monitoring and observability of systems.
Serverless applications are becoming more popular, thanks to AWS Lambda, Azure Functions, and other serverless platforms. But, these applications can still be complex and one challenge for serverless users, in particular, is debugging, monitoring, and observability. With Thundra, you can get full visibility into your serverless applications, which is valuable on its own! However, when serverless data is queried using a powerful platform like Honeycomb, you are able to additionally combine serverless with other datasets and set up dashboards for the whole stack of services in your use case.
What is Thundra?
The black box nature of AWS Lambda and other serverless environments means that identifying and fixing performance issues is difficult and time-consuming. Built for straightforward debugging, monitoring, and observability, Thundra provides deep insight into your entire serverless environment. Thundra collects and correlates all your metrics, logs, and traces, allowing you to quickly identify problematic invocations and also analyzes external services associated with that function. With Thundra’s zero overhead and automated instrumentation capabilities, developers are free to write code without worrying about bulking up Lambdas or wasting time on chasing black box problems.
How Did We Integrate With Honeycomb?
There are several ways to send data to Honeycomb and each one is well documented, making integration super easy. We used Honeycomb’s powerful Honeytail agent, which tails configured log files and ships them to the Honeycomb API. We created four honeytail configs: trace, invocation, metric, and log. It was very simple to set up! To configure, all we had to write was:
These are run from a simple Java-based web app called the Thundra Integrator for Honeycomb that uses a RESTful API to accept incoming data from Thundra Lambda agents. Then, it re-writes the incoming data into a file in a structured way and manages file rotation. The rest is handled by Honeytail.
One important part of the integration is how we modify the Thundra data to make it compatible with Honeycomb’s trace format. To accomplish this, we defined a parent/child relationship between spans and add some required fields such as id, name, and serviceName to the collected trace data. The rest is handled by Honeycomb without any additional effort on our part, which is very cool.
Honeycomb + Thundra Traces = Awesome!
At the beginning of June, we were excited to learn that Honeycomb announced the general availability of tracing! With Honeycomb rapidly increasing in popularity, we thought that Thundra’s serverless tracing (and other!) data combined with Honeycomb’s powerful visualizations, advanced search, and query capabilities would be a truly compelling integration for AWS Lambda users.
Whether your application is serverless or not, it’s probably a distributed system. At the very least, you probably have multiple layers - your application, database, and cache. Or, maybe it’s composed of microservices and/or functions. Monitoring and assessing the performance of all these moving parts is one important part of what you need to do in order to keep your application highly available and resilient.
One dataset in particular - traces - can help you tie all these moving parts of your system together. With traces, you can easily see the full end-to-end story of your invocation/request, including all the separate services it interacts with or the different ways in which a single service is accessed. For example, you can see if your invocations interacts with a DynamoDB table, or Amazon SQS, or a bunch of other external services. With the help of traces, you can easily detect errors, performance problems, and see the big picture of how your system executes requests.
Honeycomb is a powerful tool built to help engineers collaboratively solve problems, debug, and deeply query and analyze metrics. Thundra is a powerful data collection platform for AWS Lambda environments, built to help engineers solve difficult serverless performance problems via observability and monitoring of correlated metrics, logs, and traces. We believe Thundra and Honeycomb make a truly valuable combination, allowing you to query and dive deep into your serverless data so you can quickly identify the critical issues holding you back from achieving stellar serverless performance.
Our friends at Tracetest recently released an integration with Honeycomb that allows you to build end-to-end and integration tests, powered by your existing distributed traces....