Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Collecting logs from mobile apps
Search
rejasupotaro
April 15, 2016
Programming
350
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
650
Challenges in Search in Global Services
rejasupotaro
1
4k
ML on Mobile DroidKaigi 2018
rejasupotaro
3
8.4k
Managing tasks to Kotlin
rejasupotaro
1
260
Go Global - #CookpadTechconf 2017
rejasupotaro
8
8.3k
Successful Locali(z)(s)ation - Droidcon Berlin 2016
rejasupotaro
5
1.5k
Inside Kotlin
rejasupotaro
0
180
Improving UX through performance Droidcon Italy
rejasupotaro
38
11k
Think about API orchestration with RxJava
rejasupotaro
9
2.7k
Other Decks in Programming
See All in Programming
「人を評価する AI」の設計と実装
ryoyanara
0
180
全PRの83%がAIレビューだけでマージできるようになった開発組織はその後どうなったか
athug
1
1.5k
PostgreSQL 18で考えるUUID主キー
kazuhiro1982
0
460
php-fpmのプロセスが枯渇した日-調査・対処・そして本当にやるべきだったこと-
shibuchaaaan
0
240
ここ半年くらいでAIに作らせたR用ツール
eitsupi
0
370
Claude Code全社展開のためにやったことn選~プラグイン302個・コミッター271人を支えるために~
kenchan
5
1.4k
Claude CodeとAgentCore Gatewayを繋ぐ際の認証認可 / Authentication and authorization when connecting Claude Code with AgentCore Gateway
har1101
1
250
夏だ!祭りだ!祭りとはドメインモデリングでは?
ryugen04
0
190
【やさしく解説 設計編・中級 #1】一つの車に、運転手は一人 ~ある倉庫システムの事例から~
panda728
PRO
0
210
仕様駆動開発の消費期限
watany
16
7.2k
ルールを書いて終わらせないハーネスエンジニアリング
yug1224
4
1.9k
AWS DevOps AgentのAzure接続機能を検証して見えた活用法/Use Cases Verified for the AWS DevOps Agent's Azure Connectivity Feature
masakiokuda
1
220
Featured
See All Featured
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
490
Building AI with AI
inesmontani
PRO
1
1.1k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.5k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Typedesign – Prime Four
hannesfritz
42
3.1k
30 Presentation Tips
portentint
PRO
1
360
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Site-Speed That Sticks
csswizardry
13
1.4k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
Fireside Chat
paigeccino
42
4k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
360
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 …