Prometheusの共同作成者Julius Volzの記事

前書き

プロメテウスは、オープンソースの監視システムおよび時系列データベースです。 メトリックの生成や収集、ダッシュボードでの結果データのグラフ化、異常に関するアラートなど、監視の多くの側面に対処します。 これを実現するために、個別に実行されるが組み合わせて使用​​されるさまざまなコンポーネントを提供します。

Dockerは、Linuxコンテナー(または他のカプセル化テクノロジー)を使用してサーバープロセスをカプセル化する方法を提供します。これにより、サーバープロセスをより簡単に管理し、相互に分離できます。 Dockerの詳細については、https://www.digitalocean.com/community/tutorials/the-docker-ecosystem-an-introduction-to-common-components [The Docker Ecosystem:An Introduction to Common Components]を参照してください。

このチュートリアルでは、DockerでPrometheusを使用するための3つの主要コンポーネントをインストールする方法を学習します。 これらは:

  • メトリックを収集してそれらを照会するPrometheusサーバー

  • Prometheus互換形式でシステムメトリックをエクスポートするNode Exporter

  • Grafana、他のバックエンドの中でプロメテウスをサポートするWebベースのグラフィカルダッシュボードビルダー

Prometheusエコシステムにはさらに多くのコンポーネントがありますが、これら3つはPrometheusを使用するための良い出発点となります。

前提条件

このチュートリアルを実行するには、次のものが必要です。

  • Ubuntu 14.04ドロップレット

  • `+ sudo +`アクセスを持つユーザー(詳細については、https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04 [Ubuntu 14.04での初期サーバーセットアップ]チュートリアルを参照してください)

  • https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-compose-on-ubuntu-14-04 [インストール方法]の*ステップ1 *の手順でインストールされたDocker Ubuntu 14.04でのDocker Composeの使用]

ステップ1-Prometheusのインストール

このセクションでは、Dockerを使用してメインのPrometheusサーバーをインストールする方法について説明します。 続行する前に、必ず*前提条件*セクションでDockerをインストールしてください。 Prometheusサーバーは、Prometheusエコシステムの中心部分であり、メトリックの収集と保存、および式クエリの処理とアラートの生成を担当します。

すべてのPrometheusコンポーネントのDockerコンテナイメージは、Docker Hubの* https://hub.docker.com/u/prom/ [prom] *組織の下でホストされます。 オプションなしで + prom / prometheus + Dockerイメージを実行すると、コンテナ内の `+ / etc / prometheus / prometheus.yml `にある設定ファイルの例でPrometheusサーバーが起動します。 また、 ` / prometheus +にマウントされたhttps://www.digitalocean.com/community/tutorials/how-to-work-with-docker-data-volumes-on-ubuntu-14-04[Dockerデータボリューム]も使用します。 `収集されたメトリックデータを保存するコンテナ内。 このデータボリュームディレクトリは、実際には、コンテナが最初に起動されたときにDockerが自動作成するホスト上のディレクトリです。 内部のデータは、同じコンテナを再起動するまで保持されます。

デフォルトの構成ファイルをオーバーライドする方法は複数あります。 たとえば、ホストファイルシステムからDockerデータボリュームとしてカスタム構成ファイルをコンテナーに渡すことも、コンテナーイメージにベイクした独自の構成ファイルを使用して派生Dockerコンテナーを構築することもできます。 このチュートリアルでは、ホストシステムから構成ファイルを渡すことを選択します。

メトリックのストレージを整理するためのさまざまなパターンもあります。 このチュートリアルでは、https://www.digitalocean.com/community/tutorials/how-to-work-with-docker-data-volumes-on-ubuntu-14-04を使用するDockerイメージのデフォルトの動作を使用します[Docker data volume]:メトリックを保存します。 代わりに、必要に応じてデータボリュームコンテナの作成を検討することもできます。

最初に、ホストファイルシステムの `+〜/ prometheus.yml +`に最小限のPrometheus設定ファイルを作成します。

nano ~/prometheus.yml

次の内容をファイルに追加します(「++」をドロップレットのIPアドレスに置き換えます)。

〜/ prometheus.yml

# A scrape configuration scraping a Node Exporter and the Prometheus server
# itself.
scrape_configs:
 # Scrape Prometheus itself every 5 seconds.
 - job_name: 'prometheus'
   scrape_interval: 5s
   target_groups:
     - targets: ['localhost:9090']

 # Scrape the Node Exporter every 5 seconds.
 - job_name: 'node'
   scrape_interval: 5s
   target_groups:
     - targets: [':9100']

