About Clarifruit
With a core mission of reducing food waste, Clarifruit has built a cloud-based solution that standardizes and automates quality control of produce across the food supply chain, all the way from farmers to retailers. Their AI powered solutions provide intelligence and automation to make more objective and cost-effective decisions.
Clarifruit’s Tech Stack
Clarifruit’s mobile application allows users to take photographs of produce and upload them to the platform to receive an inspection grade. Using the management dashboard, users access inspections and generate reports about them. The core backend that supports these mobile and web apps is a Java container service supported by a suite of AWS Lambda-based functions and services.
Powering all this is Clarifruit’s big data and analytics platform, where the machine learning and computer vision team are building and managing pipelines that ingest, interpret and provide results back to the platform application. The machine learning stack uses Python and TensorFlow in container services, supported by AWS Lambda functions for orchestration. Image ingestion pipelines use various AWS services–a photo is taken on the Clarifruit platform, it gets uploaded to an AWS S3 bucket, which sends off a notification queue triggering several Lambdas asynchronously.
The Challenge
When an error occurred in Clarifruit’s Lambdas–like an image not being uploaded– the team, using only the built-in tools from AWS Cloudwatch, would search through logs to piece together what happened. On a smaller scale, this manual process wasn’t such a big deal. But as Clarifruit’s applications grew to dozens of Lambdas and containers, it became increasingly difficult for them to monitor and troubleshoot. Without being able to see the full transaction across all services and interactions, it took a significant amount of detective work to pinpoint the root cause of errors.
The Solution
With their core applications running on top of large microservice systems, distributed tracing was critical for Clarifruit. They needed the ability to easily follow an error from one service upstream to its root cause. In Lumigo, they found a troubleshooting platform purpose-built for microservices that not only visualized the full end-to-end trace of a request but also provided the request and response queries between services.
“Debugging is a different experience with Lumigo. It is essential. Before, there would be a log with an exception in it, and we’d have to dig into the logs to find the cause.”, said Luke Thompson, Chief Architect at ClariFruit.
“Now, when an error happens in production, we have the data that passes between services from AWS like ECS and Lamba, as well as from managed services like MongoDB. It’s right there next to the full transaction in Lumigo”.
Benefits and Results
As easy to deploy as it is to use, Lumigo is a key tool being used across Clarifruit, from developers to data scientists, helping to significantly reduce time to resolution.
“When something breaks, using Lumigo cuts our time to resolution down from hours, sometimes days, to minutes,” said Thompson. “Without Lumigo, troubleshooting would be much slower, especially in production environments.”
With Lumigo, Clarifruit doesn’t need the lengthy process of digging through logs or correlating them to understand the request flow. Lumigo traces full request flows through every microservice, out-of-the-box with no code changes, and automates it in one click.
In addition to helping the Clarifruit team find and fix bugs in production faster, Lumigo is also enabling shorter development cycles.
“As we’re developing new lambdas, we often deploy iteratively and test in the cloud environment. As such, our iterative development cycle depends on publishing new versions, testing them in-situ, and getting clear information about how they are working. Using Lumigo tags for quick insights into what’s happening and being able to drill into a visual overview of the activities performed by the code is invaluable. Lumigo enhances our time to deliver new features by providing succinct insights into what’s going on as the code executes.”