Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Collecting logs from mobile apps
Search
rejasupotaro
April 15, 2016
Programming
370
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Collecting logs from mobile apps
rejasupotaro
April 15, 2016
Transcript
28 slides
Collecting logs from mobile apps Kentaro Takiguchi
About our service
None
None
non-RTL RTL flipped
Each user has a different context and background. Understanding users
is important.
Build - Measure - Learn
Build - Measure - Learn
None
What is “fluentd”? “ ” Fluentd is an open source
data collector, which lets us unify the data collection and consumption for a better use and understanding of data.
… …
… …
… … ? retryable retryable retryable
… … Filter / Buffer / Route
<match td.*.*> @id td_wild type tdlog buffer_type file max_retry_wait 1h
… </match> { tag: td.global.recipe_search_query_logs, timestamp: xxx, country: xxx, language: xxx, … } ```ruby Fluent::Logger::FluentLogger.new(tag_prefix, args).post(tag, map) ```
?
Offline ? Connectivity Correctness Performance
Data collector for mobile apps “Puree” https:/ /github.com/cookpad/puree-android https:/ /github.com/cookpad/puree-ios
Unified logging layer for mobile apps Puree has following features
Buffering Filtering Batching Retrying Pluggable
Search “chicken” public class RecipeSearchLog implements PureeLog { @SerializedName("event") String
event; @SerializedName("keyword") String keyword; @SerializedName("order") String order; @SerializedName("page") int page; @SerializedName("per_page") int perPage; @SerializedName("total_hits") int totalHits; } Puree.send(new RecipeSearchLog(…)); {“event”:”recipe.search”, “keyword”:”chicken”,…} Track events
Buffering & Batching log logs {“event”:”recipe.search”, “keyword”:”chicken”,…} {“event”:”recipe.search”, “keyword”:”chicken”,…} {“event”:”recipe.search”,
“keyword”:”chicken”,…} [ {“event”:”recipe.search”, “keyword”:”chicken”,…}, {“event”:”recipe.search”, “keyword”:”chicken”,…}, {“event”:”recipe.search”, “keyword”:”chicken”,…} ]
Retrying log logs …
Filtering drop SamplingFilter TimestampFilter add timestamp
Pluggable output plugins • custom filters • flush interval millis
• logs per request • max retry count
Find a bottleneck using Puree ? Image download is so
slow!
image size image format network type S3 fetch time image
convert time CDN cache hit ratio local cache hit ratio decode time render time number of threads device’s CPU / RAM OS version ?
{ "event": "image.download", "cache": "TCP_MISS", "cache_remote": "TCP_HIT", "content_length": "17670", "content_type":
"image/webp", "convert_time_ms": "64.445", "network_type": "4G", "s3_fetch_time_ms": "41.575", "total_time_ms": 1471, … } SELECT cache, network_type, ROUND(AVG(total_time_ms), 0) AS total_time_ms FROM image_download_logs WHERE TD_TIME_RANGE(…) GROUP BY cache, network_type SamplingFilter (1%) TimestampFilter
Collecting logs from mobile apps {“event”:”recipe.search”, “keyword”:”chicken”,…} {“event”:”recipe.search”, “keyword”:”chicken”,…} {“event”:”recipe.search”,
“keyword”:”chicken”,…} [ {“event”:”recipe.search”, “keyword”:”chicken”,…}, {“event”:”recipe.search”, “keyword”:”chicken”,…}, {“event”:”recipe.search”, “keyword”:”chicken”,…} ] add user_id, country, … {“tag”:”td.global.recipe_search”, “user_id”:”xxx”, …} SELECT * FROM table WHERE …
More Decks by rejasupotaro
See All by rejasupotaro
A Practical Approach To Semantic Search
rejasupotaro
2
680
Challenges in Search in Global Services
rejasupotaro
1
4k
ML on Mobile DroidKaigi 2018
rejasupotaro
3
8.5k
Managing tasks to Kotlin
rejasupotaro
1
290
Go Global - #CookpadTechconf 2017
rejasupotaro
8
8.3k
Successful Locali(z)(s)ation - Droidcon Berlin 2016
rejasupotaro
5
1.6k
Inside Kotlin
rejasupotaro
0
190
Improving UX through performance Droidcon Italy
rejasupotaro
38
11k
Think about API orchestration with RxJava
rejasupotaro
9
2.8k
Other Decks in Programming
See All in Programming
ActionController meets Protocol Buffers
sorah
1
800
Python Lambdaにおけるテストしやすい設計とAI支援の活用 / Designing Testable Python Lambda Functions with AI
kitano_yuichi
1
320
AI時代のTerminal環境を UNIX哲学で設計・運用する
yasunori0418
1
350
仕様駆動開発入門 (何を作るかを先に決めて渡す) | 目指せ Kiro マスター 05
inariku
PRO
2
120
DroidKnights 2026 Android A2UI Jetpack Compose 기반의 안전한 AI UI 렌더링 - 박제창
itsmedreamwalker
1
220
SODA - FACT BOOK(EN)
sodainc
1
230
LLM 101
dalinaum
0
480
SODA - FACT BOOK(JP)
sodainc
1
40k
動画プレイヤーはなぜカクつくのか 〜Flutterのレンダリングとネイティブの境界を解剖する〜
naruogram
0
330
AI-Powered Domain-Driven Design
ziobrando
0
430
オーケストレーション記述言語 Katari
yukikurage
0
250
TanStack Vue Query と Pinia Colada から学ぶ非同期状態の型設計
aoshi
0
650
Featured
See All Featured
Building Applications with DynamoDB
mza
96
7.3k
Designing Experiences People Love
moore
143
24k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
760
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
1
240
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
350
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
3k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.5k
Designing for Performance
lara
612
70k
Fireside Chat
paigeccino
43
4.1k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
480
KATA
mclloyd
PRO
35
16k