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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
rejasupotaro
April 15, 2016
Programming
360
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Collecting logs from mobile apps
rejasupotaro
April 15, 2016
More Decks by rejasupotaro
See All by rejasupotaro
A Practical Approach To Semantic Search
rejasupotaro
2
660
Challenges in Search in Global Services
rejasupotaro
1
4k
ML on Mobile DroidKaigi 2018
rejasupotaro
3
8.4k
Managing tasks to Kotlin
rejasupotaro
1
270
Go Global - #CookpadTechconf 2017
rejasupotaro
8
8.3k
Successful Locali(z)(s)ation - Droidcon Berlin 2016
rejasupotaro
5
1.6k
Inside Kotlin
rejasupotaro
0
180
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
AIは賢い。でも実行環境は? CLIおじさんがAI時代に伝えたいこと ~ CLIおじさんがAI時代に伝えたいこと ~
curekoshimizu
1
250
速習iPhone Duo対応
yuukiw00w
1
660
Snowflakeで業務アプリを作ろう。 Snowflakeのアプリ機能解説&実践ガイド
ayumu_yamaguchi
1
280
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
3
360
【高い買い物LT会】初任給で話題の国産フィジカルAIを買った話
akagami
PRO
0
160
『寄り添うラジオ』をAIで作る 体験価値から逆算した、会話しないUXと品質設計
theoriatec2024
3
180
SONY CISC-NEWS NWS-1750 + NWB-225 フレームバッファの NetBSD/news68k ドライバ実装 / OSC2026Hiroshima
tsutsui
0
120
SREの越境 / SRE Collaboration
y0hgi
2
250
XHTMLが残したもの
yosuke_furukawa
PRO
2
820
20260914 AIエージェント時代のPlatform Engineering LLM基盤とプロダクトの責務境界線
kanfab1
7
2.1k
AI × TiDD / 2026.09.05 Redmine 大阪
tokudiro
1
180
すこし踏み込む CancellationToken
htkym
2
590
Featured
See All Featured
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
510
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
WCS-LA-2024
lcolladotor
0
830
Into the Great Unknown - MozCon
thekraken
41
2.7k
Producing Creativity
orderedlist
PRO
348
41k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.5k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
Building Applications with DynamoDB
mza
96
7.2k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
Designing Powerful Visuals for Engaging Learning
tmiket
1
570
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Transcript
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 …