Upgrade to Pro — share decks privately, control downloads, hide ads and more …

データベースにオブザーバビリティを注入する

 データベースにオブザーバビリティを注入する

3-shake SRE Tech Talk #9
Database Special
https://3-shake.connpass.com/event/311868/

分散アーキテクチャではその複雑さに対応するためにオブザーバビリティエンジニアリングのプラクティスが適用されてきましたが、データベースはスコープ外とすることが多いです。本セッションでは分散アーキテクチャの一部であるデータベースにもo11yを導入する手法を紹介します。

nnaka2992

March 29, 2024
Tweet

More Decks by nnaka2992

Other Decks in Technology

Transcript

  1. \du 2 株式会社スリーシェイク Sreake事業部 業務内容 • DBRE兼SRE見習い ◦ クラウドもオンプレも分からない ◦

    データベースも分からない • 自称データ雑用係 ◦ DBAでもDBREでもデータエンジニアでも 最近注目しているデータベース • Tsurugi • YugabyteDB 中楯 直希 @nnaka2992 @nnaka2992.bsky.social
  2. オブザーバビリティとは?: オブザーバビリティの3本柱 8 オブザーバビリティでは以下が3つの柱と呼ばれている 1. メトリクス 2. ログ 3. トレース

    ※ 最近はここにイベント・プロファイル・例外を加えて TEMPLEと言われたりしている TEMPLE: Six Pillars of Observability https://medium.com/@YuriShkuro/temple-six-pillars-of-observability-4ac3e3deb402
  3. 今回は以下のように言葉を使い分けます • オブザーバビリティ (可観測性) ◦ サービスやコンポーネントをまたいで監視ができる監視手法 ◦ サービスやコンポーネントをまたいで監視ができている状態 • 監視・モニタリング

    ◦ サービス・コンポーネント単位などで監視が独立している監視手法 ◦ サービス・コンポーネント単位で監視画面やツールが分離している状態 オブザーバビリティとは?: 言葉の使い分け 17
  4. • モニタリングは問題が発生したとき通知する仕組み ◦ 既知の障害の未知な状態 (= 既知の未知) に対処するために最適化されている • オブザーバビリティはアプリケーションの振る舞いを理解する取り組み ◦

    これまで認識されていない障害 (= 未知の未知) に発見するために最適化されている オブザーバビリティとは?: モニタリングとの使い分け 18 どちらかだけではなく適切に組み合わせて使うことが重要
  5. データベースモニタリングの現状 : データベースの監視項目 20 データベースの監視では大きく分けて5つの監視項目がある 1. 性能障害の監視 2. エラー障害の監視 3.

    可用性障害の監視 4. セキュリティ障害の監視 5. データ障害の監視 何から始めるべき?どこまでやるべき?予防保守と運用設計のススメ https://www.oracle.com/webfolder/technetwork/jp/ondemand/yobohoshu/yobohoshu-no2.pdf
  6. データベースモニタリングの現状 : データベースの監視項目 21 データベースの監視では大きく分けて5つの監視項目がある 1. 性能障害の監視 2. エラー障害の監視 3.

    可用性障害の監視 4. セキュリティ障害の監視 5. データ障害の監視 下に近づくほどオブザーバビリティの 文脈から遠ざかる ※ 既知の未知に近づく
  7. データベースモニタリングの現状 : データベースの監視項目 22 データベースの監視では大きく分けて5つの監視項目がある 1. 性能障害の監視 2. エラー障害の監視 3.

    可用性障害の監視 4. セキュリティ障害の監視 5. データ障害の監視 今回は性能障害とエラー障害を中心に データベースのオブザーバビリティを考えていく
  8. データベースモニタリングの現状 : データベースの監視項目 23 性能障害の監視 • 問い合わせや索引の再構築のスローダウンを監視する • 例 ◦

    問い合わせ応答速度の低下 ◦ データベースバックアップ処理時間の増加 ◦ テーブル・インデックス再構築時間の増加
  9. データベースモニタリングの現状 : データベースの監視項目 24 エラー障害の監視 • データベース内で発生するシステムエラーを監視する • 例 ◦

    表領域やディスク容量の不足による問い合わせの失敗 ◦ メモリやコネクション数などのリソース枯渇 ◦ INSERT・UPDATE時の制約違反などアプリケーションによる 誤った問い合わせ
  10. データベースモニタリングの現状 : 典型的なデータベース監視の手法 26 従来の典型的なデータベース監視は以下のような方法で行われることが多い 1. データベースサーバの異常を検知する a. CPU使用率やメモリ使用率といったメトリクスが閾値を超える b.

    エラー発生数が閾値を超える 2. スロークエリログを検知 a. 発行されたクエリの実行時間が閾値を超える アプリケーションの影響が大きい部分はリリースによって新規の問題が発生し やすい
  11. データベースモニタリングの現状 : 典型的なデータベース監視の手法 27 従来の典型的なデータベース監視は以下のような方法で行われることが多い 1. データベースサーバの異常を検知する a. CPU使用率やメモリ使用率といったメトリクスが閾値を超える b.

    エラー発生数が閾値を超える 2. スロークエリログを検知 a. 発行されたクエリの実行時間が閾値を超える • DBとアプリケーションが分離していることで問題のクエリを発行した場所 が特定しずらく、問題解消が長引く • アプリケーション実装によってはスロークエリログだけでは 顕在化しない場合がある ◦ N+1 や複数回のクエリ実行など オブザーバビリティエンジニアリングの技術で解決できる!!!
  12. データベースにオブザーバビリティを導入する : 計装ツール 34 トレース情報をSQLに組み込むツールでデファクトは今の所ない • 言語に依存しないもの ◦ sqlcommenter ▪

    Go, Python, Php, Ruby, Node.js, Java に対応 ◦ Uptrace ▪ Go, Python に対応 • トレース組み込みをサポートしている ORM ◦ Node.js: Prisma ◦ Go: GORM • その他 ◦ 手動でSQLにコメントを付与する仕組みを作成する
  13. 以下の構成でデータベースの計装を試してみる データベースにオブザーバビリティを導入する : デモ 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
  14. データベースにオブザーバビリティを導入する : デモ 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{}, }, ) 〜後略〜
  15. 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
  16. 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/
  17. 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