Prometheusインストール (docker編)

スポンサーリンク

Prometheusはコンテナやクラウドなどの大量コンポーネントを監視する事に特化したソフトウェアです。このページではdockerコンテナを用いた操作方法を説明します。

前提

参照資料

動作確認済環境

Prometheus

インストール

最小限のprometheusの設定ファイルを作成します。

mkdir /etc/prometheus
cat << EOF > /etc/prometheus/prometheus.yml
scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets:
        - localhost:9090
EOF

Prometheusのコンテナを起動します。

docker run -d \
  --name prometheus \
  -p 9090:9090 \
  -v /etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
  prom/prometheus

動作確認

以下URLをブラウザで開きます。「/」へのアクセスを試みると、「/graph」へリダイレクトされグラフ描画ページへ遷移します。

 http://<IPアドレス>:9090/

Prometheus 初期状態

以下URLをブラウザで開きます。すると、監視項目の一覧が表示されます。この画面で表示される監視項目のうち1つをメモに控えましょう。

 http://<IPアドレス>:9090/metric

Prometheu 監視項目一覧

再びグラフ描画ページ(http://<ip_addr>:9090/graph)に戻ります。検索窓に監視項目(例:prometheus_http_requests_total)を入力し、「Graph」を押下します。すると、監視結果がグラフ化される事が分かります。

Prometheu グラフ描画例

Node exporter

インストール

前述の操作で監視されているのはPrometheusそのものです。PrometheusはGo言語で作成されたHTTPサーバで、そのHTTPサーバのメモリ使用量や200応答の回数などがメトリックとして蓄積されていきます。

それではPrometheusではなく仮想マシンそのものを監視してみましょう。PrometheusはHTTPで公開されたメトリック情報をスクレイピングして情報を蓄積します。ですので、HTTPで公開できる情報ならば「何でも」監視する事ができます。それではOSの情報をHTTPとして公開するNode exporterをコンテナを起動してみましょう。

この時、仮想マシンの/procや/devなどをコンテナへexportする事を意識してください。監視したいのはコンテナのCPU使用率やディスクIOではなく、ホスト(仮想マシン)側のCPU使用率やディスクIOです。ですので、ホスト(仮想マシン)のファイルをコンテナから読み取れるようにし、ホスト(仮想マシン)の値を読み取れるようにします。

以下は「GitHub node_exporter」で紹介されているnode exporterの起動例です。

docker run -d \
  --name node-exporter \
  --net="host" \
  --pid="host" \
  -v "/:/host:ro,rslave" \
  quay.io/prometheus/node-exporter:latest \
  --path.rootfs=/host

動作確認

Node exporterによってメトリックがHTTPによって公開されているかどうかを確認します。以下のようなcurlコマンドを実行しメトリックを取得できるかどうかを確認します。

curl http://localhost:9100/metrics

curlコマンドの実行結果をよく観察すると、diskやcpuなどOSに関する情報を取得できている事が分かるかと思います。以下に出力の一部を載せます。

念の為、コンテナではなくホスト(仮想マシン)の監視ができているかどうかを慎重に確認しましょう。ファイルシステムやCPU数などが想定通りの値になっているか(仮想マシンのスペックと一致しているか)を確認します。

[root@linux010 ~]# curl http://localhost:9100/metrics

 <omitted>

# HELP node_filesystem_files Filesystem total file nodes.
# TYPE node_filesystem_files gauge
node_filesystem_files{device="/dev/sda1",fstype="ext4",mountpoint="/mnt/resource"} 262144
node_filesystem_files{device="/dev/sdb2",fstype="xfs",mountpoint="/"} 1.5727104e+07
node_filesystem_files{device="tmpfs",fstype="tmpfs",mountpoint="/run"} 95333
node_filesystem_files{device="tmpfs",fstype="tmpfs",mountpoint="/run/user/1000"} 95333

 <omitted>

Prometheusとの連携

prometheusの設定ファイルを以下のように修正します。tcp9090(prometheus)とtcp9100(node_exporter)を監視するようにしてください。

また、tcp9100(node_exporter)はlocalhostではなく、ホスト(仮想マシン)のIPアドレスを指定するようにしてください。スクレイプする時の送信元はprometheusのコンテナになるので、prometheusのコンテナからnode_exporterのコンテナへ疎通可能になるようなIPアドレスを指定する必要があります。

DockerでNode exporterを使用するにはファイルシステムのマウントに注意を払わなければなりません。また、IPアドレスなどのネットワーク設定も「Prometheusインストール (tarball編)」と比較すると複雑です。このような背景もあり「オライリー本 入門 Prometheus」では、DockerでNode exporterを使用する事を推奨していません。

cat << EOF > /etc/prometheus/prometheus.yml
scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets:
        - localhost:9090
  - job_name: node
    static_configs:
      - targets:
        - 172.16.1.10:9100
EOF

Prometheusを再起動します。

docker container restart prometheus

監視対象ページ(http://<ip_addr>:9090/targets)を表示すると、prometheusとnodeの2つを監視している事が分かります。

Node Exporterの追加確認

グラフ描画ページ(http://<ip_addr>:9090/graph)を表示します。検索窓に監視項目(例:node_cpu_seconds_total)を入力し、「Graph」を押下します。すると、監視結果がグラフ化される事が分かります。

Node Exporterの描画例

タイトルとURLをコピーしました