話題の記事

リアルタイムなリソースモニタリングツールのnetdataを試してみた

2016.08.19

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

久しぶりにvyosネタではない市田です。
今回は、netdataというLinux向けのモニタリングツールについてご紹介します。

netdataとは

netdataは、ZabbixやNagiosなどの監視ツールとは異なり、リアルタイムパフォーマンスモニタリングができるツールです。
その代わりと言ってはなんですが、長期間の監視データの蓄積などはできないので、過去のパフォーマンスグラフを参照すると言ったことはできません。

以下のようなリアルタイムなリソースグラフを見ることができます。
下記のgifではカクカクしていますが、実際はもっと滑らかな動きのあるグラフになります。公式サイトが参考になるかと思います。

NetData - Real-time performance monitoring, done right!

ダッシュボード

netdataの特徴

githubでは以下の特徴を謳っています。

  • Stunning bootstrap dashboards
    • 美しいbootstrapなダッシュボード
  • Blazingly fast and super efficient
    • C言語製で動作が早く低負荷(CPU使用率1%未満,数MBのRAM消費)
  • Zero configuration
    • インストールするだけで後は(モニタリング対象を)自動検出
  • Zero dependencies
    • netdata自身がWebサーバを内包
  • Zero maintenance
    • 起動したら後はそのままメンテナンス要らず
  • Custom dashboards
    • 簡単なHTMLでカスタマイズ可能なダッシュボード
  • Extensible
    • プラグインを利用することでメトリクスを収集できるあらゆるものをモニタリング可能
  • Embeddable
    • 組み込みLinuxでも実行できる

インストール

インストールはマニュアル通りにやるだけで、とても簡単です。
今回は試しにAmazonLinuxにインストールしてみました。

OS別のインストール手順は以下に詳しく書かれています。

Installation · firehol/netdata Wiki · GitHub

必要とされるパッケージのインストール

先ほどのページに書かれている手順に従って、事前に必要なパッケージをインストールします。

# yum install zlib-devel libuuid-devel libmnl-devel gcc make git autoconf autogen automake pkgconfig

netdataインストール

こちらも手順通りです。

# git clone https://github.com/firehol/netdata.git --depth=1
# cd netdata
# ./netdata-installer.sh

インストール自体はこれで完了です。 OSを再起動しても起動できるようにしておきます。

# cd /etc/init.d/
# cp -p ~/netdata/system/netdata-init-d ./netdata
# chmod 755 netdata
# chkconfig --add netdata
# chkconfig netdata on

netdata起動

# service netdata start

起動したらWebサーバが19999ポートでListenしますので、下記の形のURLにアクセスします。

http://<your-server-IP or Your-Server-Name>:19999

先ほどのリソースグラフが見えれば導入完了です。

スマホでの表示

少しグラフが小さくなりますが、勿論スマホからも見ることができます。

モバイルアクセス

アプリケーション別リアルタイムモニタリング

netdataはサーバに導入したアプリケーション(ミドルウェア)別にリソース表示もしてくれます。

ApacheやMySQLといったメジャーなアプリケーションについてはデフォルトで設定ファイルに記載されているので、対象のアプリをインストールすると自動的にグラフに反映してくれます。

例えば、Apacheをインストールすると、下記のようにグラフにApacheのグラフが追加で表示されます。
グラフの横に濃いピンク色の文字で「apache」と表示されているのが見えるでしょうか? 同じ色でapacheのリソース状況がグラフ描画されています。

デフォルト以外のアプリをグラフ表示したい場合は、/etc/netdata/apps_groups.confに追記します。フォーマットはapps_groups.confに詳細な説明があるのでそちらをご参照ください。

Apache追加後のグラフ

なぜnetdata?

世の中にはモニタリングツールはとてもたくさん存在しますが、単なるモニタリングツールとは思想が異なるようで、公式には「オペレーショナル・エクセレンスの実現を支援することが目標」のツールと紹介されています。

「オペレーショナル・エクセレンス」という音葉は私は初めて聞きましたが、おおよそ次のような意味です。

業務改善プロセスが定常的に走り続け、様々な業務機能が強化されることで競走上の優位性にまで昇華されている状態のこと

つまり、netdataを利用することで、業務プロセスの改善を図り事業の競争優位性を高めることを目的としたツールということのようです。

オペレーショナル・エクセレンス - Wikipedia

netdataのFAQ

FAQページには、netdataの思想に基づく特徴的な記述がありましたので紹介したいと思います。

あくまでもnetdata作者の見解なので、賛否両論あると思いますが個人的に面白いと感じましたので参考にしていただければと思います。

なぜデータ収集ツールを作ったのか?

すでに多くの類似ツールが存在しているが、次のような問題があると感じたから。

  • 既存ツールは1秒おきのデータ収集ができない(netdataは1秒おきに収集します)
  • 1秒おきのデータ収集ができても、すべてのシステム上で実行できるように最適化されていない
  • 既存ツールは設定する必要があるが、netdataは設定する必要がない(設定ファイルを自環境に合わせて作る必要がない)

netdataはリアルタイムなデータ収集と可視化を効率的に行えることを証明している。

短期間の過去データを持つことは実用的なのか?

