オブザーバビリティ・エンジニアリング

[cover photo]
TOPICS
System/Network
発行年月日
PRINT LENGTH
336
ISBN
978-4-8144-0012-6
原書
Observability Engineering
FORMAT
Print PDF EPUB
Ebook
3,960円
Ebookを購入する
Print
3,960円

本書は、近年のクラウドベースのソフトウェアシステム開発における設計プラクティスなどにおいて触れられる概念「オブザーバビリティ(可観測性)」に関する書籍です。オブザーバビリティとは何か、どのように役立てるのかなど、登場の背景から実践方法、組織、企業への適用といった幅広い視点で解説します。今後、ソフトウェアシステムの開発においてオブザーバビリティが果たすであろう、より大きな役割についても触れています。さらにSlackのゲスト寄稿者により、テストとデプロイプロセスへのオブザーバビリティの適用と、パイプラインによるテレメトリー管理についてのケーススタディを紹介。本書はソフトウェアに関わる多くの人々にとって今後より一般化するオブザーバビリティを知る第一歩となるでしょう。

本書に誤植などを発見された場合は問い合わせ窓口よりご連絡ください。

正誤表

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。

第1刷の正誤表

p16. 「1.6 オブザーバビリティを用いたデバッギング」の本文1行目

テレメトリーデータのカーディリティやディメンションを...

テレメトリーデータのカーディリティやディメンションを...

p61. 「5.5 まとめ」の第2段落

特定のサービスリクエストで起こるt特定の作業単位を表すために

特定のサービスリクエストで起こる特定の作業単位を表すために

目次

本書への賞賛
まえがき
序文

第Ⅰ部 オブザーバビリティへの道

1章 オブザーバビリティとは?
    1.1 オブザーバビリティの数学的定義
    1.2 オブザーバビリティのソフトウェアシステムへの適用
    1.3 ソフトウェアにおけるオブザーバビリティについての誤解
    1.4 なぜ今オブザーバビリティが重要なのか?
        1.4.1 これは本当にベストな方法なのでしょうか?
        1.4.2 なぜメトリクスとモニタリングでは不十分なのか?
    1.5 メトリクスを用いたデバッグとオブザーバビリティの比較
        1.5.1 カーディナリティの役割
        1.5.2 ディメンションの役割 
    1.6 オブザーバビリティを用いたデバッギング
    1.7 オブザーバビリティは現代のシステムのためにある
    1.8 まとめ

2章 オブザーバビリティとモニタリングにおけるデバッグ方法の違い 
    2.1 モニタリングデータのデバッグへの活用方法
        2.1.1 ダッシュボードを使用する際のトラブルシューティング方法 
        2.1.2 直感によるトラブルシューティングの限界 
        2.1.3 従来のモニタリングは基本的にリアクティブである
    2.2 オブザーバビリティがより良いデバッグを可能にする理由
    2.3 まとめ

3章 オブザーバビリティを用いないスケーリングからの教訓
    3.1 Parseの紹介
    3.2 Parseでのスケーリング
    3.3 現代のシステムへの進化
    3.4 現代的な実践に向けた進化
    3.5 Parseにおけるプラクティスの変革
    3.6 まとめ

4章 オブザーバビリティとDevOps、SRE、クラウドネイティブとの関連性
    4.1 クラウドネイティブ、DevOps、SREクイックリファレンス
    4.2 オブザーバビリティ:デバッグの昔と今
    4.3 オブザーバビリティがDevOpsとSREのプラクティスを強化する
    4.4 まとめ

第Ⅱ部 オブザーバビリティの基礎 

5章 構造化イベントはオブザーバビリティの構成要素である
    5.1 構造化イベントを使ってデバッグする
    5.2 構成要素としてのメトリクスの限界
    5.3 構成要素としての従来のログの限界
        5.3.1 非構造化ログ
        5.3.2 構造化ログ
    5.4 デバッグに役立つイベントのプロパティ
    5.5 まとめ

6章 イベントをトレースにつなぐ
    6.1 分散トレースとその重要性
    6.2 トレースの構成要素
    6.3 トレースを地道に計装する
    6.4 トレーススパンへのカスタムフィールドの追加
    6.5 イベントをトレースにつなぐ 
    6.6 まとめ

7章 OpenTelemetryを使った計装
    7.1 入門計装
    7.2 オープンな計装標準 
    7.3 コードベースの例を用いた計装
        7.3.1 自動計装から始める
        7.3.2 カスタム計装を追加する 
        7.3.3 計装データをバックエンドシステムに送信する
    7.4 まとめ

