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
もう少しだけ、ログと向き合ってみる 〜slogを使って構造化ログを出す〜
Search
kensho
September 14, 2024
0
1
もう少しだけ、ログと向き合ってみる 〜slogを使って構造化ログを出す〜
Funabashi.dev supported by KIKKAKE CREATION(
https://funabashidev.connpass.com/event/324776/
)
登壇資料
kensho
September 14, 2024
Tweet
Share
More Decks by kensho
See All by kensho
テーブル設計のよくある罠と それに対する処方箋
iwashi623
0
41
PHPerもIaCを使おう! 17年物のインフラをTerraformに大移行
iwashi623
2
1.5k
今ならわかるDirectConnect
iwashi623
0
55
あぁ…我らのECS…
iwashi623
0
1.3k
Featured
See All Featured
It's Worth the Effort
3n
183
27k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
105
48k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
26
4k
Product Roadmaps are Hard
iamctodd
PRO
48
10k
Why Our Code Smells
bkeepers
PRO
334
57k
Building Applications with DynamoDB
mza
90
6k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
225
22k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.8k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
25
640
Creatively Recalculating Your Daily Design Routine
revolveconf
217
12k
The World Runs on Bad Software
bkeepers
PRO
65
11k
Designing for Performance
lara
604
68k
Transcript
もう少しだけ、 ログと向き合ってみる Funabashi.dev supported by KIKKAKE CREATION 岩下 拳勝(@iwashi623)
自己紹介 name: 岩下 拳勝 work: Backend Engineer(Go, PHP, AWS, Google
Cloud) hobby: プロ野球観戦(ガチ目の阪神ファン) SNS: @iwashi623
目次 1. 自己紹介 2. 事例紹介 3. 問題点 4. 解決策 5.
slogの実装 6. 結果 7. まとめ
皆さん、ログ出してますか ?
俺達はログが「 failure!」って泣いているとと悲しくなるし、 「Success!」なんてログを見たら一緒に嬉しくなっちまう、 そういう生き物なんだ
ちょうどログの良さを知ってもらった後だし、 具体的なログとの戯れ方の Howtoをご紹介していく !
目次 1. 自己紹介 2. 事例紹介 3. 問題点 4. 解決策 5.
slogの実装 6. 結果 7. まとめ
事例紹介 環境: Golang:1.23 FW: echo
事例紹介 いつものようにエラーが飛んできた
事例紹介 よーし、Google CloudのLog Explorerを見に行くぞ〜
事例紹介 なるほど、このCloud Runのエラーか! echo内部で500エラーを返すと 、LogExplorerが勝手にSeverityをエラー としてくれるから検知が簡単だなぁー
事例紹介 エラーになっているアクセスログの近く にログが落ちてた。 えっへん、エラーになったときは user_idをログを吐くようにしてあるん だ!😤 お問い合わせが来るかもしれない ユーザー情報があらかじめ掴めれる からすごく楽ちん〜
事例紹介 よしよし、 エディタの全文検索で簡単にエラー箇所もすぐ 特定できたし、修正も簡単だぞ!
事例紹介 数年後、 アプリケーションは成長して、ユーザーも増えてきた
事例紹介 うーん、最近いろんなものをログに出しすぎ てて、このエラーに対応するログがどれな のか全然わからないな。。。
事例紹介 原因究明に時間がかかるから、エラー つぶしも後回しになりがちだし、どんど ん原因不明エラーが溜まっていってる 。。。
事例紹介 エラーメッセージで場所を特定しようにも、同じよう なエラーメッセージを使用している箇所が50箇所 以上か。。。
事例紹介 知らないログめっちゃ怖いの悪循環
事例紹介 おわた
目次 1. 自己紹介 2. 事例紹介 3. 問題点 4. 解決策 5.
slogの実装 6. 結果 7. まとめ
問題点 この現状の問題点は、 - ログが追跡可能になっていないこと - ログがすべてプレーンテキストで出力されていること - アクセスログ以外の Severityが設定されていない です。
問題点 この現状の問題点は、 - ログが追跡可能になっていないこと - ログがすべてプレーンテキストで出力されていること - アクセスログ以外の Severityが設定されていない です。
昨日の僕の「助けてくれ〜」の Discordは、 SeverityがInfoだったんだな
問題点 追跡できないログはただのポエム fmt.Println()を許すな!
追えてなんぼのログに候
目次 1. 自己紹介 2. 事例紹介 3. 問題点 4. 解決策 5.
slogの実装 6. 結果 7. まとめ
解決策 構造化ログを吐いて、ログをカスタムしましょう
解決策 Goでは、1.21からslogという便利ロガーが標準パッケージとなりました
解決策 Goでは、1.21からslogという便利ロガーが標準パッケージとなりました そこで、slogをつかって素朴なecho用のロガーを実装してみます
目次 1. 自己紹介 2. 事例紹介 3. 問題点 4. 解決策 5.
slogの実装 6. 結果 7. まとめ
slogの実装 slogのセットアップと、echoのミドルウェアレベルでログとして出したいものをセットしている場所。 たとえば、リクエストのURLパスやHTTPメソッドなどをdefaultLogFuncの中で設定してる。
slogの実装 個別のハンドラーの中では、そのハンドラー特有のログのフィールドにしたい情報をセッ ト。 ここでは、リクエストパラメーターのuser_idをログのフィールドとして設定。
ログのレベルごとに別関数を実装する。 レベルがきちんと分かれていると、Log Expolorerな どで検索や監視アラートを作成する際にすごく簡単 になるのでぜひやりたい。 slogの実装
TraceIDの取得。 CloudRunは、受け取ったすべてのリクエスト に「X-Cloud-Trace-Context」という独自ヘッ ダーがくっついているためそこから取り出した IDをctxに詰める。 オリジナルのTraceIDヘッダーを使いたい方 はそちらをどうぞ。 slogの実装
このHandle関数といくつくかの関数シグネ チャさえ満たせば、自由にカスタムできるのが slogのいいところですね。 ログを吐いたときのファイル名や ※ StactTraceがほしいなら、エラーを外部 パッケージのcockroachdb/errorsなどを 使ってもいいかも slogの実装
目次 1. 自己紹介 2. 事例紹介 3. 問題点 4. 解決策 5.
slogの実装 6. 結果 7. まとめ
エラーログが、Severity=ERRORで出るようにでき た! fmt.Println()からの脱出🎉 結果
すべてのログがTraceIDで紐づいているので、ど のログがどのリクエストのものか、すぐに絞り込め る! 結果
すべてのログがTraceIDで紐づいているので、ど のログがどのリクエストのものか、すぐに絞り込め る! アクセスログ → 通常ログ → エラーログまでが一 気通貫で見れる🎉 結果
HTTPメソッドやuser_idなどをログに入れておく と、 「概要欄にフィールドを追加」を押せば。。。 結果
結果 HTTPメソッドやuser_idなどをログに入れておく と、 「概要欄にフィールドを追加」を押せば。。。 一覧で見たときに、どんなリクエストが流れてき ているのかすぐわかる。
結果 user_idで絞り込むと、そのユーザーがこれまでに どんな操作をしたのかも一目瞭然!
目次 1. 自己紹介 2. 事例紹介 3. 問題点 4. 解決策 5.
slogの実装 6. 結果 7. まとめ
まとめ 「ただ出てるログ」に、もう少し向き合ってみて工夫すると、今までになかったことまで見 えるようになります。 fmt.Printlnやvar_dumpもいいけど、構造化ログもいいですよ!
まとめ 「ただ出てるログ」に、もう少し向き合ってみて工夫すると、今までになかったことまで見 えるようになります。 fmt.Printlnやvar_dumpもいいけど、構造化ログもいいですよ! 追えてなんぼのログに候