PrometheusでDockerホスト + コンテナを監視してみた

今回は監視ツールのお話です。

次世代監視ツールPrometheusを使ってみた

皆様はどんな監視ツールを使っていますか?BPSでは、nagios + munin の2本立てでアラート通知やグラフによる監視を行なっています。今年度だけでも、ダウンしたサーバの発見や、リソースが限界に達していないかのチェックなど、監視ツールはさまざまな面で役に立っています。

しかし、監視ツールは監視対象側から監視ツール側に情報を送るという前提で作られていることが多い(世間ではPush型と言われている?)ため、監視ツールの導入は凄く面倒です。運用に関係のない設定はできれば監視対象には追加したくないものです。そこで、今回試験的に裏で運用しているPrometheusを使ってDockerホストとコンテナの監視を開始しました。

Prometheusとは?


https://prometheus.io/より

Prometheusはオープンソースの監視ツールです。音楽のソーシャル・プラットフォームを展開しているSoundCloud社によって2012年から開発が行われています。
Prometheusの特徴として、多次元のデータモデルの採用、動的に監視対象を探知できる設定が最初から利用できるなどの点が挙げられます。

しかし私的には、Prometheusが監視対象の情報を取得するPull型の通信を採用していることが一番の特徴ではないかと思っています。Prometheusが監視対象の状態をPull型で取得できることにより、監視対象の状態を監視システムから楽に管理できるというメリットがあります。

Prometheusのコンポーネントで今回利用したのは以下の2つです。

Prometheus Server
Prometheus本体です。監視ツールとして監視対象を管理、監視情報を取得するシステムです。
exporter
Prometheus Serverで読み取り可能なデータを生成する機能です。これは監視対象側に導入します。標準で node_exporter という監視対象のホストの情報を生成する機能があります。今回はこのnode_exporterと Dockerコンテナを監視するため、 container_exporter も一緒に導入します。

この2つを使ってPrometheusによる運用を行なっていきたいと思います。

Prometheusのインストール・設定

Prometheus Serverのインストール(監視サーバ側)

まず、監視ツール側にPrometheus Serverをインストールします。Ubuntu 17.04からようやくPrometheus 1系を標準で公式パッケージにインストールできるようになったため、監視サーバをUbuntu 17.04までアップグレードしました。

$ sudo apt update
$ sudo apt install prometheus

Prometheus Serverをインストールし、起動すると以下のようなGUI画面が出てきます。まだ監視対象を追加していないので、対象を設定してからグラフ描画を開始します。

node-exporterとcontainer-exporterをインストール(監視対象側)

次は監視対象側にnode-exportercontainer-exporterを導入して、監視対象側のDockerホストとコンテナの情報を生成します。せっかくDockerホストが動いてるので、 ここではnode-exporterとcontainer-exporterもDockerコンテナで運用するようにします。

今回は以下のコンテナを利用しました。

  • node-exporter: Dockerホストの監視用にデータを生成
$ sudo docker run -d -p 9100:9100 \
  -v "/proc:/host/proc:ro" \
  -v "/sys:/host/sys:ro" \
  -v "/:/rootfs:ro" \
  --net="host" \
  quay.io/prometheus/node-exporter \
    -collector.procfs /host/proc \
    -collector.sysfs /host/sys \
    -collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)"
  • cAdvisor: Dockerコンテナの監視用にデータを生成(実はこのコンテナにアクセスするだけでコンテナ監視用のGUIを利用できたりする)
$ sudo docker run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:rw \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --publish=8080:8080 \
  --detach=true \
  --name=cadvisor \
  google/cadvisor:latest

これにより、DockerホストとコンテナのPrometheus用のデータを生成できるようになりました。

DockerホストとDockerコンテナの情報を取得(Prometheusサーバ側の設定)

いよいよ、このDockerホストとコンテナの情報を取得できるようにPrometheusサーバを設定します。
Prometheus Serverの設定ファイル prometheus.yml でexporterを導入したサーバのデータを取得するように設定します。

scrape_configs:
    # dockerコンテナのデータを取得するためにターゲットを設定
    - job_name: 'docker'
      static_configs:
        - targets:
            - 'example.bpsinc.jp:8080'
            - 'example2.bpsinc.jp:8080'
            - 'example3.bpsinc.jp:8080'
          labels:
            group: 'docker-container'
     # dockerホストのデータを取得するためにターゲットを設定
    - job_name: 'docker-host'
      static_configs:
        - targets:
            - 'example.bpsinc.jp:9100'
            - 'example2.bpsinc.jp:9100'
            - 'example3.bpsinc.jp:9100'
          labels:
            group: 'docker-host'

今回は static_configs で静的にターゲットを登録するように設定しています。

また、 labelsでは任意のラベルを指定できるため、グラフ生成時にこれを使ってグループに名前をつけます。これにより、今後別のグループでDockerホストを構築する場合も切り分けできるようになります。

上記の設定を追記した上でPrometheus Serverを再起動し、Targetsでグループのラベルで指定したホストのデータ取得に成功している事を確認できます。

データ取得後、 Graph 画面でグラフの描画が開始されていることが確認できます。

Prometheusのグラフは非常にシンプルなので、逆に見づらいかと思われます。

そこで、次はGrafanaをPrometheusと連携させてみます。

Grafanaとの連携


https://grafana.com/より

GrafanaをPrometheusと連携させると、Grafanaの強力なグラフ描画機能を利用できるようになります。

まず、監視サーバ側にGrafanaをインストールします。

$ sudo apt install grafana

インストール後、DataSourceにPrometheusを追加します。

次にダッシュボードを作成する必要があります。ここでは、GrafanaのOfficial & community built dashboardsから、Docker and system monitoringをダウンロードして、 DashBoardimport で先ほどダウンロードした Docker and system monitoring のjsonファイルをインポートするのがよいでしょう。

以上で、強力な監視DashBoardを簡単に作成できます。

まとめ

という訳で、Prometheusのお話でした。先月には2.0.0の開発版がリリースされたため、安定板がリリースされたらそろそろ乗り換えてもいいかなとか思っています。

この記事では触れませんでしたが alertmanagaerというアラート通知ツールも別に存在します。Prometheusと連携させるとアラート通知もできるようになりますが、alertmanagaerがまだ開発途上な面があるので、試験的運用は後日にしてみたいと思います。

参考文献

関連記事

Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

ika

1990年滋賀県生まれ。以前は某大学の学内SE。 元々、Web業界に行きたかった希望があり、2015年10月にBPSへ入社。 北陸先端科学技術大学院大学(Jaist)情報科学研究科博士前期課程修了。 元々の専門はネットワークなので、ネットワークの話をすることもしばしば。

ikaの書いた記事

インフラ
限界までFreeBSDの環境を構築したい

2016年12月17日

インフラ
WordPressサイトをHTTPS化する手順

2016年10月14日

週刊Railsウォッチ

インフラ

BigBinary記事より

ActiveSupport探訪シリーズ