Slide 1

Slide 1 text

© 2024 Wantedly, Inc. Ruby を使ったプロダクト開発を 支えるオブザーバビリティ基盤 Wantedly x Qiita Meetup #2 2024-03-01 Hayato Kawai (@fohte)

Slide 2

Slide 2 text

© 2024 Wantedly, Inc. あなた誰 名前: @fohte (ふぉーて) 川井 颯人 (Hayato Kawai) 所属: ウォンテッドリー株式会社 趣味: 🎮 🎹

Slide 3

Slide 3 text

© 2024 Wantedly, Inc. 今日伝えたいこと ● オブザーバビリティは大事 ○ 障害が起きたとき・起きそうなときに迅速に対処できる

Slide 4

Slide 4 text

© 2024 Wantedly, Inc. ウォンテッドリーが採用するアーキテクチャ・言語 https://docs.wantedly.dev/introduction/technical-overview

Slide 5

Slide 5 text

© 2024 Wantedly, Inc. ウォンテッドリーが採用するアーキテクチャ・言語 今回はこの "The System" の信頼性を 支える「オブザーバビリティ基盤」に ついて紹介します (参考) The System を支える言語について 『ウォンテッドリーのバックエンド領域を支える言語の歴史を読み解く』 https://www.wantedly.com/companies/wantedly/post_articles/886 087

Slide 6

Slide 6 text

© 2024 Wantedly, Inc. 監視してますか?

Slide 7

Slide 7 text

© 2024 Wantedly, Inc. 監視はアラートだけではない ● 「モニタリング」と「オブザーバビリティ」という 考え方がある ○ モニタリング ■ システムのデータを収集 -> 閾値超えたらアラート ■ 「何かが起きている」ということを察知できる ○ オブザーバビリティ (可観測性) ■ 多層的なシステムのデータを収集 -> 障害の予兆の検知および障害時の調査に役立てる

Slide 8

Slide 8 text

© 2024 Wantedly, Inc. オブザーバビリティは調査に役立つ ● ユーザー影響が出たときに簡単に調べたい ○ モニタリングでは「なにかの閾値が超えた」ということが分かっても、それ自体がユーザー 影響に直接繋がるわけではない ■ 例: サーバーの CPU 使用率が 100 % になっていた。でもユーザーにはレスポンスを返せて いる

Slide 9

Slide 9 text

© 2024 Wantedly, Inc. オブザーバビリティで調査が簡単になる ● 前提: サービスは単一のシステムから構成されているとは 限らない ○ 例: アプリケーション (Ruby on Rails サーバー) だけでなくデータベースもある ● => システムの全体の様子を観測したい ○ ウォンテッドリーの場合マイクロサービスアーキテクチャを採用しており、 単一のシステムではなく全体を見る必要性が高い ○ オブザーバビリティが高くなれば全体を俯瞰しやすい

Slide 10

Slide 10 text

© 2024 Wantedly, Inc. オブザーバビリティは障害時に役立つ ● 障害の予兆に気付ける ● 障害発生時に原因究明がしやすい ○ 例: アプリケーションのレスポンスが遅くなっていた。 原因は別アプリケーションのレスポンスが遅延していた。 さらにその遅延は、データベースのクエリが詰まっていたことが原因だった。 ■ 単一のシステムを監視しているだけでは、ここまでの原因究明は (人間がシステムの関連性を理解していないと ) 難しい

Slide 11

Slide 11 text

© 2024 Wantedly, Inc. オブザーバビリティを実現するツール ● ウォンテッドリーでは オブザーバビリティを実現するために Datadog APM を使っている ○ APM = Application Performance Monitoring

Slide 12

Slide 12 text

© 2024 Wantedly, Inc. Datadog APM 外観 出典: https://www.datadoghq.com/product/apm/

Slide 13

Slide 13 text

© 2024 Wantedly, Inc. Datadog APM 外観 出典: https://www.datadoghq.com/product/apm/

Slide 14

Slide 14 text

© 2024 Wantedly, Inc. アプリケーションに導入するのは簡単 (Rails の場合) 1. ddtrace gem をインストール source 'https://rubygems.org' gem 'ddtrace', require: 'ddtrace/auto_instrument' 2. 設定ちょっと書く # config/initializers/datadog.rb Datadog.configure do |c| c.tracing.enabled = true end 参考: https://docs.datadoghq.com/ja/tracing/trace_collection/dd_libraries/ruby/

Slide 15

Slide 15 text

© 2024 Wantedly, Inc. Ruby だと簡単に自動計装できる ● Ruby だと自動計装されて便利 ○ 計装 = 計測するための実装 ○ Ruby だとモンキーパッチできるので自動計装もされる ○ 例: Go で HTTP サーバーを計測したい場合、リクエストハンドラーごとに 計測処理を差し込む必要がある ■ リクエストハンドラーに処理を挟むのを忘れると計測されない

Slide 16

Slide 16 text

© 2024 Wantedly, Inc. Datadog APM 導入で役立た話 ● 障害対応時に毎回のように役立っている ● 障害起きたら => まず APM を見る ○ エラートラッキングツール (Honeybadger) も導入している ■ エラーが出ていればそれで分かるが、分からない場合も多い ○ APM が便利な例: 特定のエンドポイントのレスポンスタイムが遅くなっている ■ エラーが出ているわけではないときは APM が頼りになる

Slide 17

Slide 17 text

© 2024 Wantedly, Inc. 導入後の課題 ● Datadog APM の使い方が分からない ○ 機能が豊富がゆえに使いこなすのが難しい ■ 全てを使いこなす必要はない ■ ポチポチしているだけでも何となく調べることはできる ○ 障害対応訓練を通して Datadog APM を触るきっかけを作っているところ ■ 参考: 『インシデントコマンダーやってみた』 https://speakerdeck.com/fohte/insidentokomandayatutemita ■ まずは触ってみてほしい

Slide 18

Slide 18 text

© 2024 Wantedly, Inc. 今日伝えたいこと ● オブザーバビリティは大事 ○ 障害が起きたとき・起きそうなときに迅速に対処できる

Slide 19

Slide 19 text

© 2024 Wantedly, Inc. https://www.wantedly.com/projects/522096