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
1.6k
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
210
Scala アプリケーションのビルドを改善してデプロイ時間を 1/4 にした話 | How I improved the build of my Scala application and reduced deployment time by 4x
nomadblacky
1
680
AWS CDK on Scala ~ Scalaでインフラ管理してみたはなし / Manage infrastructure with AWS CDK on Scala
nomadblacky
0
4.6k
Slinky で Scala.js 製 React Webアプリケーションを つくったはなし / How to build a Scala.js React web application in Slinky
nomadblacky
1
5k
面倒なことはScalaスクリプトにやらせよう / let scala scripts do the troublesome things
nomadblacky
0
980
Other Decks in Programming
See All in Programming
layerx_20241129.pdf
kyoheig3
2
290
開発者とQAの越境で自動テストが増える開発プロセスを実現する
92thunder
1
180
Go の GC の不得意な部分を克服したい
taiyow
2
760
HTTP compression in PHP and Symfony apps
dunglas
2
1.7k
ゆるやかにgolangci-lintのルールを強くする / Kyoto.go #56
utgwkk
1
360
複雑な仕様に立ち向かうアーキテクチャ
myohei
0
170
数十万行のプロジェクトを Scala 2から3に完全移行した
xuwei_k
0
260
CSC305 Lecture 26
javiergs
PRO
0
140
今年のアップデートで振り返るCDKセキュリティのシフトレフト/2024-cdk-security-shift-left
tomoki10
0
190
アクターシステムに頼らずEvent Sourcingする方法について
j5ik2o
4
180
コンテナをたくさん詰め込んだシステムとランタイムの変化
makihiro
1
120
Refactor your code - refactor yourself
xosofox
1
260
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1366
200k
Building Better People: How to give real-time feedback that sticks.
wjessup
365
19k
Adopting Sorbet at Scale
ufuk
73
9.1k
Scaling GitHub
holman
458
140k
How to Ace a Technical Interview
jacobian
276
23k
Raft: Consensus for Rubyists
vanstee
137
6.7k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
Statistics for Hackers
jakevdp
796
220k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
247
1.3M
Building Applications with DynamoDB
mza
91
6.1k
Docker and Python
trallard
41
3.1k
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 移行、 オブザーバビリティの強化… やること盛りだくさんで人手が足りません 😭