マシンロールのためのラベルはどう持つべきか? - Prometheusドキュメント

このページはPrometheus公式ドキュメント和訳+αの一部です。

マシンロールのためのラベルはどう持つべきか?

ターゲットラベルがターゲットの生涯に渡って不変にすることが、Prometheusを使うときのベストプラクティスである。 他方で、Apacheサーバーであるマシンにまたがってメトリクスを集約すると便利である。 これをどうやってやるか?

Prometheusで鍵となる概念は、時系列の連続性が求められるということ、つまり、時系列のラベルが変わって別の時系列になってしまわないということである。 Chefのロールのようにマシンのロールが変わると変わってしまうものは、良いターゲットラベルではない。 ロールが変わるたびに、グラフが途切れてしまい、アラートはリセットされてしまう。

だが、これは、あるロールを持つマシンにまたがってCPU利用率のようなメトリクスを集約できないということを意味する。 幸いなことに、これは、textfile collectorとグループ修飾子で出来る。

一から始めることにして、node exporterをダウンロードし、textfile collectorと共に実行する。

wget https://github.com/prometheus/node_exporter/releases/download/v0.15.1/node_exporter-0.15.1.linux-amd64.tar.gz
tar -xzf node_exporter-0.15.1.linux-amd64.tar.gz
cd node_exporter-*
mkdir textfile_collector
./node_exporter -collector.textfile.directory textfile_collector &

このマシンでpostfixapacheを実行しているとする。 以下のように、それらのロールのメトリクスを追加する。

cat <<EOF > textfile_collector/roles.prom
machine_role{role="postfix"} 1
machine_role{role="apache"} 1
EOF

これは、普通、設定管理システムで行われるだろう。 http://localhost:9100/metrics を見てみると、新しいメトリクスが見つかるだろう。

次に、これをスクレイプするためのPrometheusサーバーを手早く準備する。

wget https://github.com/prometheus/prometheus/releases/download/v2.0.0/prometheus-2.0.0.linux-amd64.tar.gz
tar -xzf prometheus-2.0.0.linux-amd64.tar.gz
cd prometheus-*
cat <<'EOF' > prometheus.yml
global:
  scrape_interval: 10s
  evaluation_interval: 10s
scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets:
        - localhost:9100
EOF
./prometheus

もし、roleラベルが付与されたapacheロールのメトリクスが必要な場合、expressionブラウザでgroup_leftを使うことができる。

up * on (instance, job) group_left(role) machine_role{role="apache"}

こうすると普段通り集約できる。

sum by (job, role)(
    up * on (instance, job) group_left(role) machine_role{role="apache"}
)

この手法で、ラベルをターゲットの生涯に渡って変更したときのような欠点を排して、ターゲットにラベルを付与する恩恵が得られる。 アプリケーションに対しても似たような方法で上手くいく。

翻訳元

おすすめ書籍

入門 Prometheus ―インフラとアプリケーションのパフォーマンスモニタリング

入門 Prometheus ―インフラとアプリケーションのパフォーマンスモニタリング

入門 監視 ―モダンなモニタリングのためのデザインパターン

入門 監視 ―モダンなモニタリングのためのデザインパターン

SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム

SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム