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.2k
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
470
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
AIコーディングエージェント全社導入とセキュリティ対策
hikaruegashira
16
9.8k
実践!App Intents対応
yuukiw00w
1
250
What's new in Adaptive Android development
fornewid
0
140
パスタの技術
yusukebe
1
360
The State of Fluid (2025)
s2b
0
140
MCPで実現できる、Webサービス利用体験について
syumai
7
2.5k
AIのメモリー
watany
13
1.4k
書き捨てではなく継続開発可能なコードをAIコーディングエージェントで書くために意識していること
shuyakinjo
1
270
Strands Agents で実現する名刺解析アーキテクチャ
omiya0555
1
120
GitHub Copilotの全体像と活用のヒント AI駆動開発の最初の一歩
74th
7
2.6k
JetBrainsのAI機能の紹介 #jjug
yusuke
0
200
中級グラフィックス入門~効率的なメッシュレット描画~
projectasura
4
2.6k
Featured
See All Featured
Thoughts on Productivity
jonyablonski
69
4.8k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.9k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.6k
Being A Developer After 40
akosma
90
590k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
1k
Statistics for Hackers
jakevdp
799
220k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Typedesign – Prime Four
hannesfritz
42
2.8k
The Cost Of JavaScript in 2023
addyosmani
52
8.8k
GraphQLとの向き合い方2022年版
quramy
49
14k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
50
5.5k
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 移行、 オブザーバビリティの強化… やること盛りだくさんで人手が足りません 😭