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
Reckoner の Scala プロジェクトにおける オブザーバビリティの取り組み / Ob...
Search
KADOWAKI Takumi
February 27, 2024
Programming
0
2.1k
Reckoner の Scala プロジェクトにおける オブザーバビリティの取り組み / Observability Initiatives in Reckoner's Scala Project
2024/02/27 Scalaわいわい勉強会 #2
https://scala-tokyo.connpass.com/event/307069/
KADOWAKI Takumi
February 27, 2024
Tweet
Share
More Decks by KADOWAKI Takumi
See All by KADOWAKI Takumi
Reckoner における Datadog Browser Test の活用事例 / Datadog Browser Test at Reckoner
nomadblacky
0
440
Scala アプリケーションのビルドを改善してデプロイ時間を 1/4 にした話 | How I improved the build of my Scala application and reduced deployment time by 4x
nomadblacky
1
1k
AWS CDK on Scala ~ Scalaでインフラ管理してみたはなし / Manage infrastructure with AWS CDK on Scala
nomadblacky
0
4.7k
Slinky で Scala.js 製 React Webアプリケーションを つくったはなし / How to build a Scala.js React web application in Slinky
nomadblacky
1
5.2k
面倒なことはScalaスクリプトにやらせよう / let scala scripts do the troublesome things
nomadblacky
0
1.1k
Other Decks in Programming
See All in Programming
ISUCON研修おかわり会 講義スライド
arfes0e2b3c
1
470
Modern Angular with Signals and Signal Store:New Rules for Your Architecture @enterJS Advanced Angular Day 2025
manfredsteyer
PRO
0
270
マッチングアプリにおけるフリックUIで苦労したこと
yuheiito
0
190
A full stack side project webapp all in Kotlin (KotlinConf 2025)
dankim
0
150
dbt民主化とLLMによる開発ブースト ~ AI Readyな分析サイクルを目指して ~
yoshyum
3
1.1k
Model Pollution
hschwentner
1
160
フロントエンドのパフォーマンスチューニング
koukimiura
5
2k
Advanced Micro Frontends: Multi Version/ Framework Scenarios @WAD 2025, Berlin
manfredsteyer
PRO
0
390
Android 16KBページサイズ対応をはじめからていねいに
mine2424
0
440
「App Intent」よくわからんけどすごい!
rinngo0302
1
100
DMMを支える決済基盤の技術的負債にどう立ち向かうか / Addressing Technical Debt in Payment Infrastructure
yoshiyoshifujii
3
410
Flutterで備える!Accessibility Nutrition Labels完全ガイド
yuukiw00w
0
170
Featured
See All Featured
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.4k
Raft: Consensus for Rubyists
vanstee
140
7k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.9k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
21k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
How STYLIGHT went responsive
nonsquared
100
5.6k
KATA
mclloyd
30
14k
Writing Fast Ruby
sferik
628
62k
How GitHub (no longer) Works
holman
314
140k
A designer walks into a library…
pauljervisheath
207
24k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Transcript
Reckoner の Scala プロジェクトにおける オブザーバビリティの取り組み 2024/02/27 Scalaわいわい勉強会 #2 Copyright ©
3-shake, Inc. All Rights Reserved.
自己紹介 門脇 拓巳 (KADOWAKI Takumi) 株式会社スリーシェイク Incubation 事業部 Reckoner 開発チーム
RDAP と呼ばれる Scala 製バッチアプリケーションの 開発・運用に携わる X (Twitter): @nomadblacky GitHub: NomadBlacky
アジェンダ この発表の目的: - 誰に? - Scala アプリケーションを運用している人に - 何を? -
オブザーバビリティの概念を導入したら色々な良いことがあったよ オブザーバビリティの概要から、実際に Reckoner に適用していった事例をお 話します。
Copyright © 3-shake, Inc. All Rights Reserved. Reckoner の紹介 01
4
None
直感的な UI で複雑なデータ操作
多種多様なデータ連携先
アーキテクチャ RDAP2 と呼ばれるScala製バッチアプリ (Akka Stream)
運用での課題 - ユーザーからの問い合わせから原因の特定、修正まで時間がかかっていた - ユーザーがどのような設定でワークフローを実行していたのか、 どのような処理で失敗していたのか、追うことが困難だった - パフォーマンス改善に必要な情報がなかった - どの処理でどれだけ時間がかかっているのか、判断する要素がなかった
- エラーログから対応が必要なものか逐一確認する必要があった - エラーログが発生する度にアラートが鳴る運用になっており、 ログを確認する人的コストが肥大化していた
Copyright © 3-shake, Inc. All Rights Reserved. オブザーバビリティについて 02 10
オブザーバビリティとは? ざっくりと言えば… 「システムがどのような状態になったとしても、システム状態のデータからアプリケーショ ンで起こっていることをどれだけ理解し説明できるか (デバッグができるか) の尺度」 つまり… オブザーバビリティの概念を取り込むことで、 ユーザがいつ、どのような体験をしているのか が理解できるようになる!
詳しく知りたい方はこちらの本で
オブザーバビリティの構成要素 オブザーバビリティの基礎となる構成要素は 「任意の要素を持つ構造化イベント」 例えば、Web サーバへのリクエストでは… 実行コンテキスト - エンドポイント - HTTPヘッダー
- URLパラメータ - ユーザID ランタイム情報 - OS - JVM バージョン - コンテナID - リージョン ビルド情報 - アプリバージョン - コミットハッシュ - リポジトリURL … これらの要素が多ければ多いほど 要素をかけ合わせるパターンが増えて、 柔軟なデバッグが可能になる!
代表的な要素 メトリクス 定期的に収集される統計データ CPU使用率、メモリ使用率 etc. ログ アプリケーションから出力されるテキストデータ トレース 「いつ、どのような処理が、どれぐらい時間がかかったか」を可視化するデータ ※これらをまとめて「テレメトリーデータ」と呼ぶ
今回のメイン
Copyright © 3-shake, Inc. All Rights Reserved. Scala プロジェクト (RDAP2)
に オブザーバビリティを導入する 03 14
RDAP2 におけるオブザーバビリティのアーキテクチャ OpenTelemetry API dd-java-agent
RDAP2 におけるオブザーバビリティのアーキテクチャ - dd-java-agent - 監視 SaaS である Datadog が公式に提供している
Java Agent - 起動時に java コマンドのオプションとして組み込む - HTTP リクエストや DB へのクエリなど、 一般的なライブラリやフレームワークの処理を自動で 計装することができる - OpenTelemetry - メトリクス、トレース、ログなどのテレメトリーデータを収集・転送する仕組みは監視ベンダごとに異な る実装になっていた - この仕組みを統一化し、ベンダロックインされない仕組みを作ろうと生まれたプロジェクト - ベンダに依存しないテレメトリーデータを様々なプログラミング言語で扱うことができる RDAP2 では主に、 IO 処理を dd-java-agent、ビジネスロジックを OpenTelemetry で計装 アプリケーションに テレメトリーデータを 組み込むこと
dd-java-agent によるトレースの自動計装 build.sbt sbt-native-packager sbt-javaagent dd-java-agent の設定
OpenTelemetry API によるトレースの手動計装 OpenTelemetry API の簡易ラッパー エラー時は内容を記録 (後述)
OpenTelemetry API によるトレースの手動計装 スパンにメタデータを付与 ActorSystem の初期化時間を計測 ブロックで囲むことで スパン (トレースにおけるいち処理の単位 )
を表現
できあがったもの
Copyright © 3-shake, Inc. All Rights Reserved. オブザーバビリティ を導入してどうなった? 04
21
タスクの実行内容を詳細に確認できるようになった!
「失敗したタスクのうち、 BigQuery API の 5xx エラーを含むトレース」 といった柔軟な検索が可能に
SQLなどのクエリ内容を確認できる デバッグに役立つ様々な情報をトレースが提供してくれる
非効率な処理を見つけることができるようになった! 本来は並列で実行できるが 直列実行になってしまっている …
非効率な処理を見つけることができるようになった! Monix Task の使い方を誤っていた …
非効率な処理を見つけることができるようになった! 並列で実行されていることがトレースでも 確認できた! 数十分かかっていた処理が数十秒に短縮!
エラーを収集して品質改善に活かせるようになった! Datadog の Error Tracking を使ってエラーを収集 自動でエラーのクラスタリングと集計を行ってくれる
エラー切り分けの工数削減し、 ナレッジ共有ができるようになった! 週1回、エラーの内容を確認する会を実施 エラーの詳細ページではスタックトレースや スパンに追加したメタ情報を確認可能
Copyright © 3-shake, Inc. All Rights Reserved. まとめ 05 30
まとめ Reckoner とは - 直感的な UI でデータ連携を実現する、クラウド型の ETL SaaS オブザーバビリティとは
- アプリケーションの状態を把握して、デバッグできるかの尺度 Scala プロジェクトにオブザーバビリティを導入することで - アプリケーションの実行内容を詳細に確認することができるようになった! - 非効率な処理を見つけて修正できるようになった! - エラーを収集して品質改善に活かせるようになった!
最後に Reckoner では Scala エンジニアを募集しています! - https://jobs-3-shake.com/ - https://hrmos.co/pages/threeshake/jobs/E_0220 連携先の追加、既存連携先の機能強化、
Java アップデート、Scala3 対応、Akka 移行、 オブザーバビリティの強化… やること盛りだくさんで人手が足りません 😭