Proxies, markers, and observability

Using Javascript’s ES6 Proxy to ease the pain of instrumenting our AWS Lambda functions for observability in our platform.

The thing about distributed functions

Lambda is the right abstraction of the good ole’ CGI-BINs.
A simple λ wrapped with IOPipe.
IOPipe’s Function View
label('courses')
mark.start('courses.list')
const courses = await Courses.list()
mark.end('courses.list')
...mark.start('serializer.jsonapi')
const jsonapi = dataSerializer.serialize(courses)
mark.end('serializer.jsonapi')
Courses Listing λ — Tracing information
Proxy all the things… for better observability!
Envoy Proxy — Service Communication
We start with a simple Person object, and create an instance.
Create a Proxy Object wrapping all properties and method calls.
ObservedPerson will log all properties when they’re accessed or changed.
module.exports = Observe(CoursesModel)
const courses = await Courses.list()
const data = dataSerializer.serialize(courses)

More resources 📚

Software Engineer experimenting with Microservices, Observability and Traceability, High performing dev teams and Software Architecture.