Ubuntu16.04でNetdataを使用してリアルタイムのパフォーマンス監視を設定する方法
序章
Netdata は、Linuxシステム上のプロセスとサービスを視覚化する拡張可能なWebダッシュボードを通じて、正確なパフォーマンス監視を提供します。 CPU、メモリ、ディスク、ネットワーク、プロセスなどに関するメトリックを監視します。
Netdataは、インストール後に追加の構成を必要としませんが、大幅なカスタマイズを提供します。 アプリケーションの効率と速度は、vmstat
、iostat
、htop
などのネイティブコンソール管理ツールに匹敵することを目的としています。
このチュートリアルの手順は、組み込みのWebサーバーまたはオプションでNginxを使用してNetdataを実行する1つのUbuntu16.04サーバーを正常にセットアップするために必要なすべてをカバーしています。
前提条件
このチュートリアルに従うには、次のものが必要です。
- Ubuntu 16.04の初期サーバーセットアップに従ってセットアップされた1つのUbuntu16.04サーバー。これには、sudo非rootユーザーとファイアウォールが含まれます。
- サーバーにインストールされたGit。Ubuntu16.04にGitをインストールする方法に従ってセットアップできます。
- オプションで、サーバーにNginxをインストールします。これは、 Ubuntu16.04にNginxをインストールする方法に従ってセットアップできます。 これは必須ではありませんが、Netdataの組み込みWebサーバーよりも多くの機能とセキュリティを実現します。
ステップ1—Netdataをインストールする
何かをインストールする前に、システムパッケージインデックスが最新であることを確認してください。
- sudo apt-get update
次に、Netdataの依存関係をインストールします。これには、gcc
(Cコンパイラ)、 GNU Autoconf ツール、 GUID 管理、およびNetdataの内部Webサーバー用の圧縮ライブラリが含まれます。
- sudo apt-get install zlib1g-dev uuid-dev libmnl-dev gcc make autoconf autoconf-archive autogen automake pkg-config curl
次のパッケージセットはオプションですが、Netdataによって推奨されており、 Python 、一部のPythonパッケージ、およびNode.JSが含まれています。 システムパッケージマネージャーにバンドルされているNode.jsの安定版は、Netdataの要件に適しています。 次にこれらをインストールします。
- sudo apt-get install python python-yaml python-mysqldb python-psycopg2 nodejs lm-sensors netcat
Netdata自体をインストールするには、プロジェクトのGitHubリポジトリを使用する必要があります。 Netdataリポジトリをホームディレクトリに複製します。
- git clone https://github.com/firehol/netdata.git --depth=1 ~/netdata
新しく複製されたディレクトリに移動します。
- cd ~/netdata
次に、このディレクトリでnetdata-installer.sh
シェルスクリプトを使用してアプリケーションをビルドしてインストールします。 ここにsudo
を追加してください。そうしないと、Netdataが(データコレクターを介して)システムデータを収集する方法が正しく機能しません。
- sudo ./netdata-installer.sh
最初に表示される出力には、Netdataがすべてのコンポーネントを格納する場所に関する情報が含まれています。 これらを読むことで、インストール後にプログラムがファイルシステム全体にどのように分散されるかをもう少し理解できます。
Installer Output. . .
It will be installed at these locations:
- the daemon at /usr/sbin/netdata
- config files at /etc/netdata
- web files at /usr/share/netdata
- plugins at /usr/libexec/netdata
- cache files at /var/cache/netdata
- db files at /var/lib/netdata
- log files at /var/log/netdata
- pid file at /var/run
. . .
ENTER
を押してインストールを続行します。 しばらくすると、出力チェーンの最後に次のメッセージが表示されます。
. . .
[secondary_label Installer Output]
^
|.-. .-. .-. .-. .-. . netdata .-. .-
| '-' '-' '-' '-' '-' is installed and running now! -' '-'
+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--->
enjoy real-time performance and health monitoring...
これでNetdataがインストールされて正常に実行され、サーバーを再起動すると自動的に実行されます。
Ubuntu 16.04の初期サーバーセットアップチュートリアルで詳しく説明されているように、UFWを有効にしている場合は、Netdataの内部Webサーバーのポート19999
を開く必要があります。
- sudo ufw allow 19999/tcp
この時点で、お気に入りのブラウザでhttp://your_server_ip:19999/
にアクセスすると、デフォルトのダッシュボードを表示できます。 システムのライブメトリックの概要が表示されます。 これは、これまでのところすべてが機能していることを確認するのに適していますが、GUIを調べる前に、Netdataを少しカスタマイズしましょう。
ステップ2—Netdataのメモリ使用量を設定する
http://your_server_ip:19999/netdata.conf
にアクセスすると、ブラウザでNetdataの現在の構成を表示できます。
ここで、構成可能なオプションのすべて(またはほとんど)がコメント化されていることがわかります(つまり、 #
で始まります)。 これは、Netdataの構成が、想定されるデフォルトのセットを使用して機能するためです。 無効になっている設定は、Netdataのデフォルト値を使用します。 設定がコメント化されていない場合、指定された値がデフォルトを上書きします。 これにより、構成ファイルは変更したものだけに含まれます。
サーバーに戻ると、構成ファイル自体は/etc/netdata/netdata.conf
です。 このチュートリアルでカスタマイズするオプションは、history
パラメーターです。 これは、Netdataが使用しているメモリデータベースの最大サイズを制御します。
ここで、Netdataに割り当てるRAMの量、または記録されたグラフデータが失われる前に保持する時間を決定する必要があります。
- 3600秒(1時間のグラフデータ保持)は15MBのRAMを使用します
- 7200秒(2時間のグラフデータ保持)は30MBのRAMを使用します
- 14400秒(4時間のグラフデータ保持)は60MBのRAMを使用します
- 28800秒(8時間のグラフデータ保持)は120MBのRAMを使用します
- 43200秒(12時間のグラフデータ保持)は180MBのRAMを使用します
- 86400秒(24時間のグラフデータ保持)は360MBのRAMを使用します
上記の見積もりは、ストックダッシュボードで使用されているチャートの数に基づいていることに注意してください。 将来、カスタムチャートを削除または追加すると、これらの見積もりに影響します。
Netdataのメイン設定ファイルをnano
またはお気に入りのテキストエディタで開きます。
- sudo nano /etc/netdata/netdata.conf
[global]
セクションでhistory
オプションを見つけます。
. . .
[global]
# glibc malloc arena max for plugins = 1
. . .
# hostname = test-netdata
# history = 3600
# update every = 1
. . .
3600
の値を前に決定した値に置き換えます。 ここでは、14400
を使用しています。これにより、4時間のデータ保持が可能になります。 #
記号を削除して、この行のコメントを解除して、このオプションがNetdataによって無視されないようにしてください。
. . .
[global]
# glibc malloc arena max for plugins = 1
. . .
# hostname = test-netdata
history = 14400
# update every = 1
. . .
この変更を行った後、ファイルを保存して閉じます。
この変更により、Netdataが使用するRAMの量が増える可能性がありますが、次のステップで実装する次の変更により、RAMの量が大幅に減少するはずです。
ステップ3—カーネルの同じページのマージを有効にする
Netdataは箱から出してすぐに実行および動作しますが、Netdataがシステムリソースを使用する方法にさらに変更を加えることで、パフォーマンスを高速化および最適化できます。 Kernel Same-page Merging 、または略してKSMを有効にすることから始めます。 Netdataの開発者は、これによりNetdataのメモリ使用量が40〜60%削減されると見積もっています。
有効にすると、KSMデーモンは定期的にメモリをスキャンし、単一の書き込み保護されたページで置き換えることができる同一のコンテンツのページを探します。 このコンテキストでは、システムで実行されているさまざまなプロセスまたはプログラム間で同一のメモリページを共有できます。 これにより、不要な重複メモリコンテンツの作成が削減されます。
Linuxシステムカーネルのこの側面を永続的に有効にするには、テキストエディタで/etc/rc.local
ファイルを開きます。
- sudo nano /etc/rc.local
この/etc/rc.local
ファイルまたは実行制御ファイルは、他のすべての通常のLinuxシステムサービスおよびプロセスが開始された後に実行されます。 これは、カスタムサービスを指定する場合、またはこの場合はサーバーの実行時にKSMを有効にする場合に役立ちます。
次に示すように、ファイルの最後のexit 0
行の前に、以下で強調表示されている2つのコマンドを追加します。
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
echo 1 > /sys/kernel/mm/ksm/run
echo 1000 > /sys/kernel/mm/ksm/sleep_millisecs
exit 0
最初のコマンドは、run
KSMカーネルファイルに1を追加します。これにより、この機能が有効になります。 2番目のコマンドは、KSMデーモンに1秒に1回実行し、重複排除について100ページを評価するように指示します。
ファイルを保存して閉じると、次にサーバーを再起動したときにKSMが有効になり、今後の再起動でもKSMが有効になります。 このサーバーの現在の稼働時間の残りの部分で有効にするには、コマンドラインでrc.local
に追加した2つのコマンドを手動で実行する必要があります。
まず、sudo
で-s
フラグを使用して、サーバーのrootユーザーとして新しいシェルセッションを開始して入力します。 これが必要なのは、以前の2つのコマンドが(>
演算子を介して)出力リダイレクトを使用し、成功するにはルートシェルによって実行される必要があるためです。
- sudo -s
ここで、前の2つのコマンドを入力します。
- echo 1 > /sys/kernel/mm/ksm/run
- echo 1000 > /sys/kernel/mm/ksm/sleep_millisecs
次に、ルートシェルを離れて、通常のシェルセッションに戻ります。
- exit
最後に、このステップとその前のステップで行ったすべての変更を適用するには、Netdataを再起動する必要があります。
- sudo systemctl restart netdata
Netdataダッシュボードで新しく追加されたアクティブなKSMチャートを探すことにより、KSMが有効になったことを確認できます。 これは、右側のメニューツリーの [Memory]> [MemoryDeduper]にあります。
ダッシュボードとKSMが機能していることがわかったので、組み込みのWebサーバーではなくNginxなどのWebサーバーを介してダッシュボードへのアクセスを許可する価値があります。 これは完全に必要というわけではありませんが、お勧めします。次の手順に従って設定してください。
ステップ4— Nginxを介してダッシュボードをホストする(オプション)
Nginxを介してNetdataをホストすると、ダッシュボードへのアクセスを保護しやすくなり、必要に応じて、将来的に他のサーバーのNetdataダッシュボードを指すこともできます。 Nginx の前提条件のチュートリアルに従って、まだインストールしていない場合は、今すぐインストールできます。
apache2-utils
パッケージもインストールする必要があります。 このパッケージには、htpasswd
プログラムが含まれています。このプログラムは、ダッシュボードページへのアクセスを保護するために後で必要になります。
- sudo apt-get install apache2-utils
次に、新しいNginxホスト構成ファイルを作成します。 ここでは、/conf.d
ディレクトリ内のファイルを使用していますが、Netdata以外の目的でNginxを使用している場合は、/sites-available
および/sites-enabled
を使用できます。 Nginxファイルとディレクトリの詳細については、セットアップチュートリアルをご覧ください。
- sudo nano /etc/nginx/conf.d/default.conf
この構成ファイルは、ダッシュボードページの着信リクエストをプロキシするようにNginxに指示します。 また、簡単な認証プロンプトを追加して、正しいユーザー名とパスワードを持っている人だけがアクセスできるようにします。
以下は、コピーして貼り付けるための構成ファイル全体です。 上記のlisten
およびserver_name
ディレクティブの2つの赤で強調表示された項目を、それぞれサーバーのIPアドレスと割り当てられたドメイン名に変更します。 それぞれの最後に終了;
を含めるように注意してください。 ドメイン名がない場合は、server_name
ディレクティブをexample.com
のままにしておくことができます。
upstream netdata-backend {
server 127.0.0.1:19999;
keepalive 64;
}
server {
listen your_server_ip:80;
server_name example.com;
auth_basic "Authentication Required";
auth_basic_user_file netdata-access;
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://netdata-backend;
proxy_http_version 1.1;
proxy_pass_request_headers on;
proxy_set_header Connection "keep-alive";
proxy_store off;
}
}
自分のファイルがこのコードブロックに一致することを確認したら、保存して終了し、コマンドプロンプトに戻ることができます。
このファイルの機能を理解できるように、このファイルについて説明しましょう。 これは最初のセクションです:
upstream netdata-backend {
server 127.0.0.1:19999;
keepalive 64;
}
netdata-backend
という名前のこのupstream
モジュールは、サーバーのループバックアドレス127.0.0.1
とNetdataのポート19999
を使用して、組み込みのNetdataWebサーバーをターゲットにします。 keepalive
ディレクティブは、任意の時点で(各Nginxワーカープロセスに対して)開いたままにできるアップストリームアイドル接続の最大数を設定します。 このupstream
モジュール定義は、後でproxy_pass
ディレクティブによって必要になります。
この直後にメインのserver
ブロックがあります。
server {
listen your_server_ip:80;
server_name example.com;
auth_basic "Authentication Required";
auth_basic_user_file netdata-access;
ブロックの最初の2行は、クライアントが接続を試みるときにNginxがlisten
する必要がある外部IPアドレスを定義します。 server_name
ディレクティブは、クライアントが指定されたドメイン名を使用するときにこのサーバーブロックを実行するようにNginxに指示します。
このスニペットの最後の2行は、単純なHTTPユーザー名とパスワード認証を設定します。 auth_basic
モジュールを使用してこれを行い、ユーザー名とパスワードのプロンプトを表示します。 プロンプトのメッセージをカスタマイズできます。 ここでは、認証が必要に設定されています。 auth_basic_user_file
は、このステップの後半で作成される認証プロンプトのログイン資格情報を保存するファイル名と場所を指定します。
server
ブロック内にネストされた最後のlocation
ブロックは、Nginxへの着信リクエストのプロキシと受け渡しを処理します。
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://netdata-backend;
proxy_http_version 1.1;
proxy_pass_request_headers on;
proxy_set_header Connection "keep-alive";
proxy_store off;
}
}
ここで要約すると、このコードは、クライアント要求をNetdata Webサーバーに渡し、次にダッシュボードに渡すものです。 proxy_pass
ディレクティブ行は、ファイルの先頭にあるupstream
モジュールを参照し、名前netdata-backend
でそれを指している必要があります。
まだ行っていない場合は、この構成ファイルを保存して閉じることができます。 ここで、apache2-utils
パッケージのhtpasswd
プログラムを使用して、ダッシュボードログインプロンプトのユーザーログイン資格情報を作成できます。
まず、ユーザー名とパスワードを作成します。 次のコマンドを実行し、sammyをNetdataで使用するユーザー名に置き換えます。 プロンプトが表示されたら、使用するパスワードを入力します。
- sudo htpasswd -c /etc/nginx/netdata-access sammy
これにより、/etc/nginx/netdata-access
に、指定したユーザー名とパスワードを含むファイルが作成されます。 生成されたパスワードはファイル内で暗号化されているため、プレーンテキストとして表示することはできません。
Nginxを再起動して、追加した新しい構成をアクティブにします。
- sudo systemctl restart nginx
Nginx構成を初めてテストするには、お気に入りのWebブラウザーでhttp://your_server_ip
にアクセスします。 認証プロンプトが表示されます。 このステップの前半で指定したユーザー名とパスワードを入力して、ダッシュボードにアクセスします。ダッシュボードは、ステップ5で説明します。
ステップ5—ダッシュボードを探索する
オプションの手順4に従わなかった場合は、お気に入りのブラウザでhttp://your_server_ip:19999/
にアクセスして、ダッシュボードにアクセスしてください。
ダッシュボードとシステムのライブメトリックの概要が表示されます。 後続のグラフで各期間にマウスを合わせると、ページ上部のHUDスタイルインジケーターが変化します。
この概要セクションの個々のグラフとチャートは、CPUからメモリ、ネットワークトラフィックなどに至るまで、各システムの側面の詳細な説明を提供します。
グラフはインタラクティブであり、マウスボタンで左右にドラッグして、さまざまな時間間隔で前後にパンできます。
SHIFT
を押したまま、グラフ上でマウスホイールを使用してスクロールインまたはスクロールアウトすると、タイムマーカーが狭くなったり広くなったりします。 グラフをダブルクリックして、デフォルトの外観と表示にリセットします。
ダッシュボード内を移動する最も簡単な方法は、ページの右側にあるメニューツリーを使用することです。 これにより、現在表示しているページのセクションに応じてフォーカスと色が変わります。
ページを下にスクロールするか、メニューツリーを使用すると、さらに詳細なチャートにアクセスできます。 これらは非常に詳細であり、最初の概要セクションのグラフと同じ方法で制御されます。
Netdataを通じて利用できる、これらの追加の統計固有のグラフの多くがあります。
GUIの重要な部分の1つは、更新ページです。 Netdataは定期的に更新を受け取り、インストールを最新の状態に保つのは簡単です。 ダッシュボードの上部には更新ボタンがあり、新しいバージョンがダウンロード可能かどうかを確認できます。
このボタンをクリックすると、詳細が記載された新しいメニューが開き、今すぐ確認ボタンをクリックして手動で更新を確認できます。
利用可能なアップデートがある場合は、ステップ1でLinuxユーザーのホームディレクトリに複製したNetdataGitリポジトリから提供されたアップデートスクリプトを実行する必要があります。 つまり、更新が利用可能な場合は、コマンドラインからsudo ~/netdata/netdata-updater.sh
を実行するだけです。
結論
Netdataプロジェクトの詳細と、ここで設定されているものをさらに拡張する方法については、NetdataGitHubプロジェクトにアクセスしてください。 Netdataレジストリ、アラームの設定、カスタムチャート/モジュールのインストールに関する情報は、 Netdata wiki で説明されており、HTMLバッジの生成やNetdataのログファイルの処理などのトピックについても説明しています。