Fire Engine

化学の修士号→消防士→ITエンジニア(2016年11月〜)

Prometheusをインストールして、サーバのメトリクスを取得してみる

こんにちは。インフラエンジニア見習いのつるべーです。
最近、オープンソースの監視ツールとして注目を集めているPrometheusのことが気になっています。サーバの監視ツールとしても大変優秀なようですが、時系列なデータを蓄積する時系列データベースとしての側面についても気になります。ということで、今回はCentOS7上にPrometheusをインストールして、監視対象のサーバのメトリクスを取得してみるところまでやってみます!

prometheus.io

Prometheusの概要

Prometheusは、Googleの出身者がGoogle社内の監視ツールである「Borgmon」の影響を受けて作った監視ツールです。
オープンソースであるため、GitHubにコードが公開されています。

github.com

Prometheusでは、監視を行うサーバが監視対象のサーバへメトリクスを取得しにいく「Pull型」のスタイルを採用しています。この際、監視対象のサーバにおいてデータ収集を行うコンポーネントを「exporter」と呼びます。exporterは既存の実装のものも多数存在し、自分で実装することも可能です。すなわち、取得できるデータはサーバの各種メトリクスに限らず、exporterを自作すれば様々な時系列データをPrometheusに溜めこむことができそうです。

動作環境

今回は、Vagrantで立てたCentOS7の仮想マシン上にPrometheusをインストールします。

Vagrantfileは下に載せている通りで、prom(192.168.10.11)がserver1(192.168.10.21)を監視するようにします。

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.define :prom do |prom|
    prom.vm.hostname = "prom"
    prom.vm.network :private_network, ip:"192.168.10.11"
  end

  config.vm.define :server1 do |server|
    server.vm.hostname = "server1"
    server.vm.network :private_network, ip:"192.168.10.21"
  end
end

Prometheusのインストール

監視を行うサーバにPrometheusをインストールします。
※ 実行コマンドはすべてsudo権限で実行しています。

mkdir /usr/local/src/prometheus
cd /usr/local/src/prometheus
yum install -y wget
wget https://github.com/prometheus/prometheus/releases/download/v2.2.0/prometheus-2.2.0.linux-amd64.tar.gz
tar zxvf prometheus-2.2.0.linux-amd64.tar.gz
cd prometheus-2.2.0.linux-amd64

インストール完了後、Prometheusを起動します。

./prometheus --config.file=prometheus.yml

起動したのち、http://192.168.10.11:9090/graph にアクセスすると、下記のような画面が表示されると思います。

f:id:hirotsuru314:20180314010539p:plain

node_exporterインストール

次は、監視対象となるサーバにPrometheusのエージェントとなるnode_exporterをインストールしていきます。
node_exporterを利用すると、ハードウェアやOSに関連した様々な情報を簡単に取得することができます。

mkdir /usr/local/src/node_exporter
cd /usr/local/src/node_exporter
yum install -y wget
wget https://github.com/prometheus/node_exporter/releases/download/v0.16.0-rc.0/node_exporter-0.16.0-rc.0.linux-amd64.tar.gz
tar zxvf node_exporter-0.16.0-rc.0.linux-amd64.tar.gz
cd node_exporter-0.16.0-rc.0.linux-amd64

インストール完了後、下記コマンドにて起動します。

./node_exporter

起動したのち、http://192.168.10.21:9100/metrics にアクセスすると下記のようにメトリクスが表示されています。

f:id:hirotsuru314:20180314010553p:plain

このようにnode_exporterでは設定を行わずとも、デフォルトでホストのCPUやメモリ使用状況などさまざまなデータを取得できるようになっています。取得するデータは、起動時のオプションでカスタマイズすることもできるようです。
詳しくはこちらを見るとよさそうです。
これで監視対象サーバへのnode_exporterのインストールが終わり、あとは監視を行うPrometheus本体から監視対象サーバへデータを取得しにいくように設定をすればよさそうです。プル型の監視なので設定はもちろんPrometheus本体側に行います。
Prometheusを一旦停止して、/usr/local/src/prometheus/prometheus-2.2.0.linux-amd64/prometheus.ymlを下記のように書き換えます。

global:
  scrape_interval:     15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'node'
    scrape_timeout: 10s
    static_configs:
      - targets: ['192.168.10.21:9100']

そして、再度Prometheusを起動し、http://192.168.10.11:9090/graph にアクセスします。 「Status」メニューの「Targets」を選択すると、データ取得対象一覧が表示され、先ほど設定した192.168.10.21:9100が表示されていると思います。

f:id:hirotsuru314:20180314010607p:plain

監視対象のサーバのメトリクスは「Graph」メニューで、「- insert metrix at cursor -」となっているプルダウンから任意のメトリクスを選択して「Execute」ボタンを押すと取得したデータ一覧がConsoleに出てきて、タブで「Graph」に切り替えると下のようにグラフが見ることができます。

f:id:hirotsuru314:20180314010733p:plain

おわりに

今回は、CentOS上にPrometheusをインストールする方法とnode_exporterを使って、サーバのメトリクスを取得するところまで書きました。実際には監視したメトリクスをもとにアラートを飛ばす機能やGrafanaというツールと連携してより美しいグラフを描画したりなどいろいろできます。また、exporterを自作すれば取得するデータの幅も広がりますし、工夫次第でいろいろできそうですね。
私個人としては、もともと時系列データの異常検知に興味を持っており、ライブラリを作ったりしていたため、Prometheusの時系列データベースに溜め込んだデータの異常検知などをやってみたいなーと思っています。
以上、今回は非常に単純な内容でしたが、今後はPrometheusの応用編も書けるといいなーって思っています!