知人に教えて頂いてサーバのリソース監視ツールである 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
###############################################################################
###############################################################################
コメント