知人に教えて頂いてサーバのリソース監視ツールである netdata を試してみたのでメモしておきます。 今回は CentOS7 環境で試しました。
注意点
関連ファイルをまとめておきたい場合はインストールパスを指定する
インストールパスを指定せずに netdata をインストルすると、関連ファイルが様々なディレクトリに配置されます。 「一箇所にまとめておきたい」場合はインストール時に --install
オプションでインストールパスを明示的に指定するようにします。
自動アップロードを利用する場合はソースコードを削除せず、保存しておく
後述しますが cron を使って netdata の自動アップロードを行う場合はインストールが完了しても GitHub からクローンしたソースコードは削除せず、保存したディレクトリ位置も覚えておきます。
キックスタートでインストールするとインストールパスを指定出来ない
キックスタートスクリプトを使うと非常に手軽に、ワンライナーで netdata をインストールすることが可能です。 但し、キックスタートではインストールパスを選択するオプションが無いようで、デフォルトパスにインストールされてしまいます。 『デフォルトパスにインストールされても特に問題無い』場合には、キックスタートでインストールするのが簡単です。
自動インストールスクリプトを使ってインストールする
キックスタートスクリプトを使って自動インストールするには以下を実行するだけです。 しばらく待つだけで netdata そのものがインストールされるだけでなく、`/etc/cron.daily/netdata-updaterに自動アップデートスクリプトもインストールされます。
--dont-waitオプションを指定しないと途中で一度、
ENTERキーの入力を求められる為、今回は
--dont-wait` オプションを指定しています。
bash <(curl -Ss https://my-netdata.io/kickstart.sh) all --dont-wait
手動でインストールする
以下ではキックスタートスクリプトを使わず、手動でインストールする手順を説明します。 この方法であればインストールパスを指定することが可能です。
インストールパラメータ
今回は以下のパラメータに従ってインストールを進めていきます。
項目 | 値 |
---|---|
ソースコードの保存パス | /opt/src/netdata/ |
インストールパス | /opt/netdata/ |
アドレス | 0.0.0.0/0 |
ポート | 19999/TCP |
依存関係のあるソフトウェアのインストール
netdata そのものをインストールする前に、依存関係のあるソフトウェアをインストールしておきます。
yum -y install epel-release yum -y install \ autoconf \ automake \ curl \ gcc \ git \ libmnl-devel \ libuuid-devel \ lm-sensors \ make \ MySQL-python \ nc \ pkgconfig \ python \ python-psycopg2 \ PyYAML \ zlib-devel
netdata のインストール
GitHub からソースコードを取得します。 冒頭の 注意点 に記載しましたが、cron を使った自動アップデートを設定したい場合はインストールが完了してもソースコードは削除せず、ダウンロードしたディレクトリ位置も覚えておくようにします。 今回は /opt/src
というディレクトリを作成し、ここにソースコードを保存することにしました。
mkdir -p /opt/src/ cd /opt/src/ git clone https://github.com/firehol/netdata.git --depth=1 cd netdata
インストールパスを指定しない場合
インストールパスを指定せずにインストーラを起動してみます。
./netdata-installer.sh
すると、netdata は以下のディレクトリにインストールされます。
# ./netdata-installer.sh ^ |.-. .-. .-. .-. . netdata | '-' '-' '-' '-' real-time performance monitoring, done right! +----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+---> You are about to build and install netdata to your system. It will be installed at these locations: - the daemon at /usr/sbin/netdata - config files in /etc/netdata - web files in /usr/share/netdata - plugins in /usr/libexec/netdata - cache files in /var/cache/netdata - db files in /var/lib/netdata - log files in /var/log/netdata - pid file at /var/run/netdata.pid - logrotate file at /etc/logrotate.d/netdata This installer allows you to change the installation path. Press Control-C and run the same command with --help for help. Press ENTER to build and install netdata to your system >
インストールパスを指定した場合 (/opt/netdata)
/opt/netdata
にインストールする場合は --install /opt
オプションを指定します。 netdata
ディレクトリは自動的に作成される為、--install /opt
としてすれば /opt/netdata
ディレクトリにインストールされることになります。 通常、netdata-installer.sh
を実行した場合はインストール予定のパス一覧が表示され、問題が無ければ ENTER
を押すことでインストールを続行、Ctrl + C
を押すことで中止することが出来ます。
# ./netdata-installer.sh --install /opt ^ |.-. .-. .-. .-. . netdata | '-' '-' '-' '-' real-time performance monitoring, done right! +----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+---> You are about to build and install netdata to your system. It will be installed at these locations: - the daemon at /opt/netdata/usr/sbin/netdata - config files in /opt/netdata/etc/netdata - web files in /opt/netdata/usr/share/netdata - plugins in /opt/netdata/usr/libexec/netdata - cache files in /opt/netdata/var/cache/netdata - db files in /opt/netdata/var/lib/netdata - log files in /opt/netdata/var/log/netdata - pid file at /opt/netdata/var/run/netdata.pid - logrotate file at /etc/logrotate.d/netdata This installer allows you to change the installation path. Press Control-C and run the same command with --help for help. Press ENTER to build and install netdata to '/opt/netdata' >
ENTER
を入力せず、非対話的にインストールする為には --dont-wait
オプションも付与します。
./netdata-installer.sh --dont-wait --install /opt
起動&自動起動の設定
今回、インストールした際は systemd
にも登録されており、起動&自動起動設定もされていました。 --dont-start-it
オプションを指定してインストールした場合はインストール後に netdata が起動されません。 こういった場合に手動で起動&自動起動設定を行う場合は以下のように設定します。
systemctl daemon-reload systemctl enable netdata systemctl start netdata
初期設定では 19999/TCP を Listen する
初期設定のままだと netdata は「全てのインターフェイス (*) の TCP/19999」を Listen します。 lsof
で確認すると以下のように表示されます。
# lsof -i tcp:19999 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME netdata 5423 netdata 3u IPv4 29025 0t0 TCP *:dnp-sec (LISTEN) netdata 5423 netdata 4u IPv6 29026 0t0 TCP *:dnp-sec (LISTEN)
Listen するアドレス / ポートの設定を変更するには /opt/netdata/etc/netdata/netdata.conf
の [web]
セクションにある default port
や bind to
設定を修正します。 初期状態では以下のようにコメントアウトされています。
変更前
[web] # mode = multi-threaded # listen backlog = 4096 # default port = 19999 # bind to = *
例えば『127.0.0.1:8080』を Listen するように変更する場合は以下のように修正します。
変更後
[web] # mode = multi-threaded # listen backlog = 4096 default port = 8080 bind to = 127.0.0.1
設定ファイルの修正が完了したら netdata を再起動し、変更を反映します。
systemctl restart netdata.service
これで設定が反映されました。 lsof
で TCP/8080 を Listen しているプロセスを確認すると netdata になっていることが分かります。
# lsof -i tcp:8080 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME netdata 5856 netdata 3u IPv4 32797 0t0 TCP 172-020-000-166:webcache (LISTEN)
ログ・ローテーションの設定
インストールする以下のように、ログ・ローテーションも設定されていました。
# cat /etc/logrotate.d/netdata /var/log/netdata/*.log { daily missingok rotate 14 compress delaycompress notifempty sharedscripts postrotate /bin/kill -HUP `pidof netdata 2>/dev/null` 2>/dev/null || true endscript }
自動アップデートの設定
GitHub からクローンしたソースコードの中には netdata をアップデートするスクリプトも含まれています。 これを cron に設定することで自動的に netdata をアップデートさせることが出来ます。 毎朝 6:00 に netdata のアップデートを確認 / アップデートがあれば更新するには /etc/cron.d/netdata-updater
を以下の内容で新規作成します。
0 6 * * * /opt/src/netdata/netdata-updater.sh
自動アップデートが上手く起動していない場合は直接、netdata-updater.sh
を実行して、結果を確認します。 下記の例ではアップデートが無い為、Nothing to be done!
と表示され、スクリプトが正常終了しています。
# /opt/src/netdata/netdata-updater.sh Fri Nov 3 16:10:21 JST 2017 : INFO: Running on a terminal - (this script also supports running headless from crontab) Fri Nov 3 16:10:21 JST 2017 : INFO: Updating netdata source from github... Already up-to-date. Fri Nov 3 16:10:22 JST 2017 : INFO: Nothing to be done! (use -f to force re-install)
ブラウザでアクセスする
netdata は初期設定のままであれば 19999/TCP を Listen しますので、Web ブラウザから「http://xxx.xxx.xxx.xxx:19999
」にアクセスします。 netdata が正常にインストールされていれば以下のように表示されるはずです。
参考
/opt/netdata
へインストールするスクリプト
現状のキックスタートスクリプトにはインストールパスを指定出来るオプションが無いらしく、インストールパスを指定出来ません。 インストールパスを指定してインストールするには以下のようなスクリプトを使います。 (手抜きしたので…) このスクリプトでは /opt/netdata
ディレクトリ決め打ちで netdata をインストールします。 下記の内容を install-netdata.sh
のような名前で作成し、/bin/sh ./install-netdata.sh
のように実行します。
#!/bin/sh echo '### Install dependencies.' yum -y install epel-release yum -y install \ autoconf \ automake \ curl \ gcc \ git \ libmnl-devel \ libuuid-devel \ lm-sensors \ make \ MySQL-python \ nc \ pkgconfig \ python \ python-psycopg2 \ PyYAML \ zlib-devel echo '### Clone from GitHub.' mkdir -p /opt/src/ cd /opt/src/ git clone https://github.com/firehol/netdata.git --depth=1 echo '### Install netdata.' cd /opt/src/netdata ./netdata-installer.sh --dont-wait --install /opt echo '### Configure auto-update.' echo "0 6 * * * /opt/src/netdata/netdata-updater.sh" > /etc/cron.d/netdata-updater echo '### Installed.`
netdata-installer.sh
のヘルプ表示
netdata-installer.sh
のヘルプ表示は以下の通りです。 『netdata をインストールするがデーモンは開始しない』等、幾つかのオプションが用意されています。
# ./netdata-installer.sh --help ^ |.-. .-. .-. .-. .-. . netdata .-. .- | '-' '-' '-' '-' '-' installer command line options ' '-' +----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+---> ./netdata-installer.sh <installer options> Valid <installer options> are: --install /PATH/TO/INSTALL If you give: --install /opt netdata will be installed in /opt/netdata --dont-start-it Do not (re)start netdata. Just install it. --dont-wait Do not wait for the user to press ENTER. Start immediately building it. --auto-update | -u Install netdata-updater to cron, to update netdata automatically once per day (can only be done for installations from git) --enable-plugin-freeipmi --disable-plugin-freeipmi Enable/disable the FreeIPMI plugin. Default: enable it when libipmimonitoring is available. --enable-plugin-nfacct --disable-plugin-nfacct Enable/disable the nfacct plugin. Default: enable it when libmnl and libnetfilter_acct are available. --enable-lto --disable-lto Enable/disable Link-Time-Optimization Default: enabled --zlib-is-really-here --libs-are-really-here If you get errors about missing zlib, or libuuid but you know it is available, you have a broken pkg-config. Use this option to allow it continue without checking pkg-config. Netdata will by default be compiled with gcc optimization -O2 If you need to pass different CFLAGS, use something like this: CFLAGS="<gcc options>" ./netdata-installer.sh <installer options> For the installer to complete successfully, you will need these packages installed: gcc make autoconf automake pkg-config zlib1g-dev (or zlib-devel) uuid-dev (or libuuid-devel) For the plugins, you will at least need: curl, bash v4+, python v2 or v3, node.js
キックスタートでインストールされる自動アップデートスクリプト
キックスタート(自動インストールスクリプト)を使った場合にインストールされる自動アップデートスクリプト /etc/cron.daily/netdata-updater
は以下の内容になっていました。
#!/usr/bin/env bash force=0 [ "${1}" = "-f" ] && force=1 export PATH="${PATH}:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/bin:/usr/local/sbin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin" export CFLAGS="-O2" export NETDATA_CONFIGURE_OPTIONS="" # make sure we have a UID [ -z "${UID}" ] && UID="$(id -u)" INSTALL_UID="0" if [ "${INSTALL_UID}" != "${UID}" ] then echo >&2 "This script should be run as user with uid ${INSTALL_UID} but it now runs with uid ${UID}" exit 1 fi # make sure we cd to the working directory cd "/usr/src/netdata.git" || exit 1 # make sure there is .git here [ ${force} -eq 0 -a ! -d .git ] && echo >&2 "No git structures found at: /usr/src/netdata.git (use -f for force re-install)" && exit 1 # signal netdata to start saving its database # this is handy if your database is big pids=$(pidof netdata) [ ! -z "${pids}" ] && kill -USR1 ${pids} tmp= if [ -t 2 ] then # we are running on a terminal # open fd 3 and send it to stderr exec 3>&2 else # we are headless # create a temporary file for the log tmp=$(mktemp /tmp/netdata-updater.log.XXXXXX) # open fd 3 and send it to tmp exec 3>${tmp} fi info() { echo >&3 "$(date) : INFO: " "${@}" } emptyline() { echo >&3 } error() { echo >&3 "$(date) : ERROR: " "${@}" } # this is what we will do if it fails (head-less only) failed() { error "FAILED TO UPDATE NETDATA : ${1}" if [ ! -z "${tmp}" ] then cat >&2 "${tmp}" rm "${tmp}" fi exit 1 } get_latest_commit_id() { git rev-parse HEAD 2>&3 } update() { [ -z "${tmp}" ] && info "Running on a terminal - (this script also supports running headless from crontab)" emptyline if [ -d .git ] then info "Updating netdata source from github..." last_commit="$(get_latest_commit_id)" [ ${force} -eq 0 -a -z "${last_commit}" ] && failed "CANNOT GET LAST COMMIT ID (use -f for force re-install)" git pull >&3 2>&3 || failed "CANNOT FETCH LATEST SOURCE (use -f for force re-install)" new_commit="$(get_latest_commit_id)" if [ ${force} -eq 0 ] then [ -z "${new_commit}" ] && failed "CANNOT GET NEW LAST COMMIT ID (use -f for force re-install)" [ "${new_commit}" = "${last_commit}" ] && info "Nothing to be done! (use -f to force re-install)" && exit 0 fi elif [ ${force} -eq 0 ] then failed "CANNOT FIND GIT STRUCTURES IN $(pwd) (use -f for force re-install)" fi emptyline info "Re-installing netdata..." ./netdata-installer.sh -u --dont-wait >&3 2>&3 || failed "FAILED TO COMPILE/INSTALL NETDATA" [ ! -z "${tmp}" ] && rm "${tmp}" && tmp= return 0 } # the installer updates this script - so we run and exit in a single line update && exit 0 ############################################################################### ###############################################################################