8章 オブザーバビリティを実現するためのイベント解析
    8.1 既知の状態からのデバッグ
    8.2 第一原理からのデバッグ
        8.2.1 コア分析ループの使用 
        8.2.2 コア分析ループの総当り部分の自動化
    8.3 AIOpsの誤解を招く約束 
    8.4 まとめ

9章 オブザーバビリティとモニタリングの関係
    9.1 モニタリングが適した場所
    9.2 オブザーバビリティが適した場所
    9.3 考察: システム vsソフトウェア
    9.4 組織的なニーズを把握する
        9.4.1 例外: 無視できないインフラストラクチャのモニタリング
        9.4.2 実際の例 
    9.5 まとめ

第Ⅲ部 チームのためのオブザーバビリティ 

10章 オブザーバビリティへの取り組みをチームへ適用する
    10.1 コミュニティグループに参加する
    10.2 最大の問題点から始める
    10.3 作るより買う
    10.4 計装を繰り返し完成させる
    10.5 既存の努力を活用する機会を探す
    10.6 最後のひと押しに備える
    10.7 まとめ

11章 オブザーバビリティ駆動開発
    11.1 テスト駆動開発
    11.2 開発サイクルにおけるオブザーバビリティ
    11.3 デバッグする場所を決定する
    11.4 マイクロサービス時代のデバッグ
    11.5 計装でオブザーバビリティを駆動する
    11.6 オブザーバビリティをシフトレフトする
    11.7 オブザーバビリティを活用してソフトウェアデリバリーを高速化する 
    11.8 まとめ

12章 サービスレベル目標の信頼性向上への活用
    12.1 従来のモニタリング手法では危険なアラート疲れが発生する
    12.2 しきい値アラートは既知の未知のみに対応している
    12.3 ユーザー体験が道しるべ
    12.4 サービスレベル目標とはなにか?
        12.4.1 SLOによる信頼性の高いアラート
        12.4.2 SLOベースアラートに向けた文化の変化:ケーススタディ
    12.5 まとめ

13章 SLOベースのアラートへの対応とデバッグ
    13.1 エラーバジェットが枯渇するまえにアラートを出す
    13.2 時間をスライディングウィンドウとして捉える
    13.3 バーン予想アラート作成のための予測
        13.3.1 エラーバジェットを使い果たすとどうなるか
    13.4 オブザーバビリティデータ vs時系列データ: どちらをSLOに使用するか
    13.5 まとめ

14章 オブザーバビリティとソフトウェアサプライチェーン
    14.1 なぜSlackにはオブザーバビリティが必要なのか 
    14.2 計装:共有クライアントライブラリとディメンション
    14.3 ケーススタディ:サプライチェーンの運用
        14.3.1 ツールによるコンテキストの理解
        14.3.2 アクション可能なアラートの組み込み
        14.3.3 何が変わったのかを理解する
    14.4 まとめ

第Ⅳ部 大規模なオブザーバビリティ 

15章 投資収益性: 作るか、それとも買うか
    15.1 オブザーバビリティのROIをどう分析するか
    15.2 独自構築にかかる本当のコスト
        15.2.1 「フリー」ソフトウェアの隠れたコスト
        15.2.2 独自構築の利点
        15.2.3 独自構築のリスク
    15.3 ソフトウェアを買うときの本当のコスト
        15.3.1 商用ソフトウェアの隠れた財務的コスト
        15.3.2 商用ソフトウェアの隠れた非金銭的コスト 

        15.3.3 商用ソフトウェアを購入するメリット
        15.3.4 商用ソフトウェアを購入するリスク
    15.4 買うか作るかは二者択一ではない
    15.5 まとめ

16章 効率的なデータストア
    16.1 オブザーバビリティの機能要件
        16.1.1 時系列データベースはオブザーバビリティに欠ける
        16.1.2 その他のデータストアの可能性
        16.1.3 データストレージ戦略 

    16.2 事例: HoneycombのRetrieverの導入事例
        16.2.1 時間によるデータの分割 
        16.2.2 セグメント内の列ごとのデータ格納
        16.2.3 クエリーのワークロードを実行する
        16.2.4 トレースのクエリー
        16.2.5 リアルタイムでデータをクエリーする 
        16.2.6 階層化でリーズナブルに
        16.2.7 並列処理で高速化
        16.2.8 高カーディナリティへの対応
        16.2.9 スケーリング戦略と耐久性戦略
        16.2.10 効率的なデータストアを自前で構築する際の注意点
    16.3 まとめ

