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-exporterとcontainer-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をダウンロードして、 DashBoard → import で先ほどダウンロードした Docker and system … Continue reading PrometheusでDockerホスト + コンテナを監視してみた