新たなクラウド監視ツールとして注目され始めている「Sensu」の活用方法を解説する本連載。今回は、CPUやメモリの使用率などのメトリクスを可視化する方法を解説します。
前回は、「Sensu」の3種類のプラグイン「Check」「Handler」「Mutator」のインストールと設定方法、そして、「sensu-plugin」ライブラリを利用した独自プラグインの開発方法を説明しました。
今回は、CPUやメモリの使用率などのメトリクスを可視化する方法を解説します。Sensuはプラグインを使ってメトリクスを収集することはできますが、その結果を保存したり、可視化したりするための機能を備えていません。そこで、時系列データベースや可視化ツールと組み合わせて使う必要があります。
よく利用されている時系列データベースと可視化ツールの組み合わせは、下記の表の3組です。今回は、導入が簡単で軽量な「InfluxDBと「Chronograf」を取り上げます。
時系列データベース | 可視化ツール | |
---|---|---|
組み合わせ1 | Graphite | Grafana |
組み合わせ2 | InfluxDB | Chronograf |
組み合わせ3 | Elasticsearch | Kibana |
InfluxDBとChronografは、どちらもInfluxData社のプロダクトです。InfluxDataは「TICK Stack」と呼ばれるデータの収集、保存、解析、可視化の基盤を提供します(図1)。いずれもGo言語で開発されておりオープンソースですが、一部の機能(InfluxDBのクラスタリング機能、Chronografのアカウント管理機能など)は有料となっています。
InfluxDBとChronografは、パッケージをダウンロードするだけで、簡単にインストールできます。Sensuで収集したメトリクスを保存するためのデータベースを作っておきましょう(標準では無効になっています)。なお、InfluxDBはアカウント認証の機能も備えているので、利用の際には以下の公式ドキュメントを参考にしてください。
また、InfluxDBでは8086/TCPポート、Chronografでは8888/TCPポートを使用するので、「iptables」や「ufw」などのファイアウォールを使っている場合は設定を追加して、これらのポートを開けておくようにしてください。
# InfluxDBとChronografのパッケージをダウンロード $ wget https://dl.influxdata.com/influxdb/releases/influxdb_1.2.4_amd64.deb $ wget https://dl.influxdata.com/chronograf/releases/chronograf_1.3.0_amd64.deb # InfluxDBとChronografのパッケージをインストール $ sudo dpkg -i *.deb # InfluxDBとChronografを起動(自動起動は標準で有効) $ sudo systemctl start influxdb $ sudo systemctl start chronograf # Sensu用のデータベースを作成 $ influx -execute 'create database sensu'
それでは、実際にSensuでメトリクスの収集を開始してみましょう。メトリクスの収集には、監視と同様に「Check」プラグインを使います。設定は「sensu-server」(監視サーバ)上で行い、プラグインはメトリクスの収集を行う「sensu-client」(エージェント)にインストールします。
ここでは、メモリの使用率を測定する「metrics-memory-percent.rb」の設定を紹介します。
sensu-clientでは「sensu-install」コマンドを使って「sensu-plugins-memory-checks」をインストールします。
# sensu-plugins-memory-checksをインストール $ sudo sensu-install -p memory-checks
sensu-serverでは「/etc/sensu/conf.d/metrics-memory-percent.json」を下記の内容で作成します。
{ "checks": { "metrics-memory-percent": { "type": "metric", "command": "metrics-memory-percent.rb", "interval": 10, "subscribers": ["all"], "handlers": ["metrics"] } } }
手動で「metrics-memory-percent.rb」を実行すると、下記のような出力結果が得られます。
$ /opt/sensu/embedded/bin/metrics-memory-percent.rb sensu.hico.io.memory_percent.free 8.800340600386301 1495264257 sensu.hico.io.memory_percent.buffers 10.54728466888135 1495264257 sensu.hico.io.memory_percent.cached 58.689118169194806 1495264257 sensu.hico.io.memory_percent.dirty 0.005468354825920783 1495264257 sensu.hico.io.memory_percent.swapUsed 0.3038412167381606 1495264257 sensu.hico.io.memory_percent.usedWOBuffersCaches 21.963256561537545 1495264257 sensu.hico.io.memory_percent.freeWOBuffersCaches 78.03674343846245 1495264257
出力結果は左から「メトリクス名(ホスト+識別子)」「値」「UNIX時刻」になっています。なお、メトリクスを収集するプラグインは、前回紹介したsensu-pluginを使うことで自作することも可能です。
ここからは、Sensuで収集したメトリクスをInfluxDBに転送するための設定を紹介します。InfluxDBにメトリックスを転送するには、プラグインではなく「Extension」を使用します。通常のプラグインはSensuの外部で実行されますが、ExtensionはSensuの内部で実行されます。そのため、大量のデータを高速に扱う際などに高いパフォーマンスを得ることができます。
ExtensionはHandlerと同様に、sensu-server上でインストールと設定を行います。今回は「sensu-influxdb-extension」を使用しますが、少し事前準備が必要です。まずは、実行に必要なパッケージとライブラリをインストールし、ソースコードをダウンロードします。
# Gemのコンパイルに必要なGCCとmakeをインストール $ sudo apt-get -y install gcc make # Extensionの実行に必要なGemをインストール $ sudo /opt/sensu/embedded/bin/gem install em-http-request multi_json --no-ri --no-rdoc # sensu-influxdb-extensionをダウンロードして配置 $ cd /etc/sensu/extensions $ sudo wget https://raw.githubusercontent.com/Aqutras/sensu-influxdb-extension/master/influxdb.rb $ sudo chmod +x influxdb.rb
次に、sensu-serverで2つの設定ファイルを下記に内容で作成します。「influxdb.json」ではInfluxDBの接続を、「handler-metrics.json」ではExtensionの呼び出しを設定します。準備ができたら、設定を有効にするためにsensu-serverとsensu-clientを再起動してください。
{ "influxdb": { "host": "127.0.0.1", "port": "8086", "database": "sensu" } }
{ "handlers": { "metrics": { "type": "set", "handlers": ["influxdb"] } } }
ここまでの設定で、Sensuでメトリクスの収集と保存が行えるようになったはずです。最後の仕上げとして、Chronografでメトリクスを可視化(グラフ化、ダッシュボード化)してみましょう。
最初に、ChronografのWebインタフェース([例]http://sensu.hico.io:8888)にアクセスして、InfluxDBへの接続設定を入力します(画面1)。今回はInfluxDBと同じホストにインストールしたので、「Connection String」は「http://localhost:8086」になります。「Username」と「Password」は、アカウント認証を有効化していなければ空欄で大丈夫です。
次に、クエリを使ってInfluxDBのデータを検索し、グラフ化します。手順は以下の通りです。
(1)Chronografの画面左のメニューから「DASHBOARDS」に移動し、「Create Dashboard」をクリックします。
(2)「Name This Graph」のプルダウンメニューから「Edit」を選択して、グラフの設定を編集します。
(3)画面下半分の「CELL EDITOR」エリアで「+」をクリックして、新しいクエリを追加します。
(4)テキストエリアに下記のクエリを入力して、「CELL EDITOR」エリアの右上のチェックをクリックすれば完了です(画面2)。
SELECT 100 - "value" FROM "sensu"."autogen"."sensu.hico.io.memory_percent.free" WHERE time > now() - 1h
クエリの内容は「100」から空きメモリのパーセントを引いて、メモリの使用率を取得するものです。InfluxDBのクエリの記述方法については、以下の公式ドキュメントを参照してください。
複数のグラフを組み合わせることで、ホストごとにダッシュボードを作成することもできます(画面3)。CPUやディスクやネットワークなど、複数のホストの状態を一覧で把握できるようになります。メトリクスを収集するプラグインはSensu Pluginsにたくさん用意されているので、自分の環境に必要なものがあるかどうか、ぜひ探してみてください。
今回はSensuでプラグインを使ってメトリクスを収集する方法と、その結果をInfluxDBに保存し、Chronografで可視化するまでの流れを説明しました。簡単にまとめると、以下のような流れになります。
(1)sensu-clientでmetrics-memory-percent.rbを実行し、メトリクスを測定する
(2)sensu-serverでsensu-influxdb-extensionを使用して、InfluxDBに転送する
(3)InfluxDBに保存されたメトリクスをChronografで可視化する
次回は、Sensuをプロダクション環境で使うための冗長化について説明します。sensu-serverと「RabbitMQ」を2系統、「Redis」を3系統構築することで、耐障害性を高めます。Sensuを導入してみたいという方にピッタリの内容ですので、ご期待ください。
生まれも育ちも香川県。香川大学大学院 情報科出身。学生時代は研究の傍ら、勉強会やコミュニティー活動に積極的に参加し、「Sensu Deep Talks」などを主催。2016年4月からは上京し、ICT企業でベアメタルクラウドの開発に従事。趣味は料理とカメラ。
Webサイト:https://hico-horiuchi.github.io/
Copyright © ITmedia, Inc. All Rights Reserved.