この構成例では、Prometheus自体からメトリックをスクレイプします(PrometheusはPrometheus互換の形式で自身に関するメトリックも公開するため)とともに、後で設定するNode Exporterからも取得します。 Prometheusは「+ localhost +」ホスト名を使用してコンテナ内で自身に接続できますが、Node Exporterは別のネットワーク名前空間を持つ別のコンテナで実行されるため、サーバーの外部IPを使用してNode Exporterをスクレイピングする必要があります。

外部構成ファイルを使用してPrometheus Dockerコンテナーを開始します。

docker run -d -p 9090:9090 -v ~/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus -config.file=/etc/prometheus/prometheus.yml -storage.local.path=/prometheus -storage.local.memory-chunks=10000

このコマンドを初めて実行すると、Docker HubからDockerイメージがプルされます。

このコマンドは非常に長く、多くのコマンドラインオプションが含まれています。 もっと詳しく見てみましょう。

  • `+ -d `オプションは、Prometheusコンテナを分離モードで起動します。つまり、コンテナはバックグラウンドで起動され、 ` CTRL + C +`を押しても終了しません。

  • `+ -p 9090:9090 +`オプションは、PrometheusのWebポート(9090)を公開し、ホストシステムの外部IPアドレスを介して到達可能にします。

  • + -v […​] +`オプションは、 `+ prometheus.yml +`設定ファイルをホストファイルシステムからPrometheusが期待するコンテナ内の場所( `+ / etc / prometheus / prometheus.yml +)にマウントします。

  • `+ -config.file +`オプションは、_container_内のPrometheus設定ファイルの場所に応じて設定されます。

  • `+ -storage.local.path`オプションは、コンテナ内のメトリックスの保存場所を設定します。

  • 最後に、このチュートリアルの「+ -storage.local.memory-chunks +」オプションは、Prometheusのメモリ使用量をホストシステムのごく少量のRAM(512 MBのみ)と少数の時系列(1000未満)に調整します。 デフォルトの1048576ではなく、10000個のサンプルチャンクのみをメモリに保持するようにPrometheusに指示します(シリーズごとに約10個のチャンク)。 *これは、より多くのRAMを搭載したマシンでPrometheusを実行する場合、およびより多くの時系列を保存する場合に、必ず調整する必要がある値です。 これに関する詳細については、Prometheusのhttp://prometheus.io/docs/operating/storage/[storage documentation]を参照してください。

次のコマンドを使用して、実行中のすべてのDockerコンテナーを一覧表示できます。

docker ps

たとえば、Prometheus Dockerコンテナの場合、次のようなものが表示されます。

Output of `docker ps`CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                    NAMES
6a89ac39911e        prom/prometheus      "/bin/prometheus -con"   2 hours ago         Up 2 hours          0.0.0.0:9090->9090/tcp   stoic_pike

`+ docker ps +`の出力に表示されるコンテナIDを使用して、実行中のPrometheusサーバーのログを次のコマンドで検査できます。

docker logs

この例では、コマンドは次のようになります。

docker logs

ホストのファイルシステムのどこにメトリックスストレージボリュームが保存されているかを調べるには、次を使用して次を実行できます。

docker inspect

これにより、マウントされたDockerボリュームのホストパスなど、コンテナーの構成に関する情報が出力されます。

出力で次のようなセクションを見つけます。

Output of `docker inspect`...
"Mounts": [
   {
       "Source": "/home/sammy/prometheus.yml",
       "Destination": "/etc/prometheus/prometheus.yml",
       "Mode": "",
       "RW": true
   },
   {
       "Name": "821b0abc470a9c758ff35ed5cff69077423a629566082a605a01d8207d57cd6c",
       "Source": "/var/lib/docker/volumes/821b0abc470a9c758ff35ed5cff69077423a629566082a605a01d8207d57cd6c/_data",
       "Destination": "/prometheus",
       "Driver": "local",
       "Mode": "",
       "RW": true
   }
],
...

