関連ページ
Robust Perception とは
- Prometheus についてググってるとよく引っかかる Robust Perception とは Prometheus 関連で生計を立てている会社の様子
- なので、ブログの情報は超信頼していいと思う
- Prometheus のメンテナーである brian-brazil さんも Robust Perception のメンバー
メトリックのラベル名の数を減らす/違う Time Series になってしまうものを意図的に同じ TS にまとめる
- sum/max/min などの集計関数に
by (残したいラベル)
をつける - 例えば GKE 上に Prometheus を helm chart でインストールしていて
- preemptible node に node_exporter を乗せていた場合、再起動するたびに Node のアドレスが変わるため、別 Time Series になってしまう
- node_exporter から scrape された metrics の中には node_exporter が稼働する Node の IP アドレスが
instance
ラベルとして自動的に追加されるため
- node_exporter から scrape された metrics の中には node_exporter が稼働する Node の IP アドレスが
- Prometheus helm chart を upgrade した場合、
kube_*
metrics が別 Time Series になってしまうkube_*
metrics を提供する kube-state-metrics から scrape した metrics の中には、chart 名と chart version がchart
ラベルとして自動的に追加されるためchart="prometheus-9.1.0"
のような形で追加される
- preemptible node に node_exporter を乗せていた場合、再起動するたびに Node のアドレスが変わるため、別 Time Series になってしまう
- 例
- Node ごとのインスタンス起動時間を求める
max(node_boot_time_seconds) by (node)
- Node ごとのインスタンス起動時間を求める
- Grafana で表形式で結果を出すときに、表示するカラムを絞るときにも使える
複数 metric を JOIN する
- 参考: https://prometheus.io/docs/prometheus/latest/querying/operators/#vector-matching external_link
- 1対1、1対多、多対1 のマッチングが可能(多対多は未サポート)
- 必ず演算子が必要になる
- 算術演算子
+-*/%^
- 比較演算子
==
!=
- 論理演算子
and
or
unless
- 算術演算子
- 1対1 のとき
on(<ラベル名>)
で指定したラベルのみが結果の metrics に残るignoring(<ラベル名>)
で指定したラベル以外が結果の metrics に残る- optional で、
group_left
group_right
を追加してもよいgroup_left
は左側の metrics についているラベルを残すときに使うgroup_right
は右側の metrics についているラベルを残すときに使うgroup_left(<ラベル名>)
のようにラベル名を追加すると、逆側のラベルを残せる(group_left
なら右側のラベル、group_right
なら左側のラベル)
- 1対多、多対1 のとき
on
ignoring
の挙動は一緒group_left
group_right
の指定が必須になる
- 例
app: growi
というラベルが設定された Pod が現在稼働している Node を得るsum(kube_pod_labels{label_app="growi"} * on (pod) group_left(node) kube_pod_info) by (pod,node)
- Pod のラベルは
kube_pod_labels
という metric、稼働している Node など現在の状況はkube_pod_info
という metric にラベルとして付加されている - このようなラベルに情報が入っており metric value に意味を持たない metric には、通常
1
が設定されている- Prometheus は value として数値以外のデータを扱えないため、文字列データはすべて metric のラベルとして付加することで記録する必要がある
- metric value として
1
が設定されている理由は、おそらく掛け算で join すれば元の値を変化させずにラベルを追加することが可能だからだと思われる
- Pod のラベルは