『オブザーバビリティ・エンジニアリング』
https://gyazo.com/a458de287665ffdc87377b56362c8567
2023/1/27
DevOps関連の本?
アプリケーションのモニタリングの話か?
目次
本書への賞賛
まえがき
序文
第Ⅰ部 オブザーバビリティへの道
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.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.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.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.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.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 オブザーバビリティの行方についての予測
訳者あとがき
索引