この例では、メトリックはホストシステムの「+ / var / lib / docker / volumes / 821b0abc470a9c758ff35ed5cff69077423a629566082a605a01d8207d57cd6c / _data 」に保存されます。 このディレクトリは、Prometheusコンテナを最初に起動したときにDockerによって自動的に作成されました。 コンテナの ` / prometheus +`ディレクトリにマッピングされます。 このディレクトリのデータは、同じコンテナを再起動しても保持されます。 必要に応じて、メトリックデータを保存するために既存のホストディレクトリをマウントすることもできます。 方法については、https://www.digitalocean.com/community/tutorials/how-to-work-with-docker-data-volumes-on-ubuntu-14-04 [Ubuntu 14.04でDockerデータボリュームを操作する方法]を参照してください。これを達成するために。

これで、Prometheusサーバーに + http://:9090 / +`でアクセスできるはずです。 `+ http://:9090 / status +`に移動し、* Targets の `+ prometheus +`ジョブの `+ http:// localhost:9090 / metrics +`エンドポイントを見つけて、自身に関するメトリックを収集していることを確認しますセクション。 このターゲットの State 列には、ターゲットの状態が HEALTHY として表示されます。 対照的に、ノードエクスポータはまだ開始されていないためスクレイピングできないため、 `+ http:// localhost:9100 / metrics +(ノードエクスポータ)エンドポイントは UNHEALTHY *として表示されます。

image:https://assets.digitalocean.com/articles/prometheus_install_docker/unhealthy.png [Node ExporterターゲットはUNHEALTHYとして表示されます]

要約すると、ホストファイルシステムにあるカスタムPrometheus設定ファイル `〜/ prometheus.yml +`を使用して、Dockerコンテナとして実行されているPrometheusがあります。 メトリックスストレージは、コンテナの ` / prometheus `ディレクトリにあります。このディレクトリは、このセクションで説明する ` docker inspect +`コマンドで示されるパスによってホストシステムにバックアップされます。

ステップ2-Node Exporterのセットアップ

このセクションでは、Prometheus Node Exporterをインストールします。 Node Exporterは、実行中のホストマシン(ノード)に関するPrometheusメトリックを公開するサーバーです。 これには、マシンのファイルシステム、ネットワークデバイス、プロセッサ使用量、メモリ使用量などに関するメトリックスが含まれます。

DockerでNode Exporterを実行することは、その全体の目的が、実行中のホストに関するメトリックを公開することであるため、いくつかの課題を提起することに注意してください。 オプションを追加せずにDockerで実行すると、ファイルシステムやネットワークデバイスなどのリソースのDockerのネームスペースにより、ホストの環境とは異なるコンテナーの環境に関するメトリックのみがエクスポートされます。 したがって、通常、Dockerの外部のホストシステムでNode Exporterを直接実行することをお勧めします。 ただし、Dockerを使用してすべてのプロセスを管理する必要がある場合は、Docker内からホストメトリックをエクスポートするための合理的な近似を提供する回避策について説明します。

Dockerを使用してポート9100でNode Exporterを起動するには:

docker run -d -p 9100:9100 -v "/proc:/host/proc" -v "/sys:/host/sys" -v "/:/rootfs" --net="host" prom/node-exporter -collector.procfs /host/proc -collector.sysfs /host/proc -collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)"

次のDockerおよびNode Exporterフラグを使用して、_host_メトリックの合理的な近似値を提供します。

  • Linuxでは、Node Exporterはそのメトリックの大部分を `+ / proc `および ` / sys `ファイルシステムから収集します。 これらのファイルシステムは、Dockerの ` -v `フラグを使用して、ホストから ` / host +`ディレクトリの下のコンテナにマウントされます。

  • Node Exporterの `+ -collector.procfs `および ` -collector.sysfs `フラグを使用して、非標準の場所で ` / proc `および ` / sys +`ファイルシステムを検索するようNode Exporterに指示します。

  • ホストファイルシステムメトリックスをレポートするには、Dockerの「+ -v 」フラグを使用して、ルート( ` / `)ファイルシステム全体をコンテナ( ` / rootfs +`)にマウントします。

  • Node Exporterの `+ -collector.filesystem.ignored-mount-points +`フラグを使用して、ホストシステムに属していないコンテナー内の他のファイルシステムを無視します。 このオプションは、マウントポイントの正規表現を使用して、レポートされるメトリックから除外します。

  • +-net = host + Dockerフラグを使用して、コンテナをホストと同じネットワークスタックに配置します。これにより、 `+ / proc / net / dev `などのファイルから読み取ると、ホスト(ホストからマウントされた ` / proc +`ファイルシステムからの読み取りでは不十分です)。

