コンテンツにスキップ

小規模から中規模へ 構造化ログからはじめる信頼性の担保

チェック

  • [ ] 本文を確認した
  • [ ] 概要を確認した
  • [ ] タグを確認した
  • [ ] inbox/ 直下へ移行した

概要

小規模から中規模へ 構造化ログからはじめる信頼性の担保 のスライド資料。スライド由来のため全文逐語ではなく、構成と実務上の要点を後で確認する。関連タグ: architecture, go, web-clip。

本文

小規模から中規模へ 構造化ログからはじめる信頼性の担保

Share

小規模から中規模へ 構造化ログからはじめる信頼性の担保

Kaigi on Rails 2025

kakudooo

Transcript

⼩規模から中規模へ 構造化ログからはじめる信頼性の担保 Kaigi on Rails 2025 PLEX / 種井覚道

⾃⼰紹介 ⾃⼰紹介 2 株式会社プレックスの Plex Job(HR プラットフォーム)チームでSWEとしてサービス の開発と運用を担当しています。 種井 覚道

今⽇お伝えしたいこと • アプリケーションログの収集と構造化が システムの信頼性向上につながること • Railsアプリケーションに構造化ロギングを導⼊する際の 課題と実践した内容 • Railsと構造化ロギングのこれから 今⽇お伝えしたいこと

想定する聞き⼿ • スタートアップや新規サービスの⽴ち上げに関わっている⽅ • サービスの成⻑に伴って、これから監視をはじめとした 信頼性の担保を考えはじめている⽅ • ログは収集しているが、活⽤や構造化に まだ踏み出せていない⽅ 4

ログについて整理 5

ログとは? • 可能な限りイベントの発⽣時刻(タイムスタンプ)が打刻された ⽂字列データ • 数値であるメトリクスよりも多くの情報を もたせることができる ログについて整理 6 いつ、どこで、何が起こったか

ログの分類 7 ログについて整理 非構造化ログ 構造化ログ 概要 各フィールドについて、key,value で明確に マッピングされていないもの 各フィールドについて、key,value

ログの⽤途 ログについて整理 8 参考: Webアプリケーションのログに関するいくつかの考察 用途 説明 監視 システム障害やパフォーマンスの低下が発生したときに気付ける 調査

私たちのログ活⽤ 9

アプリケーションの構成 • 求⼈サイト/採⽤管理ツール (ATS)はじめ、社内の⼈材マッ チングの効率化ツールなど複数 のプロダクトやシステムを開発 ‧運⽤ • モノリシックなWebアプリケー ションであり、いずれも

信頼性がより求められるフェーズに 私たちのログ活⽤ 11 成⻑による変化 (⼩規模 → 中規模) 課題 • サービスの利⽤者数の増加

信頼性がより求められるフェーズに 私たちのログ活⽤ 12 成⻑による変化 課題 • サービスの利⽤者数の増加 ◦ 社内外のユーザー •

私たちのログ活⽤ 13 • ログは詳細度の⾼い情報である • アプリケーションの重要なイベントはログとして出⼒されるこ とが多い → 網羅性が⾼い ログはアプリケーションの状態を把握するために適したデータ

アプリケーションの監視と調査にログを活⽤する 私たちのログ活⽤ 14 参考: Webアプリケーションのログに関するいくつかの考察 用途 説明 監視 システム障害やパフォーマンスの低下が発生したときに気付ける 調査

当時のアプリケーション監視 私たちのログ活⽤ 15 • すでにDatadogが使われていた • メトリクス、トレース、ログな どは収集されており、⼀部の機 能は活⽤できていた •

監視ツールとログ 私たちのログ活⽤ 16 👉 監視ツールは構造化ログを取り込むことで、ログを対象とした 便利な機能が有効化される • ログに関連する機能の例 ◦ ログ検索

