Prometheusを使用してCentOS7サーバーを監視する方法
序章
Prometheusは、SoundCloudによって開発されたオープンソースの監視システムです。 InfluxDBやGraphiteなどの他の監視システムと同様に、Prometheusはすべてのデータを時系列データベースに保存します。 ただし、多次元データモデルと強力なクエリ言語を提供するため、システム管理者はメトリックの定義を簡単に微調整できるだけでなく、より正確なレポートを生成することもできます。
さらに、Prometheusプロジェクトには、PromDash(カスタムダッシュボードの開発に使用できるブラウザーベースのツール)と、電子メール、Flowdock、Slack、HipChatなどを介してアラートを送信できる実験的なAlertManagerも含まれています。
このチュートリアルでは、Prometheusサーバー、ノードエクスポーター、およびPromDashをインストール、構成、および使用する方法を学習します。
前提条件
このチュートリアルに従うには、次のものが必要です。
- 1つの64ビットCentOS7ドロップレット
- 非rootsudoユーザー、できればprometheusという名前のユーザー。
ステップ1—PrometheusServerをインストールする
まず、このチュートリアルでダウンロードしたすべてのファイルを保存するための新しいディレクトリを作成し、そこに移動します。
- mkdir ~/Downloads
- cd ~/Downloads
curl
を使用して、Prometheusサーバーの最新ビルドと時系列データベースをGitHubからダウンロードします。
- curl -LO "https://github.com/prometheus/prometheus/releases/download/0.16.0/prometheus-0.16.0.linux-amd64.tar.gz"
Prometheus監視システムはいくつかのコンポーネントで構成されており、各コンポーネントを個別にインストールする必要があります。 すべてのコンポーネントを1つの親ディレクトリ内に保持することをお勧めします。そのため、mkdir
を使用してコンポーネントを作成します。
- mkdir ~/Prometheus
作成したディレクトリを入力します。
- cd ~/Prometheus
tar
を使用してprometheus-0.16.0.linux-amd64.tar.gz
を抽出します。
- tar -xvzf ~/Downloads/prometheus-0.16.0.linux-amd64.tar.gz
これでPrometheusサーバーのインストールは完了です。 次のコマンドを入力して、インストールを確認します。
- ~/Prometheus/prometheus-0.16.0.linux-amd64/prometheus -version
画面に次のメッセージが表示されます。
prometheus, version 0.16.0 (branch: HEAD, revision: dcb8ba4)
build user: [email protected]
build date: 20151009-23:51:17
go version: 1.5.1
ステップ2—ノードエクスポーターのインストール
Prometheusは、Webサービスを監視する目的で開発されました。 CentOSサーバーのメトリックを監視するには、NodeExporterと呼ばれるツールをインストールする必要があります。 Node Exporterは、その名前が示すように、Prometheusが理解できる形式で多くのメトリック(ディスクI / O統計、CPU負荷、メモリ使用量、ネットワーク統計など)をエクスポートします。
Downloads
ディレクトリに入り、curl
を使用して、GitHubで入手できるNodeExporterの最新ビルドをダウンロードします。
- cd ~/Downloads && curl -LO "https://github.com/prometheus/node_exporter/releases/download/0.11.0/node_exporter-0.11.0.linux-amd64.tar.gz"
Prometheus
ディレクトリ内にnode_exporter
という名前の新しいディレクトリを作成し、その中に入れます。
- mkdir ~/Prometheus/node_exporter
- cd ~/Prometheus/node_exporter
これで、tar
コマンドを使用してnode_exporter-0.11.0.linux-amd64.tar.gz
を抽出できます。
- tar -xvzf ~/Downloads/node_exporter-0.11.0.linux-amd64.tar.gz
ステップ3—ノードエクスポーターをサービスとして実行する
Node Exporterの起動と停止を簡単にするために、NodeExporterをサービスに変換してみましょう。
vi
またはその他のテキストエディタを使用して、node_exporter.service
というユニット構成ファイルを作成します。
- sudo vi /etc/systemd/system/node_exporter.service
このファイルには、node_exporter
実行可能ファイルのパスが含まれている必要があり、実行可能ファイルを実行するユーザーも指定する必要があります。 したがって、次のコードを追加します。
[Unit]
Description=Node Exporter
[Service]
User=prometheus
ExecStart=/home/prometheus/Prometheus/node_exporter/node_exporter
[Install]
WantedBy=default.target
ファイルを保存して、テキストエディタを終了します。
systemd
をリロードして、作成した構成ファイルを読み取ります。
- sudo systemctl daemon-reload
この時点で、NodeExporterはsystemctl
コマンドを使用して管理できるサービスとして利用できます。 起動時に自動的に起動するように有効にします。
- sudo systemctl enable node_exporter.service
これで、サーバーを再起動するか、次のコマンドを使用してサービスを手動で開始できます。
- sudo systemctl start node_exporter.service
起動したら、ブラウザを使用して、http://your_server_ip:9100/metrics
で利用可能なNodeExporterのWebインターフェイスを表示します。 多くのテキストを含むページが表示されるはずです。
# HELP go_gc_duration_seconds A summary of the GC invocation durations.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 0.00023853100000000002
go_gc_duration_seconds{quantile="0.25"} 0.00023998700000000002
go_gc_duration_seconds{quantile="0.5"} 0.00028122
. . .
ステップ4—PrometheusServerを起動する
Prometheusサーバーをインストールしたディレクトリを入力します。
cd ~/Prometheus/prometheus-0.16.0.linux-amd64
Prometheusを起動する前に、まずprometheus.yml
という名前の構成ファイルを作成する必要があります。
- vi ~/Prometheus/prometheus-0.16.0.linux-amd64/prometheus.yml
次のコードをファイルにコピーします。
scrape_configs:
- job_name: "node"
scrape_interval: "15s"
target_groups:
- targets: ['localhost:9100']
これにより、scrape_configs
セクションが作成され、node
というジョブが定義されます。 targets
の配列にNodeExporterのWebインターフェイスのURLが含まれます。 scrape_interval
は15秒に設定されているため、Prometheusは15秒ごとにメトリックをスクレイプします。
ジョブには任意の名前を付けることができますが、「ノード」と呼ぶと、NodeExporterのデフォルトのコンソールテンプレートを使用できます。
ファイルを保存して終了します。
Prometheusサーバーをバックグラウンドプロセスとして起動します。
- nohup ./prometheus > prometheus.log 2>&1 &
Prometheusサーバーの出力をprometheus.log
というファイルにリダイレクトしたことに注意してください。 tail
コマンドを使用して、ファイルの最後の数行を表示できます。
- tail ~/Prometheus/prometheus-0.16.0.linux-amd64/prometheus.log
サーバーの準備が整うと、ファイルに次のメッセージが表示されます。
INFO[0000] Starting target manager... file=targetmanager.go line=75
INFO[0000] Listening on :9090 file=web.go line=118
ブラウザを使用して、http://your_server_ip:9090
にあるPrometheusのホームページにアクセスします。 次のホームページが表示されます。
PrometheusがNodeExporterからデータをスクレイピングしていることを確認するには、ページ上部のGraphタブをクリックします。 開いたページで、 Expression というテキストフィールドにメトリックの名前(たとえば、 node_procs_running など)を入力します。 次に、青い実行ボタンを押します。 すぐ下のグラフ(コンソールの横)をクリックすると、そのメトリックのグラフが表示されます。
Prometheusには、一般的に使用されるいくつかのメトリックのグラフを表示できるコンソールテンプレートがあります。 これらのコンソールテンプレートにアクセスできるのは、Prometheusの構成でjob_name
の値をnode
に設定した場合のみです。
http://your_server_ip:9090/consoles/node.html
にアクセスしてノードコンソールにアクセスし、サーバー localhost:9100 をクリックして、そのメトリックを表示します。
ステップ5—PromDashをインストールする
Prometheusサーバーでは、グラフを表示したり、式を試したりすることができますが、通常は、デバッグ目的または1回限りのクエリの実行にのみ使用されます。 Prometheusの時系列データベースのデータを視覚化するための推奨される方法は、PromDashを使用することです。これは、高度に構成可能であるだけでなく、見栄えの良いカスタムダッシュボードを作成できるツールです。
Prometheus
ディレクトリに入ります。
- cd ~/Prometheus
PromDashはRubyonRailsアプリケーションであり、そのソースファイルはGitHubで入手できます。 ダウンロードして実行するには、Git、Ruby、およびいくつかのビルドツールをインストールする必要があります。 これを行うには、yum
を使用します。
- sudo yum install git ruby ruby-devel sqlite-devel zlib-devel gcc gcc-c++ automake patch
これで、git
コマンドを使用してソースファイルをダウンロードできます。
- git clone https://github.com/prometheus/promdash.git
promdash
ディレクトリに入ります。
- cd ~/Prometheus/promdash
PromDashはいくつかのRubygemに依存しています。 これらのgemのインストールを自動化するには、bundler
というgemをインストールする必要があります。
- gem install bundler
これで、bundle
コマンドを使用して、PromDashに必要なすべてのRubygemをインストールできます。 このチュートリアルではSQLite3で動作するようにPromDashを構成するため、--without
パラメーターを使用してMySQLとPostgreSQLのgemを除外してください。
- bundle install --without mysql postgresql
このコマンドが完了するまで、数分待たなければならない場合があります。 完了すると、次のメッセージが表示されます。
. . .
Your bundle is complete!
Gems in the groups mysql and postgresql were not installed.
Use `bundle show [gemname]` to see where a bundled gem is installed.
ステップ6—Rails環境のセットアップ
PromDashに関連付けられたSQLite3データベースを保存するディレクトリを作成します。
- mkdir ~/Prometheus/databases
PromDashは、DATABASE_URL
という環境変数を使用して、関連付けられているデータベースの名前を判別します。 次のように入力して、PromDashがdatabases
ディレクトリ内にmydb.sqlite3
というSQLite3データベースを作成します。
- echo "export DATABASE_URL=sqlite3:$HOME/Prometheus/databases/mydb.sqlite3" >> ~/.bashrc
このチュートリアルでは、PromDashを本番モードで実行するため、RAILS_ENV
環境変数をproduction
に設定します。
- echo "export RAILS_ENV=production" >> ~/.bashrc
.bashrc
ファイルに加えた変更を適用します。
- . ~/.bashrc
次に、rake
ツールを使用して、SQLite3データベースにPromDashのテーブルを作成します。
- rake db:migrate
PromDashはRailsアセットパイプラインを使用するため、PromDashプロジェクトのすべてのアセット(CSSファイル、イメージ、およびJavascriptファイル)をプリコンパイルする必要があります。 これを行うには、次のように入力します。
- rake assets:precompile
ステップ7—PromDashの起動と構成
PromDashは、軽量のWebサーバーであるThinで実行されます。 次のコマンドを入力して、サーバーをデーモンとして起動します。
- bundle exec thin start -d
サーバーが起動するまで数秒待ってから、http://your_server_ip:3000/
にアクセスしてPromDashのホームページを表示します。
カスタムダッシュボードの作成を開始する前に、PromDashにPrometheusサーバーのURLを通知する必要があります。 上部のサーバータブをクリックすると、これを行うことができます。 新しいサーバーをクリックし、フォームでPrometheusサーバーに任意の名前を付けます。 URLフィールドをhttp://your_server_ip:9090
に設定し、サーバータイプフィールドをPrometheusに設定します。
最後に、サーバーの作成をクリックして構成を完了します。 ページにサーバーが正常に作成されました。と表示され、トップメニューのダッシュボードに戻ることができます。
ステップ8—ダッシュボードの作成
PromdashダッシュボードはPromdashディレクトリに属している必要があるため、最初に NewDirectoryをクリックして新しいディレクトリを作成します。 表示されるフォームで、マイダッシュボードのようにディレクトリに名前を付け、ディレクトリの作成をクリックします。
フォームを送信すると、ホームページに戻ります。 新しいダッシュボードボタンをクリックして、新しいダッシュボードを作成します。 表示されたフォームで、 Simple Dashboard のようにダッシュボードに名前を付け、ドロップダウンメニューから作成したディレクトリを選択します。
フォームを送信すると、新しいダッシュボードが表示されます。
ダッシュボードにはすでに1つのグラフがありますが、構成する必要があります。 グラフのヘッダー( Title と表示)にカーソルを合わせると、グラフを構成するためのさまざまなアイコンが表示されます。 タイトルを変更するには、グラフと軸の設定アイコン(左から4番目)をクリックして、グラフタイトルフィールドに新しいタイトルを入力します。
左から2番目のDatasourcesアイコンをクリックして、グラフに1つ以上の式を追加します。 式の追加をクリックし、式の入力というフィールドにnode_procs_runningと入力します。
次に、グラフのヘッダーにある更新アイコン(左端のアイコン)をクリックして、グラフを更新します。 これで、ダッシュボードに完全に構成されたグラフが1つ含まれます。 下部にあるグラフの追加ボタンをクリックすると、グラフをさらに追加できます。
すべての変更を行ったら、右側の [変更を保存]ボタンをクリックして、変更を永続的にしてください。 次回PromDashのホームページにアクセスすると、ダッシュボードへのリンクが表示されます。
結論
これで、CentOS 7サーバーで完全に機能するPrometheusエコシステムが実行され、PromDashを使用して要件に合った監視ダッシュボードを作成できます。
すべてのコンポーネントを単一のCentOSマシンにインストールした場合でも、各コンポーネントにNode Exporterのみをインストールし、新しいNodeExporterのURLをprometheus.yml
。
Prometheusの詳細については、ドキュメントを参照してください。