Blrdroid Meetup, Nov 2024
Mobile Observability with
OpenTelemetry
Jitin Sharma, Groww
Slide 2
Slide 2 text
Observability
Slide 3
Slide 3 text
System
Inputs Outputs
Slide 4
Slide 4 text
Sum
Machine
2,2 4
Slide 5
Slide 5 text
Sum
Machine
2,2 4
4,4 8
Slide 6
Slide 6 text
Sum
Machine
2,2 4
4,4
6,4
8
-1
Slide 7
Slide 7 text
Sum
Machine
2,2 4
4,4
6,4
8
-1
Slide 8
Slide 8 text
Mobile Apps
Slide 9
Slide 9 text
No content
Slide 10
Slide 10 text
Mobile
App
User
Action
UI
Slide 11
Slide 11 text
Mobile
App
Backend
Slide 12
Slide 12 text
Mobile
App
Cell
Tower
CDN/
Gateway
Backend
Slide 13
Slide 13 text
Mobile
App
Cell
Tower
CDN/
Gateway
Backend
• OEM
• Performance
• OS Versions
• Network state
• User lifecycle
Slide 14
Slide 14 text
Mobile
App
Cell
Tower
CDN/
Gateway
Backend
• OEM
• Performance
• OS Versions
• Network state
• User lifecycle
Background Jobs
Noti
fi
cations
Slide 15
Slide 15 text
Mobile
App
Cell
Tower
CDN/
Gateway
Backend
• OEM
• Performance
• OS Versions
• Network state
• User lifecycle
Background Jobs
Noti
fi
cations
Backend
Code
Slide 16
Slide 16 text
What could go wrong
Slide 17
Slide 17 text
Issue due to wrong code
Slide 18
Slide 18 text
Issue due to wrong code
Network
fl
uctuations
Slide 19
Slide 19 text
Issue due to wrong code
Network
fl
uctuations
Lifecycle actions
Slide 20
Slide 20 text
Issue due to wrong code
Network
fl
uctuations
Lifecycle actions
Device
Slide 21
Slide 21 text
Issue due to wrong code
Network
fl
uctuations
Lifecycle actions
Device
OEM
Slide 22
Slide 22 text
Issue due to wrong code
Network
fl
uctuations
Lifecycle actions
Device
OEM
Pyramid of problems
Slide 23
Slide 23 text
Issue due to wrong code
Network
fl
uctuations
Lifecycle actions
Device
OEM
Pyramid of problems
Problems?
• Disconnected systems
• Sampling
• Delays and interval con
fi
guration
• Data privacy
• Costs
Slide 31
Slide 31 text
OpenTelemetry
Slide 32
Slide 32 text
What is OpenTelemetry
- Framework to collect telemetry data
- Vendor agnostic
- Works across frameworks using agent libraries
- Allows control over export of data
Slide 33
Slide 33 text
OpenTelemetry
Traces Metrics Logs
Slide 34
Slide 34 text
Span
Start End
t0 tN
attributes
Slide 35
Slide 35 text
Span - Network Call
Request
Start
• user identi
fi
er
• os version
• device model
• network type
Response
Received
Slide 36
Slide 36 text
Trace
Span Span Span Span
Span Span Span
Slide 37
Slide 37 text
Trace
Span Span Span Span
Span Span Span
trace id
Slide 38
Slide 38 text
Distributed Tracing
System 1 System 2 System 3
Spans Spans Spans
Trace
Slide 39
Slide 39 text
Distributed tracing on Mobile?
Slide 40
Slide 40 text
Mobile
App
UI
Slide 41
Slide 41 text
Mobile
App
Network
Storage
UI
System
Device
Slide 42
Slide 42 text
Mobile
App
Network
Storage
UI
System
Retro
fi
t
Workmanager
Sqlite
Shared Pref
Recyclerview
Device
Lifecycle
Memory
CPU
Slide 43
Slide 43 text
Mobile
App
Network
Storage
UI
System
Retro
fi
t
Workmanager
Sqlite
Shared Pref
Recyclerview
Device
Lifecycle
Memory
CPU
Server
Gateway
Kafka
DB
Slide 44
Slide 44 text
Mobile
App
Network
Storage
UI
System
Retro
fi
t
Workmanager
Sqlite
Shared Pref
Recyclerview
Device
Lifecycle
Memory
CPU
Server
Gateway
Kafka
DB
Span
Span
Span
Span
Span
Span
Slide 45
Slide 45 text
No content
Slide 46
Slide 46 text
No content
Slide 47
Slide 47 text
Additional Data
Metrics
- Counter
- Timer
- Histogram
- Gauge
Logs
- Bridge to existing log
libraries
Slide 48
Slide 48 text
Show me code
Slide 49
Slide 49 text
// Build instance
val openTelemetry = otelRumBuilder.build().openTelemetry
// Create a tracer
openTelemetry.getTracer("network.call")
// Create span
val span = tracer.spanBuilder(spanName)
.setAllAttributes(attributes)
.startSpan()