ログが信頼性を⾼めるための武器になっていない 私たちのログ活⽤ 17 ⾮構造化 ログ Error Traking (エラー検知) APM (パフォーマンス

ログを構造化して 信頼性の向上につなげよう 18

ログの活⽤に向けてすべきこと 1. アプリケーションを構成する各プロセスで構造化ログ が出⼒されている 2. 構造化ログをツールに合わせてフォーマットする 私たちのログ活⽤ 19 API Worker

1. Railsアプリケーションのログを 構造化する 20

構造化対象のログ Railsアプリケーションのログを構造化する 21 • アプリケーションコードからのRails.loggerの呼び出し ◦ 例: Rails.logger.info(...), Rails.logger.error(...) •

Rails.loggerを拡張する Railsアプリケーションのログを構造化する 22 • Formatterの作成 ◦ ログのJSON⽂字列化 • Rails.loggerの拡張 ◦

Rails.loggerを拡張する Railsアプリケーションのログを構造化する 23 • Formatterの作成 ◦ ログのJSON⽂字列化 • Rails.loggerの拡張 ◦

Rails.loggerを拡張する Railsアプリケーションのログを構造化する 24 • Formatterの作成 ◦ ログのJSON⽂字列化 • Rails.loggerの拡張 ◦

gemの活⽤ Railsアプリケーションのログを構造化する 25 Lograge Rails Semantic Logger 概要 リクエストログを1⾏にまとめるため のgem、構造化にも対応

私たちはどうしたか? Railsアプリケーションのログを構造化する 26 • ActionController • ActionMailer • ActionView •

構造化ロギングに対応 🎉 Railsアプリケーションのログを構造化する 27 API Worker Cron Job 構造化 フォーマット

⼀部に漏れがあった... Railsアプリケーションのログを構造化する 28 • 定期バッチ(Cron Job)を Rakeタスクで実装している • 運⽤をはじめてみたところ例外時 (unhandledな)に出⼒されるエラー

Rakeタスクのエラーログが構造化されていない① Railsアプリケーションのログを構造化する 29

Rakeタスクのエラーログが構造化されていない② Railsアプリケーションのログを構造化する 30 • 該当箇所のコード • RakeタスクはRailsコマンドで実⾏ することが可能だが、例外処理に ついてはRailsのエコシステムで実 ⾏されるわけではない

Rakeタスクのエラーログを構造化する • begin ... rescue ... end でtask内で発⽣した例外を補⾜する • at_exit

begin ... rescue ... end で対象の処理を囲う • 例外が発⽣した場合は、 Rails.logger でログを出⼒する

at_exit ブロックを定義する • at_exit ブロックを定義して、ラン タイムの終了時に呼び出される処 理を登録する • sentry をはじめとした監視ツール

Rakeにモンキーパッチをあてる • lib/rake/application.rbを参照 • display_error_messageメソッド にモンキーパッチをあてる • モンキーパッチの対象や影響範囲 が限定的であることから、今回は この⽅法を採⽤

構造化ロギングに対応 🎉 Railsアプリケーションのログを構造化する 35 API Worker Cron Job 構造化 フォーマット

整理 Railsアプリケーションのログを構造化する 36 • Rails Semantic Loggerで構造化対象 (API, Worker Cron

2. 構造化ログをツールに合わせて フォーマットする 37

ログをツールの仕様に合わせてフォーマットする 構造化ログをツールに合わせてフォーマットする 38 • Datadogでは、ログから類似のエラーを⾃動で集計する エラートラッキング機能が提供されている • 外部ツールを使⽤する場合は、ツールの仕様に合わせてログを フォーマットする必要があることも

ログをフォーマットするタイミング • ログのフォーマットをアプリケーション側で⾏うか?、ツール側で⾏うか? についても検討が必要となる • SWEを中⼼としたチームであることから、ログのフォーマットに関する設定 はアプリケーションに集約することに ◦ 具体的な実装については、弊社ブログを参照ください 構造化ログをツールに合わせてフォーマットする

ログの活⽤に向けてやるべきこと 構造化ログをツールに合わせてフォーマットする 40 ✅ アプリケーションを構成する各プロセスで構造化ログが 出⼒されている ✅ ツールに合わせてログをフォーマットする API Worker

ログを構造化した結果 41

「監視」や「調査」⽤途のログ活⽤が進んだ ログを構造化した結果 42 構造化 ログ Error Traking (エラー検知) APM (パフォーマンス

ログを構造化した結果 43 • 監視: アプリケーションの重要イベントの捕捉 ◦ エラー検知および集計の⾃動化 ◦ アラートへの応⽤ •

Railsへの期待 44

Railsへの期待 45 • Rails 8.1で構造化ロギングを サポート ◦ Structured Event Reporting

Rakeとエラーレポートティングのサポート Railsへの期待 46 • Rakeタスクでバッチ処理や運⽤ 上のスクリプトを実装している ことも多いはず • 例外時(unhandledな)に Rails.loggerやエラーレポー

まとめ • 構造化ロギングのススメ ◦ ログの構造化は⾒逃されがちだが、信頼性の向上においてコストパフォーマンスのよい打ち ⼿となる ◦ ツールをはじめとして機械的な後⼯程が少しでも考えられるのであればフェーズに関わらず 基本的には対応しておくとよい •

ご静聴ありがとうございました 48

Appendix ① Appendix 49 • ⼊⾨ 監視 • Webアプリケーションのログに関するい くつかの考察

Appendix ② Appendix 50 • ログ収集にあたっての注意点 ◦ コスト ▪ 収集対象の取捨選択、収集したログの保存期間の検討

要点

  • Goの実装・設計・標準的な書き方を面接や実務の深掘り材料にする。
  • 元URL: https://speakerdeck.com/kakudou3/xiao-gui-mo-karazhong-gui-mo-he-gou-zao-hua-rogukarahazimeruxin-lai-xing-nodan-bao

タグ

architecture #go #web-clip