- Rate : =Throughput, 秒間リクエスト数, 秒間 PV 数
- Error Rate : エラー率, 5xx とか
- Duration : =ResponseTime, %ile 評価が一般的
リソース監視(USE)http://www.brendangregg.com/usemethod.html
- Utilization : 使用率 E.g. CPU 使用率
- Saturation : 飽和度, どれくらいキューに詰まっているか
E.g. ロードアベレージ - Errors : エラーイベントの数
性能試験時のクライアント
Jmeter のメトリクスを収集
BackendListner->InfluxDB->Grafana
| メトリクス | USE x RED | |
|---|---|---|
| Throughput | R | |
| ResponseTime | D | |
| Error% | E |
Istio のテレメトリ機能で各 service のメトリクスを収集
https://github.com/kashinoki38/prometheus-sample-yaml/blob/master/grafana/Istio-Mesh-Dashboard.json
https://github.com/kashinoki38/prometheus-sample-yaml/blob/master/grafana/Istio-Workload-Dashboard.json
https://github.com/kashinoki38/prometheus-sample-yaml/blob/master/grafana/Istio-Service-dashboard.json
| メトリクス | USE x RED | Prometheus | |
|---|---|---|---|
| Throughput | R | o | |
| ResponseTime | D | o | |
| Error% | E | o |
• 各言語のクライアントライブラリ使って Prometheus にメトリクスとして送る(request_duration_seconds をヒストグラム集計) https://github.com/devopsdemoapps/sockshop/search?q=request_duration_seconds&unscoped_q=request_duration_seconds
- go
- github.com/prometheus/client_golang/prometheus
- https://github.com/devopsdemoapps/sockshop/blob/13041ac53907b1de51f39160e6ed5be7efdc8bf7/payment/wiring.go#L17
- nodejs
- java
TBD
| メトリクス | USE x RED | Prometheus | Grafana Dashboard | Prometheus metrics | |
|---|---|---|---|---|---|
| Throughput | request_duration_seconds をヒストグラム集計 | R | o | TBD | |
| ResponseTime | D | o | |||
| Error% | E | o |
NodeExporter と cAdvisor にて収集
| メトリクス | USE x RED | Prometheus | |
|---|---|---|---|
| Node Availability | ノード全体の稼働率 各ノードの Ready 時間合計/(集計期間 × ノード数) |
Availability | |
| Node 数 | Availability | o | |
| unschedulable Node 数 | Availability | o | |
| Node の詳細 kubernetes.node.name,各リソース量 |
Conf | o | |
| Pods Availability | Available Pods 数 | Availability | o |
| Pods status Running / Pending / Failed / Unknown |
Availability | o | |
| Container Availability | Containers status Ready / Terminated / Waiting / Running |
Availability | o |
| Deployment Count | Deployment Count | Availability | o |
| StatefulSet Count | StatefulSet Count | Availability | o |
| DaemonSet Count | DaemonSet Count | Availability | o |
| Job Count | Job Count | Availability | o |
| Failed Job Count | Availability | o |
Node Exporter で収集
| メトリクス | USE x RED | Prometheus | |
|---|---|---|---|
| Node Availability | ノード全体の稼働率 各ノードの Ready 時間合計/(集計期間 × ノード数) |
Availability | o |
| Node 数 | Availability | o | |
| unschedulable Node 数 | Availability | o | |
| Node の詳細 kubernetes.node.name,各リソース量 |
Conf | o | |
| pods | Pods Allocatable | Conf | o |
| Pods Capacity | Conf | o | |
| Pods Allocation | o | ||
| CPU | CPU 使用率 | U | o |
| CPU 使用率コアごと | U | o | |
| ロードアベレージ | S | o | |
| CPU Core Capacity | Conf | o | |
| CPU Core Limits | Conf | o | |
| CPU Core Requests | Conf | o | |
| CPU Core Allocatable | Conf | o | |
| メモリ | メモリ使用量 | U | o |
| スワップイン量 | S | o | |
| スワップアウト量 | S | o | |
| スワップ使用率 | S | o | |
| スワップサイズ | S | o | |
| Memory Capacity | Conf | o | |
| Memory Limits | Conf | o | |
| Memory Requests | Conf | o | |
| Memory Allocatable | Conf | o | |
| ディスク | ディスクビジー率 | U | o |
| ディスク I/O 待ち数 | S | o | |
| ディスク I/O 待ち時間 | S | o | |
| ディスク読込み量 | U | o | |
| ディスク書込み量 | U | o | |
| ディスク読込み回数 | U | o | |
| ディスク書込み回数 | U | o | |
| パーティション使用率 | U | o | |
| パーティションサイズ | U | o | |
| inode 総数/使用率 | U | o | |
| ネットワーク | 送信トラフィック量 | U | o |
| 受信トラフィック量 | U | o | |
| ポート/Socket | U | ||
| Drops | E | o | |
| Errs | E | o | |
| ping | Availability | ||
| ファイルディスクリプタ | U | o | |
| プロセス | プロセス数 | U | |
| プロセス数(ゾンビ) | U | ||
| 占有プロセス状況(プロセスキューサイズ) | U |
cAdvisor にて収集 (Kubelet バイナリに統合されているので scrape の設定のみで OK)
https://github.com/kashinoki38/prometheus-sample-yaml/blob/master/grafana/pod_detail-dashboard.json
| メトリクス | USE x RED | Prometheus | |
|---|---|---|---|
| Pods Availability | Available Pods 数 | Availability | o |
| Pods Restarts | Availability | o | |
| Pods status Running / Pending / Failed / Unknown |
Availability | o | |
| Container Availability | Restarts | Availability | o |
| Errors Terminated Reason Waiting Reason Restart Reason |
E | o | |
| Containers status Ready / Terminated / Waiting / Running |
Availability | o | |
| CPU | CPU 使用率 | U | o |
| ロードアベレージ | S | o | |
| Throttle | S | o | |
| CPU Core Limits | Conf | o | |
| CPU Core Requests | Conf | o | |
| メモリ | メモリ使用量 | U | o |
| スワップイン量 | S | x | |
| スワップアウト量 | S | x | |
| スワップ使用量 | S | o | |
| スワップサイズ | S | x | |
| Memory Limits | Conf | o | |
| Memory Requests | Conf | o | |
| ディスク | ディスクビジー率 | U | o |
| ディスク I/O 待ち数 | S | o | |
| ディスク I/O 待ち時間 | S | o | |
| ディスク読込み量 | U | o | |
| ディスク書込み量 | U | o | |
| ディスク読込み回数 | U | o | |
| ディスク書込み回数 | U | o | |
| パーティション使用率 | U | o | |
| パーティションサイズ | U | △ | |
| inode 総数/使用率 | U | o | |
| ネットワーク | 送信トラフィック量 | U | o |
| 受信トラフィック量 | U | o | |
| ポート/Socket | U | △ | |
| Drops | E | o | |
| Errs | E | o | |
| ping | Availability | ||
| ファイルディスクリプタ | U | △ |
kubelet の metics エンドポイントから収集
https://github.com/kashinoki38/prometheus-sample-yaml/blob/master/grafana/pv-dashboard.json
| メトリクス | USE x RED | Prometheus | |
|---|---|---|---|
| ファイルシステム | ディスク領域使用量 | U | o |
| inode 総数/使用率 | U | o |
TBD
| メトリクス | USE x RED | Prometheus | |
|---|---|---|---|
| コネクション数 | Active / Dropped | S | |
| スループット | request per sec | R | |
| HTTP | レスポンスコード | E | |
| レイテンシ | Response Time | D | |
| Network bytes |
SpringBoot2 系以降から実装の、Micrometer Actuator を使用
(pom.xml 変更のみで良いはず)
| メトリクス | USE x RED | Prometheus | |
|---|---|---|---|
| ヒープメモリ | 全体ヒープメモリ使用量 | U | o |
| Young | U | o | |
| Old | U | o | |
| Metaspace | U | o | |
| Code Cache | U | o | |
| GC | 頻度(Full/Young) | S | o |
| 時間(Full/Young) | S | o | |
| レスポンスタイム | レスポンスタイム | D | ? |
| レスポンスコード | レスポンスコード | E | ? |
| スレッド数 | スレッド数 | S | o |
| 空きスレッド数 | 空きスレッド数 | Conf | ? |
| スレッドプール使用率 | スレッドプール使用率 | S | ? |
| コネクションプール使用数 | コネクションプール使用数 | S | ? |
golang クライアントライブラリの promhttp を使用
https://github.com/prometheus/client_golang/tree/master/prometheus/promhttp
https://github.com/kashinoki38/prometheus-sample-yaml/blob/master/grafana/go-process-dashboard.json
| メトリクス | USE x RED | Prometheus | |
|---|---|---|---|
| Process Memory | U | o | |
| Memory Stats | U | o | |
| Goroutines | S | o | |
| GC duration | S | o |
nodejs クライアントライブラリの prom-client を使用
https://github.com/siimon/prom-client
https://github.com/kashinoki38/prometheus-sample-yaml/blob/master/grafana/nodejs-dashboard.json
| メトリクス | USE x RED | Prometheus | |
|---|---|---|---|
| Process Memory | U | o | |
| Active Handlers | S | o |
kube-api-server の metrics エンドポイントから収集
| メトリクス | USE x RED | Prometheus | |
|---|---|---|---|
| API コール | REST リクエスト数 | R | o |
| API リクエストレイテンシ | D | o | |
| API リクエストエラー | E | o | |
| Controller Manager から | ワークキューの追加率 | o | |
| ワークキューの待ち時間 | o | ||
| ワークキューの深さ | o | ||
| etcd から | etcd キャッシュエントリ | x | |
| etcd キャッシュのヒット/ミス率 | x | ||
| etcd キャッシュ期間 | x | ||
| リソース | メモリ使用量 | o | |
| CPU 使用量 | o | ||
| Go routine | o |
Controller manager の metrics エンドポイントから収集
デフォルトでエンドポイントを公開しないコンポーネントの場合、--bind-address フラグを使用して有効にする
TBD
| メトリクス | USE x RED | Prometheus | |
|---|---|---|---|
| インスタンス | kube-controller-manager インスタンスの数 | ||
| ワークキュー情報 | ワークキューのレイテンシー | ||
| ワークキューレート | |||
| ワークキューの深さ | |||
| kube-api | kube-api リクエストレート | ||
| kube-api リクエストレイテンシ | |||
| リソース | メモリ使用量 | ||
| CPU 使用量 | |||
| Go routine |
kube-scheduler の metrics エンドポイントから収集
デフォルトでエンドポイントを公開しないコンポーネントの場合、--bind-address フラグを使用して有効にする
TBD
| メトリクス | USE x RED | Prometheus | |
|---|---|---|---|
| Leader | Leader 変更回数 | ||
| Database 系 | DB サイズ | ||
| Disk 同期レイテンシ | |||
| Disk 操作 (fsync, commit) | |||
| Network | Client Trafic | ||
| Peer Trafic | |||
| Raft Proposal | |||
| Proposal Committed | |||
| Proposal Pending | |||
| grpc | |||
| snapshot | snapshot レイテンシ |
TBD
| メトリクス | USE x RED | Prometheus | |
|---|---|---|---|
| Scheduling | Scheduling レート | ||
| Scheduling レイテンシ | |||
| kube-api | kube-api リクエストレート | ||
| kube-api リクエストレイテンシ | |||
| リソース | メモリ使用量 | ||
| CPU 使用量 | |||
| Go routine | |||
| Leader | Leader 変更回数 |
kube-proxy の metrics エンドポイントから収集
デフォルトでエンドポイントを公開しないコンポーネントの場合、--bind-address フラグを使用して有効にする
TBD
| メトリクス | USE x RED | Prometheus | |
|---|---|---|---|
| Proxy ルール Sync | Proxy ルール Sync レート | R | |
| Proxy ルール Sync レイテンシ | D | ||
| Network Programming | Network Programming レート | R | |
| Network Programming レイテンシ | D | ||
| kube-api | kube-api リクエストレート | ||
| kube-api リクエストレイテンシ | |||
| リソース | メモリ使用量 | ||
| CPU 使用量 | |||
| Go routine |
各ノードの 10255 ポート
https://github.com/kashinoki38/prometheus-sample-yaml/blob/master/grafana/kubelet-dashboard.json
| メトリクス | USE x RED | Prometheus | |
|---|---|---|---|
| インスタンス | kubelet インスタンスの数 | Availability | o |
| ボリュームの数 | Availability | o | |
| error | error | E | o |
| オペレーション | 各タイプのランタイムオペレーションの総数 | U | o |
| オペレーションのエラーの数 ※コンテナランタイムの問題など、ノード内の低レベルの問題を示す良い指標 |
E | o | |
| オペレーションの間隔時間 | S | o | |
| Pod の管理 | ポッドのスタートレートと間隔時間 コンテナのランタイムまたはイメージへのアクセスの問題を示している可能性がある |
S | o |
| ポッドスタートオペレーションの数 | U | o | |
| ストレージ | ストレージオペレーション数 | U | o |
| ストレージオペレーションエラー | E | o | |
| ストレージオペレーション時間 | S | o | |
| Cgroup マネージャ | Cgroup マネージャのオペレーション数 | U | o |
| Cgroup マネージャのオペレーション時間 | S | o | |
| ポッドライフサイクルイベントジェネレータ | ポッドライフサイクルイベントジェネレーター(PLEG): relist レート、relist インターバル、relist 間隔時間。これらの値のエラーまたは過度の遅延は、ポッドの Kubernetes ステータスに問題を引き起こす可能性があ |
U | o |