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 = yesdisconnect idle clients after seconds = 3600bind to = 127.0.0.1 ::1web files owner = netdataweb 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 #0File 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 dlibgmake[1]: Leaving directory '/tmp/netdata-kickstart-XXXXXXXXXX.G9s7wXGgA4/netdata-v2.6.3/build'gmake: *** [Makefile:156: all] Error 2FAILED ''ABORTED Failed to build Netdata.FAILED/tmp/netdata-kickstart-XXXXXXXXXX.G9s7wXGgA4/.script-status: /tmp/netdata-kickstart-XXXXXXXXXX.G9s7wXGgA4/install-required-packages.sh: Permission deniedThe 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.G9s7wXGgA4OK
分からないので諦めた。
不要な依存関係を確認(ドライラン)して削除する。
# pkg autoremove -n
# pkg autoremove
6. AIにリソース情報を渡して解析レポート
視覚化するより、生成AIにリソース情報をAPI経由で渡して、定期的に解析レポートと改善案を提案させる方法を思いついた。
AIに渡す情報
- OSの情報(uname -a)
- CPU/メモリ/ディスクIO/ネットワーク統計
- Nginxの設定(nginx -T)とVTSの情報
- Opcache cuiの情報
- Maria DBの統計情報
今度試してみる。
▼ 関連記事
- FreeBSDのNginxをportsでビルド → 本番環境はダウンタイムなしで切り替える
- FreeBSD14 + PHP8.3 + OPcache
- FreeBSD 14 + Nginx + PHP + MariaDB + Postfixの環境を構築(2024年版)