17章 安価で十分な精度にするためのサンプリング戦略
    17.1 データ収集の精度を上げるためのサンプリング
    17.2 サンプリング手法の使い分け
        17.2.1 一定確率サンプリング
        17.2.2 直近のリクエスト量に応じたサンプリング
        17.2.3 イベントの内容(キー)に基づくサンプリング
        17.2.4 過去データの手法とキーの手法を組み合わせる
        17.2.5 動的サンプリングでのオプションの選択
        17.2.6 いつトレースのサンプリングを判定するか
    17.3 サンプリング戦略をコードに置き換える
        17.3.1 ベースとなる例
        17.3.2 固定割合サンプリング
        17.3.3 サンプル割合を記録する
        17.3.4 一貫したサンプリング 
        17.3.5 目標割合サンプリング
        17.3.6 複数の静的サンプリング割合を持つ
        17.3.7 キーと目標割合を組み合わせたサンプリング
        17.3.8 任意数のキーに対応する動的サンプリング割合について
        17.3.9 すべてをまとめる:キー、目標割合、ヘッドとテイルを全部つかってサンプリングする
    17.4 まとめ

18章 パイプラインによるテレメトリー管理
    18.1 テレメトリーパイプラインの属性
        18.1.1 ルーティング
        18.1.2 セキュリティとコンプライアンス 
        18.1.3 ワークロードの分離 
        18.1.4 データバッファリング
        18.1.5 キャパシティ管理
        18.1.6 データのフィルタリングと補強
        18.1.7 データ変換 
        18.1.8 データの品質と一貫性を確保する
    18.2 テレメトリーパイプラインの管理:解剖学
    18.3 テレメトリーパイプラインの管理における課題
        18.3.1 性能
        18.3.2 正確性
        18.3.3 可用性
        18.3.4 信頼性
        18.3.5 分離
        18.3.6 データ鮮度
    18.4 事例: Slackでのテレメトリー管理
        18.4.1 メトリクスの集計
        18.4.2 ログおよびトレースイベント
    18.5 オープンソースの代替
    18.6 テレメトリーパイプラインの管理:構築と購入の比較
    18.7 まとめ

第Ⅴ部 オブザーバビリティの文化を拡大する 

19章 オブザーバビリティのビジネス事例
    19.1 変革をもたらすためのリアクティブなアプローチ
    19.2 オブザーバビリティの投資対効果
    19.3 変化を導入するためのプロアクティブなアプローチ
    19.4 オブザーバビリティをプラクティスとして導入する
    19.5 適切なツールを使う
        19.5.1 計装
        19.5.2 データの保持と分析 
        19.5.3 チームでツールを使い始める
    19.6 オブザーバビリティが十分であることを確認する
    19.7 まとめ

20章 オブザーバビリティの利害関係者と協力者
    20.1 非エンジニアリング的なオブザーバビリティの必要性の認識
    20.2 オブザーバビリティの協力者を作る実践
        20.2.1 カスタマーサポートチーム
        20.2.2 カスタマーサクセスチームと製品チーム
        20.2.3 営業チームと役員
    20.3 オブザーバビリティツールとビジネスインテリジェンスツールの使い分け
        20.3.1 クエリー実行時間
        20.3.2 精度
        20.3.3 最新性
        20.3.4 構造
        20.3.5 時間枠
        20.3.6 エフェメラリティ
    20.4 オブザーバビリティとBIツールの併用による実践的な使い方
    20.5 まとめ

21章 オブザーバビリティ成熟度モデル
    21.1 成熟度モデルについてのノート
    21.2 オブザーバビリティに成熟度モデルが必要な理由
    21.3 オブザーバビリティ成熟度モデルについて
    21.4 OMMで参照されるケイパビリティ
        21.4.1 システム障害にレジリエンスで対応する
        21.4.2 高品質なコードをデリバリーする
        21.4.3 複雑さと技術的負債に立ち向かう
        21.4.4 予測可能なケイデンスでリリースする
        21.4.5 ユーザーのふるまいを理解する 
    21.5 あなたの組織でオブザーバビリティ成熟度モデルを使う
    21.6 まとめ

22章 ここからどこへ
    22.1 オブザーバビリティ、当時と今
    22.2 追加の資料
    22.3 オブザーバビリティの行方についての予測

訳者あとがき
索引