InfluxDBとGrafanaで作るサーバ監視環境

Grafanaはデータの視覚化ツールとして人気ですね。今回はInfluxDBをデータソースとして性能監視環境を構築した際のメモです。

もくじ:

はじめに

オンプレミスでサーバ・ネットワークを監視するツールは数あり、比較的歴史の長い古典的な分野です。OSS/コミュニティ版が利用できるものに限ってもSensu, Zabbix, Icinga, Nagiosといった多数のソフトウェアがあります。
機能やアーキテクチャ、構成管理ツールとの連携などそれぞれに特色がありますが、機能の多さと要求性能の高さはやはり比例するもの。
自宅や個人的な実験環境などで、簡易に監視用のダッシュボードを作る機能が欲しいという程度であればちょっと大がかりすぎですね。

以前はMuninを使っていましたがUIや近年の開発状況はちょっとおしい感じ、ということでInfluxDB+Grafanaに乗り換えてみました。
個人的には、大げさなものは必要ない、けれどもこなれたフレームワークが欲しい、というときにちょうどいい印象です。

完成形はこんな感じ。各監視対象から性能データをPOSTさせ、Grafanaで視覚化します。

Grafanaは多彩なデータソースをサポートしており、今回のInfluxDBのみでなくGraphiteやElasticsearch、最近流行りのPrometheusなどを使うこともできます。

InfluxDBのインストール

Linuxでもaptやyumなど、よくあるディストリビューションのパッケージマネージャ経由で利用することができます。以前はWebベースの管理GUIがありましたが、最近はサポートされていないようです。まあChronografを使えってことだと思います。

今回は公式ページを参考にCentOS7環境へインストールするためのBashスクリプトを用意しましたが、もちろん手動でコマンドを打っても結果は同じです。
下記はレポジトリを追加するための定義ファイルと、インストレール作業用のシェルスクリプトです。本体をyum経由でインストールしているほか、InfluxDBがデフォルトで利用するポートを許可するためにファイヤウォールを設定しています。設定を変えている場合は環境に合わせて変更して下さい。

レポジトリ定義:

インストール用スクリプト:

情報収集クライアント

InfluxData公式(TICKスタック)の収集用エージェント(コレクタ)はTelegrafというGolang製クライアントです。が、機能が豊富さゆえにインストールがちょっと面倒。

要は性能情報を拾ってHTTP API経由でInfluxDBへ送り込んでいく機能さえあればいいので、最低限なメトリクスに限れば意外と簡単に自前で作成することもできます。

今回は別記事で作成した性能情報取得スクリプトInfluxDBクライアントを使用し、cron(Linux)やタスクスケジューラ(Windows)で定期的に自動実行させるように構成しました。

スキーマの定義はTelegrafのプラグイン実装に倣うと、CPUなどのコンポーネントをmeasurementに対応させているようですね。
細分化させると面倒なので、とりあえずひとつにまとめてしまっても構いません。

別記事の実装を使うとPowerShell版のクライアントはこんな感じに書けます。

Grafanaのインストール

GarafanaのインストールもInfluxDBと同様です。

レポジトリ定義:

インストール用スクリプト:

ただし、自宅ではRaspberry Pi 3 (+Raspbian)にインストールしてみたところ上記の方法ではうまくいきませんでした(しれっとインストールは完了するけれどもjavascript関連で画面がブランクになる)。ARMv7用にビルドされたstable版のdebパッケージを使うとインストールできました。

ただし、ラズパイはさすがにストレージ回りが貧弱(というかSDカード)なので、画面表示時にエラーを吐くことがあります。

デフォルトでは3000番ポートで待ち受けており、ルートにアクセスすると初回はログイン画面&パスワード変更画面に遷移します。
初期アカウントはユーザ名admin/パスワードadminです。

使い方はそう複雑でもないので実際に触ってみるとわかりますが、まずはデータソースの登録から始め、ダッシュボードを作成する流れになります。

データソースとしては今回、InfluxDBを選択。適宜アクセスに必要なアドレスやデータベース名、アカウントを入力します。設定時にテストするので正常に通信できているか確認できるはずです。

ダッシュボードを作成する際、例えばグラフのパネルを追加する場合のスクショを張っておきます。

おわり。