意図によりYesとNoの両方だ。

私たちの目的は「リアルタイムなデータ収集と可視化」だ。
競合ツールにはNagiosやZabbixなどがあるが、それらのツールは「過去のパフォーマンスに関する統計」を示してくれるものだ。 netdataは、コンソールツールのような「リアルタイムパフォーマンスモニタリング」を示してくれて、それが異なる点だ。
もちろん、過去データの参照は私たちの次なる優先度だ。

(つまり、netdataは収集したデータを蓄積するということはしません。)

なぜ「中央サーバ」がないのか?

私たちは「モニタリング」はスケールアップではなく、スケールアウトすべきだと考えている。
いわゆる「中央」の監視サーバはリアルタイムモニタリングにおいて遅延を発生させてしまい、最終的に全体の思想が破綻してしまうだろう。

しかし、私たちはWebブラウザで全世界と繋がっている。これはすべてのnetdataを繋げる「中央」の役割を果たす。

(netdataサーバ同士は通信しないので、利用者のブラウザがサーバ同士をつなげるイメージです)

netdataサーバの管理上の課題

my-netdataメニュー

netdataを入れたサーバが多くなってくると、そのURLを効率的に管理したり、ストレスなくサーバ毎に画面を切り替えたいと考えると思います。

そんな要望に応えるために、netdataのダッシュボードには「my-netdata」というメニューが存在します。
ここをクリックすると、デフォルト設定では過去にアクセスしたことのあるnetdataサーバ全ての一覧が表示されます。

my-netdataメニュー

my-netdataメニューの課題

しかし、上記の仕組みを単純に考えると、過去にアクセスしたことのあるnetdataサーバだけが一覧表示されるのであれば、複数のnetdataサーバがある場合に問題になります。

例えば、普段使っているPCとは別のマシンから同じように自分のサーバ群のnetdataグラフを見たいという場合などです。

この時、利用しているPCが変わるので、いつものPCと同じように全てのサーバのグラフを見る為には、全てのnetdataサーバにアクセスして、自分のnetdataサーバの情報をそのPCのブラウザに記憶させていかなければいけません。

これはとても非効率です。

central registryという仕組み

このような問題を解決する為に、netdataでは「central registry」と呼ばれる仕組みを持っています。

この「central registry」とは簡単にいうと、自分のnetdataサーバ群の情報を特定のnetdataサーバで管理するというものです。
この管理ノードとなるnetdataのことを「registry」と呼んでいます。

「registry」サーバは、特定範囲のnetdataサーバの情報を集約すると同時に、「Registry Identity」という一意のIDを振り出します。

このID情報は「registry」サーバが管理しているnetdataサーバ群の情報に関連づいているので、全く新しい環境(ブラウザ)からでもID情報をセットするだけで自分のnetdataサーバの一覧にアクセスできる、という仕組みです。

Who talks to the registry?

registryノードの設定方法

設定は簡単です。/etc/netdata/netdata.confという設定ファイルを編集します。
公式ページにある通りですが、registryとなるサーバに対して下記のように編集します。

[registry]
    enabled = yes
    registry to announce = http://your.registry:19999

他のnetdataサーバは下記のようにします。

[registry]
    enabled = no
    registry to announce = http://your.registry:19999

違いは、registryサーバのみenabled = yesになっている点のみです。
(必要に応じてhttpsなどで設定してください。)

それぞれ設定ファイルの修正が終わればnetdataを再起動します。

# service netdata restart

これで、上記で設定したregistryサーバに各netdataサーバの情報が集まるようになりました。

異なるブラウザで同じnetdataサーバ一覧を表示する

次に、自分のnetdataサーバ群の一覧を異なるブラウザ間で共有させてみたいと思います。

まず最初に、chromeを普段使いのブラウザと想定して、2つのnetdataサーバにアクセスしてみます。
すると下記のようにmy-netdataメニューに2つのnetdataサーバのリストが表示されます。

備考:
一覧に出るのはnetdata.confで設定できるホスト名です。
今回は、registryサーバだけnetdata-1というホスト名にしました。

chrome初回アクセス

次に普段使ってないsafariでregistryサーバにアクセスします。
safariではnetdataに初めてアクセスしたので、my-netdataメニューにはregisryサーバしかリストに出てきません。

safariアクセス

次に、先ほどのchromeに戻って、my-netdataメニューから下記のようにギアマークをクリックします。

ID取得

クリックすると下記のようなウィンドウが開くので、ここに書かれているIDをコピーします。

IDコピー

コピーできたら再度safariに戻り、同じようにmy-netdataメニューから同じ画面を開き、先ほどのIDをペーストします。
この状態でimpersonateをクリックします。

safari2回目

ここまでできたら、safariで再度my-netdataメニューを開いてみると、chromeと同じリストが表示されました。

safariで確認

同じように、他のPCの場合でも同じリストを表示させることができます。

最後に

複数のサーバに入れてサーバリストを共有できる仕組みは面白いと思いますし、単にリアルタイムなモニタリングシステムとしてもとても有用なツールだと思います。

CloudWatchやZabbixなどと組み合わせて使うと良さそうな気がしました。

以上になります。