前書き
Prometheusは、オープンソースの監視システムおよび時系列データベースです。これには、メトリックの生成と収集、ダッシュボードへの結果データのプロット、異常な状況に対するアラートの発行など、監視の多くの側面が含まれます。この目標を達成するために、個別に、しかし組み合わせて動作するさまざまなコンポーネントを提供します。
Dockerは、Linuxコンテナー(または他のパッケージングテクノロジー)を使用してサーバープロセスをカプセル化し、それらの管理と分離を容易にする方法を提供します。 Dockerの詳細については、[Dockerエコシステム:一般的なコンポーネントの概要](https://www.digitalocean.com/community/tutorials/the-docker-ecosystem-an-introduction-to-common-components)を参照してください。
このチュートリアルでは、Prometheusの3つの主要コンポーネントをDockerにインストールする方法を学習します。これらは:
Prometheusエコシステムにはさらに多くのコンポーネントがありますが、これら3つのコンポーネントはPrometheusを使用するための良い出発点を提供します。
このチュートリアルに従うには、次のものが必要です。
sudo
コマンドを使用できる非rootアカウントを持つUbuntu サーバーがセットアップされ、ファイアウォールがオンになっています。サーバーをお持ちでない方は[こちら](https://cloud.tencent.com/product/cvm?from=10680)から購入できますが、個人的には無料のTencent Cloud [Developer Lab](https://cloud.tencent.com/developer/labs?from=10680)を使って実験し、[サーバーを購入]( https://cloud.tencent.com/product/cvm?from=10680)。**注:**この記事は、1 CPU / 512 MB RAM Ubuntu14.04ドロップレットでテストされています。 Prometheusの構成は、この記事のステップ1の指示に従って調整して、さまざまな量の利用可能なリソースを取得する必要があります。
このセクションでは、Dockerを使用してメインのPrometheusサーバーをインストールする方法を紹介します。続行する前に、「**前提条件」**セクションに従ってDockerをインストールしてください。 Prometheusサーバーは、Prometheusエコシステムのコア部分であり、メトリックの収集と保存、式クエリの処理、およびアラートの生成を担当します。
すべてのPrometheusコンポーネントのDockerコンテナイメージは、DockerHubの** prom **組織の下でホストされています。他のオプションを指定せずに prom / prometheus
Dockerイメージを実行すると、Prometheusサーバーが起動します。このサーバーには、 / etc / prometheus / prometheus.yml
コンテナー内にあるサンプル構成ファイルが含まれています。また、コンテナ内にインストールされた / prometheus
Dockerデータボリュームを使用して、収集されたメトリックデータを格納します。このデータボリュームディレクトリは実際にはホスト上のディレクトリであり、Dockerはコンテナが初めて起動されたときにこのディレクトリを自動的に作成します。その中のデータは、同じコンテナを再起動しても変更されません。
デフォルトの構成ファイルをオーバーライドする方法は複数あります。たとえば、カスタム構成ファイルをDockerデータボリュームとしてホストファイルシステムからコンテナーに渡すことも、派生Dockerコンテナーを作成して、独自の構成ファイルをコンテナーイメージにベイクすることもできます。このチュートリアルでは、ホストシステムから構成ファイルをインポートすることを選択します。
組織のメトリックを保存するためのさまざまなモードもあります。このチュートリアルでは、Dockerイメージのデフォルトの動作を使用します。Dockerデータボリュームを使用してメトリックを保存します。ニーズをより適切に満たすために、データボリュームコンテナの作成を検討することもできます。
まず、ホストファイルシステムに最小限のPrometheus構成ファイル 〜/ prometheus.yml
を作成します。
nano ~/prometheus.yml
以下をファイルに追加します( your_server_ip
をドロップレットのIPアドレスに置き換えます)。
# 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:['your_server_ip:9100']
この設定例では、Prometheusがそれ自体(PrometheusはPrometheusと互換性のある形式でメトリックも公開するため)および後で設定するノードエクスポータからメトリックを取得できます。 Prometheusは localhost
ホスト名を使用してコンテナ内で自身に接続できますが、ノードエクスポータは別のネットワーク名前名を持つ別のコンテナで実行されるため、サーバーの外部IPを使用してノードエクスポータをスクレイプする必要があります。
外部構成ファイルを使用してPrometheusDockerコンテナーを開始します。
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ハブから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
オプションは、* container内のメトリックの保存場所を構成します。-storage.local.memory-chunks
オプションは、Prometheusのメモリ使用量をホストシステムの非常に少量のRAM(512MBのみ)と、このチュートリアルに保存されている少量の時系列(1000未満)に調整します。これは、デフォルト値の1048576ではなく10000サンプルブロック(シリーズあたり約10ブロック)のみをメモリに保持するようにPrometheusに指示します。これはより多くのRAMとより多くの保存時間を備えたマシンでPrometheusを実行する場合です。 間違いなく調整する必要がある値シリーズ。この問題の詳細については、Prometheusの[ストレージドキュメント](http://prometheus.io/docs/operating/storage/)を参照してください。次のコマンドを使用して、実行中のすべてのDockerコンテナを一覧表示できます。
docker ps
たとえば、PrometheusDockerコンテナに似た次のように表示されます。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6 a89ac39911e 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 container_id
この例では、コマンドは次のようになります。
docker logs 6a89ac39911e
インジケータストレージボリュームが保存されているホストファイルシステムの場所を見つけるには、container_idを使用して次のコマンドを実行できます。
docker inspect container_id
これにより、インストールされているDockerボリュームのホストパスなど、コンテナ構成に関する情報が出力されます。
出力でこれに似たものを見つけてください:
..." 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 / volume / 821b0abc470a9c758ff35ed5cff69077423a629566082a605a01d8207d57cd6c / _data
ホストシステムに保存されています。 Prometheusコンテナを初めて起動すると、Dockerはこのディレクトリを自動的に作成します。 / prometheus
コンテナ内のディレクトリにマップされます。同じコンテナを再起動しても、このディレクトリのデータは変更されません。必要に応じて、既存のホストディレクトリをインストールしてメトリックデータを保存することもできます。
これで、 http:// your_server_ip:9090 /
にあるPrometheusサーバーにアクセスできるようになります。 「** Target」セクションの「http:// your_server_ip:9090 / status」をポイントし、「prometheus」ジョブの「http:// localhost:9090 / metrics」エンドポイントを見つけて、自分自身に関する情報を収集していることを確認しますの指標。この目標の状態列には、目標の状態が HEALTHY として表示されます。対照的に、 http:// localhost:9100 / metrics
(ノードエクスポーター)エンドポイントは不健康**として表示されます。ノードエクスポーターが開始されていないため、削除できません。
全体として、ホストファイルシステム 〜/ prometheus.yml
にあるカスタムPrometheus構成ファイルを使用して、PrometheusをDockerコンテナとして実行しています。メトリックストレージは、コンテナの / prometheus
ディレクトリにあり、このセクションで説明する dockerinspect
コマンドで示されるパスを介してホストシステムにバックアップされます。
このセクションでは、Prometheusノードエクスポータをインストールします。ノードエクスポータは、実行中のホスト(ノード)に関するPrometheusメトリックを公開するサーバーです。これには、コンピューターファイルシステム、ネットワーク機器、プロセッサー使用量、メモリー使用量などに関するインジケーターが含まれます。
DockerでNodeExporterを実行すると、実行中のホストに関するメトリックを公開することが全体の目的であるため、いくつかの課題が発生することに注意してください。他のオプションを指定せずにDockerで実行すると、Dockerのファイルシステムやネットワークデバイスなどのリソースの名前名により、ホストの環境とは異なるコンテナ環境に関するメトリックのみがエクスポートされます。したがって、通常は、Docker以外のホストシステムでNodeExporterを直接実行することをお勧めします。ただし、Dockerを使用してすべてのプロセスを管理する必要がある場合は、Dockerからホストメトリックをエクスポートするための合理的な概算を提供する回避策について説明します。
Dockerを使用して、ポート9100でノードエクスポーターを起動します。
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フラグとNodeExporterフラグは、* host *メトリックの妥当な近似値を提供するために使用されます。
/ proc
および / sys
ファイルシステムからのほとんどのインジケータをまとめます。これらのファイルシステム / host
は、Dockerの -v
フラグを使用して、ホストからディレクトリの下のコンテナにインストールします。-collector.procfs
フラグと -collector.sysfs
フラグを使用して、ノードエクスポータに非標準の場所にある / proc
ファイルシステムと / sys
ファイルシステムを探すように指示します。/
)ファイルシステム全体をコンテナー( / rootfs
) -v
にマウントします。-collector.filesystem.ignored-mount-points
フラグを使用して、ホストシステムの一部ではないコンテナ内の他のファイルシステムを無視します。このオプションは、通常の式のマウントポイントを使用して、レポートされるメトリックから除外します。--net = host
Dockerフラグを使用して、コンテナーをホストと同じネットワークスタックに配置し、ファイルから / proc / net / dev
を読み取ると、ホストと同じ結果が生成されます(host /から) proc
によってマウントされたファイルシステムは読み取るのに十分ではありません)。一部のメトリックは、ホスト上で直接実行されているノードエクスポーターとはまだ異なることに注意してください。具体的には、ファイルシステムの使用状況について報告されたメトリックには、コンテナ内のこのプレフィックスの下でルートファイルシステムにマウントしているため、 mountpoint
タグ値の / rootfs
にプレフィックスが含まれます。説明されている回避策が将来のNodeExporter機能に十分であるという保証はないため、DockerでNodeExporterを実行することを決定できます。
これで、Prometheusサーバーがノードエクスポーターのクロールを自動的に開始するはずです。 http:// your_server_ip:9090 / status
Prometheusサーバーのステータスページに移動し、 node
ジョブの http:// your_server_ip:9100 / metrics
ターゲットが** HEALTHY **ステータスとして表示されていることを確認します。
最後に、Grafanaを作成します。 Grafanaは、データをグラフにクエリするためのバックエンドとしてPrometheusをサポートするグラフィカルダッシュボードビルダーです。
Grafanaは、ダッシュボードのメタデータ(どのダッシュボードが存在し、どのチャートを表示するかなど)を構成可能なSQLベースのデータベースに保存します。 Grafanaは、ローカルファイルおよび[MySQL](https://cloud.tencent.com/product/cdb?from=10680)や[PostgreSQL](https://cloud.tencent.com/product/postgresql?from=10680)などの外部データベースサーバーでサポートされているSQLite3データベースの使用をサポートしています。
このチュートリアルでは、Dockerデータボリュームに支えられたSQLite3データベースを使用します。
選択した管理者パスワード( admin_password
)を使用して、GrafanaをDockerコンテナとして起動します。
docker run -d -p 3000:3000-e "GF_SECURITY_ADMIN_PASSWORD=admin_password"-v ~/grafana_db:/var/lib/grafana grafana/grafana
これにより、DockerHubからGrafanaDockerイメージがダウンロードされ、ホストシステムに新しいDockerボリュームが作成され、 〜/ grafana_db
の / var / lib / grafana
にコンテナファイルシステムが作成されます。コンテナ内で、GrafanaはSQLite3データベース / var / lib / grafana / grafana.db
を自動的に作成して初期化します。
-e
フラグを使用すると、Dockerコンテナで開始されたプロセスに環境変数を渡すことができます。ここでは、これを使用して、 GF_SECURITY_ADMIN_PASSWORD
環境変数を目的のダッシュボード管理者パスワードに設定し、デフォルトのパスワード admin
を上書きします。環境変数を使用して、他のGrafana構成設定をオーバーライドすることもできます。詳細については、[環境変数の使用](http://docs.grafana.org/installation/configuration/#using-environment-variables)を参照してください。
Grafanaが正しく機能していることを確認するには、 http:// your_server_ip:3000 /
にアクセスしてください。管理者のユーザー名は admin
で、パスワードはDockerコンテナを起動したときに選択したパスワードです。
ログインすると、Grafanaのメインビューが表示されます。
Grafanaの使用を開始する方法の詳細については、[Grafanaドキュメント](http://docs.grafana.org/)を参照してください。 [Prometheus Grafana Document](http://prometheus.io/docs/visualization/grafana/#using)では、Prometheus、特にGrafanaの使用方法についても説明しています。
おめでとう! Prometheusサーバー、Node Exporter、Grafanaをセットアップしました。これらはすべてDockerを使用します。これらは現在すべて同じマシンで実行されていますが、これはデモンストレーションのみを目的としています。実稼働環境では、通常、ノードエクスポーター、複数のPrometheusサーバー(組織のニーズに応じて)、および単一のGrafanaサーバーが、これらのサーバーからのデータをマッピングするために、監視対象の各コンピューターで実行されます。
Prometheusの一般的な使用法の詳細については、その[ドキュメント](http://prometheus.io/docs/introduction/overview/)を参照してください。
その他のUbuntuチュートリアルについては、[Tencent Cloud + Community](https://cloud.tencent.com/developer?from=10680)にアクセスして詳細を確認してください。
参照:「Ubuntu14.04でDockerを使用してPrometheusをインストールする方法」
Recommended Posts