
Alpine Linux 仮想マシンに Unbound を導入して構築した、DNSサーバの監視ツールとして、OpenWRTルータへ導入したことのある Netdata を試してみます。
Alpine LinuxにNetdataパッケージをインストール
Netdataをインストールしてみるのは前回、UnboundによるDNSフルサービスリゾルバを構築したAlpine Linux v3.17仮想マシンです。
1 2 3 4 5 6 7 8 9 10 |
$ uname -a Linux resolv9 5.15.88-0-virt #1-Alpine SMP Mon, 16 Jan 2023 08:10:32 +0000 x86_64 Linux $ cat /etc/os-release NAME="Alpine Linux" ID=alpine VERSION_ID=3.17.1 PRETTY_NAME="Alpine Linux v3.17" HOME_URL="https://alpinelinux.org/" BUG_REPORT_URL="https://gitlab.alpinelinux.org/alpine/aports/-/issues" |
Unboundの稼働するサーバへNetdataをインストールする手順は、丁寧なガイドが公開されているので、これに沿って進めます。
まずインストールするパッケージは、netdata本体の他にUnbound向けを含んだプラグイン集netdata-go-pluginsの計2つ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ sudo apk add netdata (1/7) Installing readline (8.2.0-r0) (2/7) Installing bash (5.2.15-r0) Executing bash-5.2.15-r0.post-install (3/7) Installing lz4-libs (1.9.4-r1) (4/7) Installing libstdc++ (12.2.1_git20220924-r4) (5/7) Installing libprotobuf (3.21.9-r0) (6/7) Installing netdata (1.36.1-r0) Executing netdata-1.36.1-r0.pre-install (7/7) Installing netdata-openrc (1.36.1-r0) Executing busybox-1.35.0-r29.trigger OK: 140 MiB in 110 packages $ sudo apk add netdata-go-plugins (1/1) Installing netdata-go-plugins (0.50.0-r0) OK: 206 MiB in 112 packages |
Unbound設定ファイルへのアクセス設定
次に、NetdataがUnboundの設定ファイルなどへアクセス出来るよう、アクセスリストを設定します。
始めにaclパッケージをインストールします。
1 2 3 4 5 6 |
$ sudo apk add acl (1/1) Installing acl (2.3.1-r1) Executing busybox-1.35.0-r29.trigger OK: 140 MiB in 111 packages $ setfacl --version setfacl 2.3.1 |
続いて、 setfacl コマンドを使ってUnbound設定ファイル、Unbound-Controlの証明書や鍵に対して netdata ユーザの読み取り権限を付与します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ sudo setfacl -m user:netdata:r /etc/unbound/unbound.conf $ sudo setfacl -m user:netdata:r /etc/unbound/unbound_control.key $ sudo setfacl -m user:netdata:r /etc/unbound/unbound_control.pem $ getfacl /etc/unbound/unbound.conf getfacl: Removing leading '/' from absolute path names # file: etc/unbound/unbound.conf # owner: root # group: root user::rw- user:netdata:r-- group::r-- mask::r-- other::r-- |
Unbound設定ファイルの修正
前回のUnbound構築の終わりに、 unbound-control 設定の一部をコメントアウトしてあったので、これを有効にしました。
1 2 3 |
remote-control: # port number for remote control operations. control-port: 8953 |
そして、 unbound-control を通じてNetdataがより詳細な情報を得られるよう、Unbound側に以下の設定を追記します。
1 2 3 4 |
server: statistics-interval: 0 extended-statistics: yes statistics-cumulative: yes |
Unboundサービスに設定ファイルを再読込みさせます。
1 2 3 |
$ sudo /etc/init.d/unbound reload * Checking /etc/unbound/unbound.conf ... [ ok ] * Reloading unbound daemon ... [ ok ] |
NetdataのUnbound用プラグインの有効化
先ほどgo-pluginをインストールしたことで、プラグインファイルは /usr/lib/netdata/conf.d/ へ準備されました。これを利用可能にするため、 /etc/netdata/ にある edit-config を使います。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ cd /etc/netdata/ $ ls -l drwxr-xr-x 2 root root 4096 Feb 8 09:28 charts.d drwxr-xr-x 2 root root 4096 Feb 8 09:28 custom-plugins.d drwxr-xr-x 2 root root 4096 Feb 8 09:28 ebpf.d -rwxr-xr-x 1 root root 2045 Aug 16 02:08 edit-config drwxr-xr-x 2 root root 4096 Feb 8 09:28 go.d drwxr-xr-x 2 root root 4096 Feb 8 09:28 health.d -rw-r--r-- 1 root root 533 Aug 16 02:08 netdata.conf drwxr-xr-x 2 root root 4096 Feb 8 09:28 ssl drwxr-xr-x 2 root root 4096 Feb 8 09:28 statsd.d sudo ./edit-config go.d/unbound.conf |
ところがサンプルの設定ファイルは大量のコメント表記が煩わしいので結局、上述の公式ガイドに載っていた内容をベースに、以下の内容で保存しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
jobs: - name: local address: 127.0.0.1:8953 cumulative: no use_tls: yes tls_skip_verify: yes tls_cert: /etc/unbound/unbound_control.pem tls_key: /etc/unbound/unbound_control.key - name: local address: 127.0.0.1:8953 cumulative: yes use_tls: no |
そして最後にもう1つ、Goプラグイン全体を司る go.d.conf を生成、Unboundプラグインを有効ににします。
1 |
$ sudo ./edit-config go.d.conf |
1 |
unbound: yes |
設定を終えたら、Unboundサービスの設定ファイルの再読込みと、Netdataサービスの再起動を実行します。
1 2 3 4 5 6 7 |
$ sudo /etc/init.d/unbound reload * Checking /etc/unbound/unbound.conf ... [ ok ] * Reloading unbound daemon ... [ ok ] $ sudo rc-service netdata restart * Stopping Netdata ... [ ok ] * Starting Netdata ... [ ok ] |
ブラウザで確認
ブラウザで19999番ポートへアクセスすると、NetdataのSystem Overviewが開きました。
ページ右一覧からUnboundを開いてみると、クエリの種類やクラスの内訳が入った詳細なグラフが表示されました。
エラーチェック
Netdataの動作ログは /var/log/netdata/ にあります。セットアップ中にその中のエラーログを確認していたところ、次のエラーが延々と出ていたことがありました。
1 2 3 |
2023-02-08 10:52:06: charts.d: WARNING: main: command 'curl' is not found in /bin:/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin: /sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin. |
どうも curl を探しているようなのですが、標準出力されないのでログを見るまで気が付かず。最小構成なAlpine Linuxならではの問題だとは思いますが、curlをインストールしてエラーは解消しました。
1 2 3 4 5 6 7 8 9 10 11 |
$ sudo apk add curl (1/4) Installing ca-certificates (20220614-r4) (2/4) Installing brotli-libs (1.0.9-r9) (3/4) Installing libcurl (7.87.0-r1) (4/4) Installing curl (7.87.0-r1) Executing busybox-1.35.0-r29.trigger Executing ca-certificates-20220614-r4.trigger OK: 209 MiB in 116 packages $ which curl /usr/bin/curl |
データベースはどこに
リアルタイムモニタリング主体のNetdataは、データ保持期間がデフォルトでも1時間と言われているので、あまり気にしなくても良いとは思うのですが、データベースの大きさを確認してみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ sudo ls -l /var/cache/netdata/dbengine/ -rw------- 1 netdata netdata 13443072 Feb 8 14:22 datafile-1-0000000001.ndf -rw------- 1 netdata netdata 13447168 Feb 8 19:29 datafile-1-0000000002.ndf -rw------- 1 netdata netdata 13430784 Feb 9 00:20 datafile-1-0000000003.ndf -rw------- 1 netdata netdata 13422592 Feb 9 05:27 datafile-1-0000000004.ndf -rw------- 1 netdata netdata 13447168 Feb 9 10:17 datafile-1-0000000005.ndf -rw------- 1 netdata netdata 9211904 Feb 9 13:30 datafile-1-0000000006.ndf -rw------- 1 netdata netdata 2068480 Feb 8 14:22 journalfile-1-0000000001.njf -rw------- 1 netdata netdata 1380352 Feb 8 19:29 journalfile-1-0000000002.njf -rw------- 1 netdata netdata 1454080 Feb 9 00:20 journalfile-1-0000000003.njf -rw------- 1 netdata netdata 1482752 Feb 9 05:27 journalfile-1-0000000004.njf -rw------- 1 netdata netdata 1413120 Feb 9 10:17 journalfile-1-0000000005.njf -rw------- 1 netdata netdata 991232 Feb 9 13:30 journalfile-1-0000000006.njf |
結局、 netdata.conf に記載したデータベースファイル容量まで、保持するということでしょうか。