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
6
もう少しだけ、ログと向き合ってみる 〜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
1
51
PHPerもIaCを使おう! 17年物のインフラをTerraformに大移行
iwashi623
2
1.6k
今ならわかるDirectConnect
iwashi623
0
62
あぁ…我らのECS…
iwashi623
0
1.3k
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
42
9.2k
[RailsConf 2023] Rails as a piece of cake
palkan
52
4.9k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
364
24k
Designing for humans not robots
tammielis
250
25k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
Facilitating Awesome Meetings
lara
50
6.1k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
126
18k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
33k
Rails Girls Zürich Keynote
gr2m
94
13k
The Cult of Friendly URLs
andyhume
78
6k
Being A Developer After 40
akosma
86
590k
How To Stay Up To Date on Web Technology
chriscoyier
788
250k
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もいいけど、構造化ログもいいですよ! 追えてなんぼのログに候