NginxのVTSモジュール でパフォーマンス分析(Netdataのインストールは失敗)

nginxのパフォーマンス改善のためにVTSモジュールとNetdataを設定しているときの覚書。

環境: FreeBSD 14.3-RELEASE-p2,  nginx 1.28.0, Netdata 2.5.4, netdata-v2.6.3


1. VTSモジュールとは?

Nginx VTS (Virtual Host Traffic Status) モジュールは、Nginxの動作状況をリアルタイムかつ詳細に監視するためのサードパーティ製モジュール。
参考: vozlt/nginx-module-vts: Nginx virtual host traffic status module

標準のngx_http_stub_status_moduleが提供する基本的な情報よりもはるかに多くのメトリクスを、多彩な粒度とフォーマットで提供する。

Nginx公式の商用版である「Nginx Plus」が提供するライブアクティビティモニタリング機能に匹敵する詳細な情報を、オープンソースで実現できる点が最大の特徴。


2. VTSモジュールの設定

VTSモジュールをオンにしてビルドするのは前の記事を参考に。
参考: FreeBSDのNginxをportsでビルド → 本番環境はダウンタイムなしで切り替える

httpディレクティブに統計情報を共有するためのメモリゾーンの定義。
(ファイルを分割して管理している)
# cd /usr/local/etc/nginx/
# less conf.d/include/http_tuning.inc

#----------------------------------------------------------------------
# 5. VTS
#----------------------------------------------------------------------
vhost_traffic_status_zone;

統計情報を表示するエンドポイントの作成。
Basic認証とIP制限をしているディレクティブに記述。
# less conf.d/01_tools.conf

    location /vts_status {
        vhost_traffic_status_display;
        vhost_traffic_status_display_format html;
    }

テストして再読み込み。
# nginx -t
# service nginx reload

ブラウザで表示して確認。


3. Netdataとは?

Netdataはパフォーマンスモニタリングツール。
参考: netdata/netdata: The fastest path to AI-powered full stack observability, even for lean teams.

特徴

  • 簡単インストール:コマンド1つですぐに導入でき、難しい設定はほとんど必要ない。
  • 自動で監視開始:Webサーバーやデータベースなどを自動で発見し、最適な監視を勝手に始めてくれる。
  • リアルタイム:1秒ごとにデータが更新され、トラブルシューティングに最適。
  • オールインワン: データ収集、保存、グラフ表示、アラート通知の機能がすべて一つにまとまっている。
  • 動作が軽い: 監視対象のサーバーに与える負荷が非常に少ない。
  • データの保存期間: デフォルト設定では直近の1〜2時間分のデータをサーバーのメモリ上に保存。ハードディスクに数日〜数年単位でデータを長期保存することも可能。


4. Netdataのインストール(pkg install → 失敗)

pkgからインストール。
# pkg search netdata
# pkg install netdata

サービスの自動起動を有効化して、サービス起動。
# sysrc netdata_enable="YES"
# service netdata start
# service netdata status

設定ファイル変更。
wwwグループに変更。
unix socketに変更しようと試したけど、Unix socketファイルの権限を変更できる設定がないので諦めた。
参考: Running Netdata behind Nginx | Learn Netdata
# less /usr/local/etc/netdata/netdata.conf

[web]
        respect do not track policy = yes
        disconnect idle clients after seconds = 3600
        bind to = 127.0.0.1 ::1
        web files owner = netdata
        web files group = www

Netdata再起動。
# service netdata restart

待ち受けポートの確認。
127.0.0.1.19999をLISTENしているはず。
# netstat -an -p tcp

Netdataへのアクセス確認。
# curl -v http://127.0.0.1:19999/

*   Trying 127.0.0.1:19999...
* Connected to 127.0.0.1 (127.0.0.1) port 19999
* using HTTP/1.x
> GET / HTTP/1.1
> Host: 127.0.0.1:19999
> User-Agent: curl/8.14.1
> Accept: */*
>
* Request completely sent off
< HTTP/1.1 404 Not Found
< Connection: close
< Server: Netdata Embedded HTTP Server v2.5.4
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Credentials: true
< Date: Sun, 24 Aug 2025 01:47:57 GMT
< Content-Type: text/html; charset=utf-8
< Tk: N
< Cache-Control: no-cache, no-store, must-revalidate
< Pragma: no-cache
< Expires: Sun, 24 Aug 2025 01:47:57 GMT
< Content-Length: 43
< X-Transaction-ID: 3ada7641da0841ff92bf2bc733aa5b84
<
* shutting down connection #0
File does not exist, or is not accessible: 

「404 Not Found」で表示できない。
Gemini先生曰く、FreeBSDリポジトリで提供されているnetdataパッケージ自体に問題がある可能性が極めて高いらしい。

Netdataを削除。起動ファイルからも削除。
# service netdata stop
# pkg remove netdata
# less /etc/rc.conf


5. Netdataのインストール(Kickstart Installer → 失敗)

Netdataの公式サイトを参考にインストールする。
参考: Install Netdata on FreeBSD | Learn Netdata

依存関係のあるパッケージをインストール。
# pkg install bash e2fsprogs-libuuid git curl autoconf automake pkgconf pidof liblz4 libuv json-c cmake gmake

e2fsprogs-libuuidがないと言われたので除外して実行。
# pkg install bash git curl autoconf automake pkgconf pidof liblz4 libuv json-c cmake gmake

公式のインストーラーを実行する。
安定バージョンでデータ収集をしない設定で実行。
参考: Install Netdata with kickstart.sh | Learn Netdata
# curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel --disable-telemetry

ビルドが始まる。

エラー。

[ 10%] Built target dlib
gmake[1]: Leaving directory '/tmp/netdata-kickstart-XXXXXXXXXX.G9s7wXGgA4/netdata-v2.6.3/build'
gmake: *** [Makefile:156: all] Error 2
 FAILED  ''

 ABORTED  Failed to build Netdata.

 FAILED

/tmp/netdata-kickstart-XXXXXXXXXX.G9s7wXGgA4/.script-status: /tmp/netdata-kickstart-XXXXXXXXXX.G9s7wXGgA4/install-required-packages.sh: Permission denied
The following non-fatal warnings or errors were encountered:

  - Command "/usr/local/bin/bash /tmp/netdata-kickstart-XXXXXXXXXX.G9s7wXGgA4/install-required-packages.sh netdata" failed with exit code 1.
  - Failed to install all required packages, but installation might still be possible.
  - Command "./netdata-installer.sh --disable-telemetry --install-no-prefix /usr/local --stable-channel" failed with exit code 1.

 ABORTED  netdata-installer.sh failed to run: Failed to build Netdata.

For community support, you can connect with us on:
  - GitHub: https://github.com/netdata/netdata/discussions
  - Discord: https://discord.gg/5ygS846fR6
  - Our community forums: https://community.netdata.cloud/
[/root]# rm -rf /tmp/netdata-kickstart-XXXXXXXXXX.G9s7wXGgA4
 OK

分からないので諦めた。

不要な依存関係を確認(ドライラン)して削除する。
# pkg autoremove -n
# pkg autoremove


6. AIにリソース情報を渡して解析レポート

視覚化するより、生成AIにリソース情報をAPI経由で渡して、定期的に解析レポートと改善案を提案させる方法を思いついた。

AIに渡す情報

  • OSの情報(uname -a)
  • CPU/メモリ/ディスクIO/ネットワーク統計
  • Nginxの設定(nginx -T)とVTSの情報
  • Opcache cuiの情報
  • Maria DBの統計情報

今度試してみる。


▼ 関連記事