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 プロジェクトにおける オブザーバビリティの取り組み / Observability Initiatives in Reckoner's Scala Project
Search
KADOWAKI Takumi
February 27, 2024
Programming
0
1.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
AWS CDK on Scala ~ Scalaでインフラ管理してみたはなし / Manage infrastructure with AWS CDK on Scala
nomadblacky
0
4.5k
Slinky で Scala.js 製 React Webアプリケーションを つくったはなし / How to build a Scala.js React web application in Slinky
nomadblacky
1
4.9k
面倒なことはScalaスクリプトにやらせよう / let scala scripts do the troublesome things
nomadblacky
0
890
Other Decks in Programming
See All in Programming
CSC307 Lecture 09
javiergs
PRO
1
500
Activities at Cairo Library
cairolibrary720
0
1.2k
Trial
cairolibrary720
1
130
Temporalを取り巻く仕様を整理する
sajikix
0
110
入社1ヶ月でここまでやった!Findy Toolsインフラ支援の最適化
rvirus0817
6
1.4k
しくじり先生 Image Matching Challenge 2024 編
goosehaaan
0
810
大規模マルチテナントを解決するYugabyteDBという選択肢
nnaka2992
1
250
Cloudflare Workers x AWS Lambdaの組み合わせユースケース / Cloudflare Workers x AWS Lambda Combination Use Case
seike460
PRO
2
310
Modern Angular: Renovation for Your Applications
manfredsteyer
PRO
0
140
Namespace on read
tagomoris
2
370
AHC035解説
terryu16
0
710
【Go言語】ジェネリクス
tomo1227
0
170
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
51
8.9k
4 Signs Your Business is Dying
shpigford
178
21k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.4k
How STYLIGHT went responsive
nonsquared
93
5k
Creatively Recalculating Your Daily Design Routine
revolveconf
214
11k
Writing Fast Ruby
sferik
623
60k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
20
7.2k
KATA
mclloyd
20
13k
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3.3k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
23
1.9k
Art, The Web, and Tiny UX
lynnandtonic
291
20k
Git: the NoSQL Database
bkeepers
PRO
423
64k
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 移行、 オブザーバビリティの強化… やること盛りだくさんで人手が足りません 😭