Share
Embed
データベースにオブザーバビリティを注入する
3-shake SRE Tech Talk #9
Database Special
https://3-shake.connpass.com/event/311868/
分散アーキテクチャではその複雑さに対応するためにオブザーバビリティエンジニアリングのプラクティスが適用されてきましたが、データベースはスコープ外とすることが多いです。本セッションでは分散アーキテクチャの一部であるデータベースにもo11yを導入する手法を紹介します。
nnaka2992
March 29, 2024
Transcript
44 slides
-
\du 2 株式会社スリーシェイク Sreake事業部 業務内容 • DBRE兼SRE見習い ◦ クラウドもオンプレも分からない ◦
データベースも分からない • 自称データ雑用係 ◦ DBAでもDBREでもデータエンジニアでも 最近注目しているデータベース • Tsurugi • YugabyteDB 中楯 直希 @nnaka2992 @nnaka2992.bsky.social -
• 対象 ◦ データベースエンジニア ◦ データベースにもオブザーバビリティを導入したいエンジニア • 伝えたいこと ◦ データベースにおけるオブザーバビリティのメリット
◦ データベースへのオブザーバビリティの導入方法 この資料のコンセプト 3 -
オブザーバビリティとは? 6 「オブザーバビリティ」とは、 システムがどのような状態 になったとしても、それがどんなに斬新で奇妙なもので あっても、どれだけ理解し説明できるかを示す尺度で す。 1章 オブザーバビリティとは? より オブザーバビリティ・エンジニアリング
https://www.oreilly.co.jp/books/9784814400126/ -
オブザーバビリティとは?: オブザーバビリティの必要性 7 • 分散システムではログとメトリクスのみでは原因にたどり着けなくなった • 漸近的デリバリーによりシステムが複数の状態を持つようになった • ポストモーテムのための証跡として正確で詳細なデータが必要になった •
運用に参加する人が増えるため誰もがシステムの状態を把握できる必要が発生し た • 従来の監視では事前に想定したことしか分からなかった -
オブザーバビリティとは?: オブザーバビリティの3本柱 8 オブザーバビリティでは以下が3つの柱と呼ばれている 1. メトリクス 2. ログ 3. トレース
※ 最近はここにイベント・プロファイル・例外を加えて TEMPLEと言われたりしている TEMPLE: Six Pillars of Observability https://medium.com/@YuriShkuro/temple-six-pillars-of-observability-4ac3e3deb402 -
オブザーバビリティとは?: オブザーバビリティの3本柱 13 トレース • 分散トレーシングやリクエストの構造化ログ • Oracle DatabaseやPostgreSQLなどのトレースとは異なる •
分散システム間の因果関係を E2Eで表現する • システム全体を通して理解を深めるのに役立つ -
オブザーバビリティとは?: オブザーバビリティの3本柱 15 昨今では OpenTelemetry という標準化された実装を利用して メトリクス・ログ・トレース (= Telemetry) を収集し、出力することが
デファクトになっている ※ 2024/3/29時点で11言語が対応(開発中の機能あり) OpenTelemetry https://opentelemetry.io/ -
今回は以下のように言葉を使い分けます • オブザーバビリティ (可観測性) ◦ サービスやコンポーネントをまたいで監視ができる監視手法 ◦ サービスやコンポーネントをまたいで監視ができている状態 • 監視・モニタリング
◦ サービス・コンポーネント単位などで監視が独立している監視手法 ◦ サービス・コンポーネント単位で監視画面やツールが分離している状態 オブザーバビリティとは?: 言葉の使い分け 17 -
• モニタリングは問題が発生したとき通知する仕組み ◦ 既知の障害の未知な状態 (= 既知の未知) に対処するために最適化されている • オブザーバビリティはアプリケーションの振る舞いを理解する取り組み ◦
これまで認識されていない障害 (= 未知の未知) に発見するために最適化されている オブザーバビリティとは?: モニタリングとの使い分け 18 どちらかだけではなく適切に組み合わせて使うことが重要 -
データベースモニタリングの現状 : データベースの監視項目 20 データベースの監視では大きく分けて5つの監視項目がある 1. 性能障害の監視 2. エラー障害の監視 3.
可用性障害の監視 4. セキュリティ障害の監視 5. データ障害の監視 何から始めるべき?どこまでやるべき?予防保守と運用設計のススメ https://www.oracle.com/webfolder/technetwork/jp/ondemand/yobohoshu/yobohoshu-no2.pdf -
データベースモニタリングの現状 : データベースの監視項目 21 データベースの監視では大きく分けて5つの監視項目がある 1. 性能障害の監視 2. エラー障害の監視 3.
可用性障害の監視 4. セキュリティ障害の監視 5. データ障害の監視 下に近づくほどオブザーバビリティの 文脈から遠ざかる ※ 既知の未知に近づく -
データベースモニタリングの現状 : データベースの監視項目 22 データベースの監視では大きく分けて5つの監視項目がある 1. 性能障害の監視 2. エラー障害の監視 3.
可用性障害の監視 4. セキュリティ障害の監視 5. データ障害の監視 今回は性能障害とエラー障害を中心に データベースのオブザーバビリティを考えていく -
データベースモニタリングの現状 : データベースの監視項目 23 性能障害の監視 • 問い合わせや索引の再構築のスローダウンを監視する • 例 ◦
問い合わせ応答速度の低下 ◦ データベースバックアップ処理時間の増加 ◦ テーブル・インデックス再構築時間の増加 -
データベースモニタリングの現状 : データベースの監視項目 24 エラー障害の監視 • データベース内で発生するシステムエラーを監視する • 例 ◦
表領域やディスク容量の不足による問い合わせの失敗 ◦ メモリやコネクション数などのリソース枯渇 ◦ INSERT・UPDATE時の制約違反などアプリケーションによる 誤った問い合わせ -
データベースモニタリングの現状 : 典型的なデータベース監視の手法 26 従来の典型的なデータベース監視は以下のような方法で行われることが多い 1. データベースサーバの異常を検知する a. CPU使用率やメモリ使用率といったメトリクスが閾値を超える b.
エラー発生数が閾値を超える 2. スロークエリログを検知 a. 発行されたクエリの実行時間が閾値を超える アプリケーションの影響が大きい部分はリリースによって新規の問題が発生し やすい -
データベースモニタリングの現状 : 典型的なデータベース監視の手法 27 従来の典型的なデータベース監視は以下のような方法で行われることが多い 1. データベースサーバの異常を検知する a. CPU使用率やメモリ使用率といったメトリクスが閾値を超える b.
エラー発生数が閾値を超える 2. スロークエリログを検知 a. 発行されたクエリの実行時間が閾値を超える • DBとアプリケーションが分離していることで問題のクエリを発行した場所 が特定しずらく、問題解消が長引く • アプリケーション実装によってはスロークエリログだけでは 顕在化しない場合がある ◦ N+1 や複数回のクエリ実行など オブザーバビリティエンジニアリングの技術で解決できる!!! -
データベースにオブザーバビリティを導入する : 計装方法 33 データベースとアプリケーションを接続する方法 • アプリケーションから発行するクエリにトレース情報を組み込む ◦ クエリにコメントとして付与することで達成が可能 ?
OpenTelmetry では SQL への トレース差し込みがサポートされ ていない OpenTelemetry (アプリケーション) データベース -
データベースにオブザーバビリティを導入する : 計装ツール 34 トレース情報をSQLに組み込むツールでデファクトは今の所ない • 言語に依存しないもの ◦ sqlcommenter ▪
Go, Python, Php, Ruby, Node.js, Java に対応 ◦ Uptrace ▪ Go, Python に対応 • トレース組み込みをサポートしている ORM ◦ Node.js: Prisma ◦ Go: GORM • その他 ◦ 手動でSQLにコメントを付与する仕組みを作成する -
以下の構成でデータベースの計装を試してみる データベースにオブザーバビリティを導入する : デモ 35 API Endpoint Cloud Run ORM
SQLCommenter Cloud Operation Cloud Trace Cloud Logging Cloud SQL OpenTelemetry ORMに トレース情報を伝搬 トレース情報を伝搬 トレース情報を付与した SQLを実行 SQLの結果を送信 トレース情報付きの SQLログを保存 SQLログを参照 トレースを送信 HTTP Request HTTP Response Client -
データベースにオブザーバビリティを導入する : デモ 37 SQLへのトレース埋め込みを行うように変更を加える import ( "database/sql" _ "github.com/jackc/pgx/v4/stdlib"
) func NewDB(connStr string) (*sql.DB, error) { db, err := sql.Open("pgx", connStr) 〜後略〜 -
データベースにオブザーバビリティを導入する : デモ 38 SQLへのトレース埋め込みを行うように変更を加える import ( "database/sql" _ "github.com/jackc/pgx/v4/stdlib"
gosql "github.com/google/sqlcommenter/go/database/sql" sqlcommentercore "github.com/google/sqlcommenter/go/core" ) func NewDB(connStr string) (*sql.DB, error) { db, err := gosql.Open("pgx", connStr, sqlcommentercore.CommenterOptions{ Config: sqlcommentercore.CommenterConfig{}, }, ) 〜後略〜 -
まとめ 41 • オブザーバビリティをデータベースにまで広げることでより広域なアプリケーションの 振る舞いを理解できる ◦ データベースエンジニアがアプリケーションを理解でき、アプリケーションエンジニアが問題のあるク エリを認識できるようになる • 従来のモニタリングも重要
◦ オブザーバビリティエンジニアの手法で未知の未知を発見することでモニタリングで扱いやすい既知 の未知になる • コードを数行追加するだけでSQLも計装出来る -
42 参考資料 42 • オブザーバビリティ・エンジニアリング ◦ https://www.oreilly.co.jp/books/9784814400126/ • Distributed Systems
Observability ◦ https://learning.oreilly.com/library/view/distributed-systems-observability/9781492033431/ • 入門 監視 ◦ https://www.oreilly.co.jp/books/9784873118642/ • TEMPLE: Six Pillars of Observability ◦ https://medium.com/@YuriShkuro/temple-six-pillars-of-observability-4ac3e3deb402 • オブザーバビリティとは?監視との違い、必要性について解説 ◦ https://newrelic.com/jp/blog/best-practices/what-is-observability-difference-from-monitoring • 何から始めるべき?どこまでやるべき?予防保守と運用設計のススメ ◦ https://www.oracle.com/webfolder/technetwork/jp/ondemand/yobohoshu/yobohoshu-no2.pdf -
43 参考資料 43 • データベースのオブザーバビリティについて | Cloud SQL for PostgreSQL
◦ https://cloud.google.com/sql/docs/postgres/observability?hl=ja • Cloud SQL におけるデータベース オブザーバビリティの決定版ガイド : パート 1 ◦ https://cloud.google.com/blog/ja/products/databases/guide-to-the-database-observability-with-cloud-sql • Sqlcommenter のご紹介: オープンソース ORM の自動インストルメンテーション ライブラリ ◦ https://cloud.google.com/blog/ja/products/databases/introducing-sqlcommenter-open-source-orm-auto-instrumentation-li brary • オブザーバビリティ(可観測性)がなぜ必要だと考えるのか ◦ https://ymotongpoo.hatenablog.com/entry/2019/03/25/084500 • オブザーバビリティについて理解する (収集・分析・可視化) ◦ https://sreake.com/blog/observability/ -
44 参考資料 44 • OpenTelemetry ◦ https://opentelemetry.io/ • sqlcommenter ◦
https://google.github.io/sqlcommenter/ • uptrace ◦ https://uptrace.dev/ • go-gorm/opentelemetry ◦ https://github.com/go-gorm/opentelemetry • OpenTelemetry tracing (Preview) | Prisma Docs ◦ https://www.prisma.io/docs/orm/prisma-client/observability-and-logging/opentelemetry-tracing