一部のメトリックは、ホスト上で直接実行されているノードエクスポーターと比較すると、依然として異なることに注意してください。 具体的には、コンテナ内のこのプレフィックスの下でルートファイルシステムにマウントするため、ファイルシステムの使用について報告されるメトリックの `+ mountpoint `ラベルの値には ` / rootfs +`プレフィックスが付きます。 また、記述された回避策が将来のNode Exporter機能に十分であるという保証もありません。そのため、DockerでNode Exporterを独自の裁量で実行してください。

これで、PrometheusサーバーはNode Exporterのスクレイピングを自動的に開始するはずです。 `+ http://:9090 / status `のPrometheusサーバーのステータスページに移動し、 ` node `ジョブの ` http://:9100 / metrics +`ターゲットが* HEALTHY *状態を表示していることを確認します:

image:https://assets.digitalocean.com/articles/prometheus_install_docker/healthy.png [Node ExporterターゲットはHEALTHYとして表示されます]

ステップ3-Grafanaのセットアップ

最後に、Grafanaをセットアップします。 Grafanaは、グラフ化するデータを照会するためのバックエンドとしてPrometheusをサポートするグラフィカルダッシュボードビルダーです。

Grafanaは、ダッシュボードのメタデータ(存在するダッシュボードや表示するグラフなど)を構成可能なSQLベースのデータベースに保存します。 Grafanaは、このために、MySQLやPostgreSQLなどの外部データベースサーバーだけでなく、ローカルファイルバックアップSQLite3データベースの使用をサポートしています。

このチュートリアルでは、DockerデータボリュームでバックアップされたSQLite3データベースを使用します。 詳細については、https://www.digitalocean.com/community/tutorials/how-and-when-to-use-sqlite [Sqliteの使用方法と使用方法]を参照してください。

選択した管理者パスワード( ++)でGrafanaをDockerコンテナーとして起動します。

docker run -d -p 3000:3000 -e "GF_SECURITY_ADMIN_PASSWORD=" -v ~/grafana_db:/var/lib/grafana grafana/grafana

これにより、Grafana DockerイメージがDocker Hubからダウンロードされ、ホストシステムの `〜/ grafana_db +`およびコンテナーファイルシステムの ` / var / lib / grafana `に配置される新しいDockerボリュームが作成されます。 コンテナ内で、Grafanaは ` / var / lib / grafana / grafana.db +`にSQLite3データベースを自動的に作成して初期化します。

`+ -e `フラグにより​​、Dockerコンテナ内で起動されたプロセスに環境変数を渡すことができます。 ここでは、これを使用して、 ` GF_SECURITY_ADMIN_PASSWORD `環境変数を目的のダッシュボード管理者パスワードに設定し、デフォルトのパスワードである ` admin +`を上書きします。 環境変数を使用して、他のGrafana構成設定をオーバーライドすることもできます。 詳細については、http://docs.grafana.org/installation/configuration/#using-environment-variables [環境変数の使用]を参照してください。

Grafanaが正しく実行されていることを確認するには、「+ http://:3000 / 」に進みます。 管理者のユーザー名は「 admin」で、パスワードは以前にDockerコンテナを起動するときに選択したものです。

image:https://assets.digitalocean.com/articles/prometheus_install_docker/grafana_login.png [選択したパスワードでGrafanaにログイン]

ログインすると、Grafanaのメインビューが表示されます。

image:https://assets.digitalocean.com/articles/prometheus_install_docker/grafana_main.png [Grafanaメインビュー]

Grafanaの使用を開始する方法の詳細については、http://docs.grafana.org/ [Grafana documentation]を参照してください。 Prometheus Grafana documentationには、GrafanaをPrometheusと組み合わせて具体的に使用する方法も示されています。

結論

おめでとうございます。 Prometheusサーバー、Node Exporter、およびGrafanaをセットアップしました-すべてDockerを使用しています。 これらはすべて同じマシンで現在実行されていますが、これはデモンストレーションのみを目的としています。 実稼働セットアップでは、通常、監視対象のすべてのマシン、複数のPrometheusサーバー(組織の必要に応じて)、およびこれらのサーバーからのデータをグラフ化する単一のGrafanaサーバーでNode Exporterを実行します。

一般的なPrometheusの使用方法の詳細については、http://prometheus.io/docs/introduction/overview/ [ドキュメント]を参照してください。