こんにちは。インフラエンジニア見習いのつるべーです。
最近、オープンソースの監視ツールとして注目を集めているPrometheusのことが気になっています。サーバの監視ツールとしても大変優秀なようですが、時系列なデータを蓄積する時系列データベースとしての側面についても気になります。ということで、今回はCentOS7上にPrometheusをインストールして、監視対象のサーバのメトリクスを取得してみるところまでやってみます!
Prometheusの概要
Prometheusは、Googleの出身者がGoogle社内の監視ツールである「Borgmon」の影響を受けて作った監視ツールです。
オープンソースであるため、GitHubにコードが公開されています。
Prometheusでは、監視を行うサーバが監視対象のサーバへメトリクスを取得しにいく「Pull型」のスタイルを採用しています。この際、監視対象のサーバにおいてデータ収集を行うコンポーネントを「exporter」と呼びます。exporterは既存の実装のものも多数存在し、自分で実装することも可能です。すなわち、取得できるデータはサーバの各種メトリクスに限らず、exporterを自作すれば様々な時系列データをPrometheusに溜めこむことができそうです。
動作環境
今回は、Vagrantで立てたCentOS7の仮想マシン上にPrometheusをインストールします。
Vagrant 2.0.2
VirtualBox 5.2.6
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 にアクセスすると、下記のような画面が表示されると思います。
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 にアクセスすると下記のようにメトリクスが表示されています。
このように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
が表示されていると思います。
監視対象のサーバのメトリクスは「Graph」メニューで、「- insert metrix at cursor -」となっているプルダウンから任意のメトリクスを選択して「Execute」ボタンを押すと取得したデータ一覧がConsoleに出てきて、タブで「Graph」に切り替えると下のようにグラフが見ることができます。
おわりに
今回は、CentOS上にPrometheusをインストールする方法とnode_exporterを使って、サーバのメトリクスを取得するところまで書きました。実際には監視したメトリクスをもとにアラートを飛ばす機能やGrafanaというツールと連携してより美しいグラフを描画したりなどいろいろできます。また、exporterを自作すれば取得するデータの幅も広がりますし、工夫次第でいろいろできそうですね。
私個人としては、もともと時系列データの異常検知に興味を持っており、ライブラリを作ったりしていたため、Prometheusの時系列データベースに溜め込んだデータの異常検知などをやってみたいなーと思っています。
以上、今回は非常に単純な内容でしたが、今後はPrometheusの応用編も書けるといいなーって思っています!