入門Prometheus インフラとアプリケーションのパフォーマンスモニタリング
入門 Prometheus ―インフラとアプリケーションのパフォーマンスモニタリング
オライリー・ジャパン
著者:Brian Brazil
監訳:須田一輝
訳者:長尾高弘
監訳者まえがき
はじめに
第Ⅰ部 イントロダクション
1章 Prometheusとは何か
1.1 モニタリングとは何か
1.1.1 簡単で不完全なモニタリング小史
1.1.2 モニタリングのカテゴリ
1.2 Prometheusのアーキテクチャ
1.2.1 クライアントライブラリ
1.2.2 exporter
1.2.3 サービスディスカバリ
1.2.4 スクレイピング
1.2.5 ストレージ
1.2.6 ダッシュボード
1.2.7 レコーディングルールとアラート
1.2.8 アラート管理
1.2.9 長期記憶ストレージ
1.3 Prometheusは何ではないか
2章 初めてのPrometheus
2.1 Prometheusの実行
2.2 式ブラウザの使い方
2.3 Node exporterの実行
2.4 アラート
第Ⅱ部 アプリケーションのモニタリング
3章 インストルメンテーション
3.1 単純なプログラム
3.2 カウンタ
3.2.1 例外のカウント
3.2.2 サイズのカウント
3.3 ゲージ
3.3.1 ゲージの使い方
3.3.2 コールバック
3.4 サマリ
3.5 ヒストグラム
3.5.1 バケット
3.6 インストルメンテーションのユニットテスト
3.7 インストルメンテーションへのアプローチ
3.7.1 何をインストルメントすべきか
3.7.2 どの程度の量のインストルメンテーションをすべきか
3.7.3 メトリクスにはどのような名前を付けるべきか
4章 開示
4.1 Python
4.1.1 WSGI
4.1.2 Twisted
4.1.3 Gunicornによるマルチプロセス
4.2 Go
4.3 Java
4.3.1 HTTPServer
4.3.2 Servlet
4.4 Pushgateway
4.5 ブリッジ
4.6 パーサ
4.7 メトリクスの開示形式
4.7.1 メトリクスタイプ
4.7.2 ラベル
4.7.3 エスケープ
4.7.4 タイムスタンプ
4.7.5 メトリクスのチェック
5章 ラベル
5.1 ラベルとは何か
5.2 インストルメンテーションラベルとターゲットラベル
5.3 インストルメンテーション
5.3.1 メトリクス
5.3.2 複数のラベル
5.3.3 子
5.4 集計
5.5 ラベルのパターン
5.5.1 列挙
5.5.2 info
5.6 ラベルを使うべきとき
5.6.1 カーディナリティ
6章 Grafanaによるダッシュボードの作成
6.1 インストール
6.2 データソース
6.3 ダッシュボードとパネル
6.3.1 グラフの壁を避けよう
6.4 グラフパネル
6.4.1 時間の設定
6.5 シングルスタットパネル
6.6 テーブルパネル
6.7 テンプレート変数
第Ⅲ部 インフラストラクチャのモニタリング
7章 Node exporter
7.1 cpuコレクタ
7.2 filesystemコレクタ
7.3 diskstatsコレクタ
7.4 netdevコレクタ
7.5 meminfoコレクタ
7.6 hwmonコレクタ
7.7 statコレクタ
7.8 unameコレクタ
7.9 loadavgコレクタ
7.10 textfileコレクタ
7.10.1 textfileコレクタの使い方
7.10.2 タイムスタンプ
8章 サービスディスカバリ
8.1 サービスディスカバリのメカニズム
8.1.1 静的設定
8.1.2 ファイル
8.1.3 Consul
8.1.4 EC2
8.2 リラベル
8.2.1 スクレイプするものの選択
8.2.2 ターゲットラベル
8.3 スクレイプの方法
8.3.1 metric_relabel_configs
8.3.2 ラベルの衝突とhonor_labels
9章 コンテナとKubernetes
9.1 cAdvisor
9.1.1 CPU
9.1.2 メモリ
9.1.3 ラベル
9.2 Kubernetes
9.2.1 Kubernetes内でのPrometheusの実行
9.2.2 サービスディスカバリ
9.2.3 kube-state-metrics
10章 よく使われるexporter
10.1 Consul exporter
10.2 HAProxy exporter
10.3 Grok exprter
10.4 Blackbox exporter
10.4.1 ICMP
10.4.2 TCP
10.4.3 HTTP
10.4.4 DNS
10.4.5 Prometheusの設定
11章 ほかのモニタリングシステムとの連携
11.1 その他のモニタリングシステム
11.2 InfluxDB
11.3 StatsD
12章 exporterの書き方
12.1 Consulのtelemetry
12.2 カスタムコレクタ
12.2.1 ラベル
12.3 ガイドライン
第Ⅳ部 PromQL
13章 PromQL入門
13.1 集計の基礎
13.1.1 ゲージ
13.1.2 カウンタ
13.1.3 サマリ
13.1.4 ヒストグラム
13.2 セレクタ
13.2.1 マッチャ
13.2.2 インスタントベクトル
13.2.3 範囲ベクトル
13.2.4 オフセット
13.3 HTTP API
13.3.1 query
13.3.2 query_range
14章 集計演算子
14.1 グルーピング
14.1.1 without
14.1.2 by
14.2 演算子
14.2.1 sum
14.2.2 count
14.2.3 avg
14.2.4 stddevとstdvar
14.2.5 minとmax
14.2.6 topkとbottomk
14.2.7 quantile
14.2.8 count_values
15章 二項演算子
15.1 スカラの操作
15.1.1 算術演算子
15.1.2 比較演算子
15.2 ベクトルマッチング
15.2.1 一対一対応
15.2.2 多対一対応とgroup_left
15.2.3 多対多対応と論理演算子
15.3 演算子の優先順位
16章 関数
16.1 型変換
16.1.1 vector
16.1.2 scalar
16.2 数学関数
16.2.1 abs
16.2.2 ln、log2、log10
16.2.3 exp
16.2.4 sqrt
16.2.5 ceilとfloor
16.2.6 round
16.2.7 clamp_maxとclamp_min
16.3 日時
16.3.1 time
16.3.2 minute、hour、day_of_week、day_of_month、days_in_month、month、year
16.3.3 timestamp
16.4 ラベル
16.4.1 label_replace
16.4.2 label_join
16.5 欠損値とabsent
16.6 sortとsort_descによるソート
16.7 histogram_quantileによるヒストグラム作成
16.8 カウンタ
16.8.1 rate
16.8.2 increase
16.8.3 irate
16.8.4 resets
16.9 変化するゲージ
16.9.1 changes
16.9.2 deriv
16.9.3 predict_linear
16.9.4 delta
16.9.5 idelta
16.9.6 holt_winters
16.10 経時的集計
17章 レコーディングルール
17.1 レコーディングルールの使い方
17.2 レコーディングルールはいつ使うべきか
17.2.1 カーディナリティの削減
17.2.2 範囲ベクトル関数の作成
17.2.3 APIのためのルール
17.2.4 ルールの禁じ手
17.3 レコーディングルールの名前の付け方
第V部 アラート
18章 アラート
18.1 アラートルール
18.1.1 for
18.1.2 アラートのlabels
18.1.3 アノテーションとテンプレート
18.1.4 優れたアラートとは何か
18.2 Alertmanagerの設定
18.2.1 外部ラベル
19章 Alertmanager
19.1 通知パイプライン
19.2 設定ファイル
19.2.1 ルーティングツリー
19.2.2 レシーバ
19.2.3 抑止
19.3 Alertmanagerのウェブインタフェイス
第Ⅵ部 デプロイ
20章 本番システムへのデプロイ
20.1 ロールアウトのプランの立て方
20.1.1 Prometheusの成長
20.2 フェデレーションでグローバルへ
20.3 長期記憶ストレージ
20.4 Prometheusの実行
20.4.1 ハードウェア
20.4.2 構成管理
20.4.3 ネットワークと認証
20.5 障害対策
20.5.1 Alertmanagerのクラスタリング
20.5.2 メタモニタリングとクロスモニタリング
20.6 パフォーマンスの管理
20.6.1 問題の発見
20.6.2 コストが高いメトリクスとターゲットの発見
20.6.3 負荷の軽減
20.6.4 水平シャーディング
20.7 変更管理
20.8 困ったときの助けの求め方
索引
コラム目次
公式ライブラリと非公式ライブラリ
プルとプッシュ
メトリクスのサフィックス
累積ヒストグラム
SLAと分位数
バッチジョブのべき等性
/metricsでなければならないのか
マルチプロセスモードの舞台裏
予約済みラベルと
__name__
互換性を失わせる変更とラベル
テーブル例外
Promdashとコンソールテンプレート
エイリアシング
トップダウンとボトムアップ
正規表現
重複するジョブ
exporterのデフォルトポート
Blackboxのタイムアウト
期間の単位
quantile、histogram_quantile、quantile_over_time
アラートはオーナーを必要とする