投稿

CentOS Stream 9 + Nginx + VTSモジュールをインストール

CentOS Stream 9上のNginxにVTSモジュールをインストールしたときの覚書。 環境: CentOS Stream 9, Nginx 1.20.1 1. VTSモジュールをインストール 今のNginxのビルドオプションを確認(改行して見やすく)。 # nginx -V 2>&1 | sed 's/ --/\n--/g' nginx version: nginx/1.20.1 built by gcc 11.5.0 20240719 (Red Hat 11.5.0-5) (GCC) built with OpenSSL 3.5.0 8 Apr 2025 (running with OpenSSL 3.5.1 1 Jul 2025) TLS SNI support enabled configure arguments: --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules ... CentOS Streamではdnf経由でvtsモジュールをインストール。 # dnf search vts # dnf install nginx-mod-vts modules-pathに配置されたか確認。 # ls /usr/lib64/nginx/modules ngx_http_vhost_traffic_status_module.so 2.Nginxの設定 ダイナミックモジュールは自動で読み込むように設定してあった。 # less /etc/nginx/nginx.conf # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf; # less /usr/share/nginx/modules/mod-vhost-traffic-status.conf load_module "/usr/lib64/nginx/modules/ngx_http_vhost_traffic_status_module.so"; VTSの共...

CentOS Stream 9 + geoipupdate + Python 3.11をインストール

FreeBSDサーバーでやったことを CentOS Streamサーバーの環境でも行っているときの覚書。 Gemini 2.5 Proと対話。 環境: CentOS Stream 9, Python 3.9.23, Python 3.11.13 1. geoipupdateをインストール CentOS Streamの環境では公式リポジトリにgeoipupdateがない。 # dnf search geoip RPMをGitHubからダウンロードしてインストールするのが公式。 参考:  maxmind/geoipupdate: GeoIP update client code GitHubのReleasesに掲載してあるURLを確認してダウンロード。 -OはURLのファイル名でダウンロード。-Lはリダイレクトを許可。 # curl -OL https://github.com/maxmind/geoipupdate/releases/download/v7.1.1/geoipupdate_7.1.1_linux_amd64.rpm dnfが依存関係を自動で解決してインストールしてくれる。 # dnf install ./geoipupdate_7.1.1_linux_amd64.rpm Account IDとLicense Keyを設定ファイルに記述。 国別データベースの場合は GeoLite2-Countryを指定。 # less /etc/GeoIP.conf AccountID 1234567 LicenseKey 08MzPb....pe_mmk EditionIDs GeoLite2-Country 動作確認。 # geoipupdate -v geoipupdate version 7.1.1 (6664d8b9, 2025-07-09T20:46:45Z, linux-amd64) Using config file /etc/GeoIP.conf Using database directory /usr/share/GeoIP Initializing file lock at /usr/share/GeoIP/.geoipupdate.lock Acquired lock file at /...

FreeBSD14 + Nginx + GeoIP2の設定とIPアドレスを自動更新

NginxをHTTP_GEOIP2ビルドオプションを有効にしてビルド後、設定しているときの覚書。 Gemini 2.5 Proと対話。 環境: FreeBSD 14.3-RELEASE-p2 1. IPアドレスを自動更新 MaxMind公式が配布しているgeoipupdateをインストール。 参考:  Updating GeoIP and GeoLite Databases | MaxMind Developer Portal # pkg search geoip # pkg install geoipupdate MaxMindにログインして 左メニューのManage license keysを選択。 参考:  MaxMind GeoIP® Databases | MaxMind Generate new license keyをクリック。 License key description: geoipupdate Account IDとLicense Keyを設定ファイルに記述。 国別データベースの場合は GeoLite2-Countryを指定。 # less /usr/local/etc/GeoIP.conf AccountID 1234567 LicenseKey 08MzPb....pe_mmk EditionIDs GeoLite2-Country 動作確認。 # geoipupdate -v geoipupdate version v7.1.0 (freebsd-arm64) Using config file /usr/local/etc/GeoIP.conf Using database directory /usr/local/share/GeoIP Initializing file lock at /usr/local/share/GeoIP/.geoipupdate.lock Acquired lock file at /usr/local/share/GeoIP/.geoipupdate.lock Database does not exist, returning zeroed hash Updates available for GeoLite2-Countr...

OpenTelemetry(OTel)とはアプリケーションの動作を観測・計測するための標準規格

OpenTelemetryを調査しているときの覚書。 Gemini 2.5 Proと対話。 OpenTelemetryとは? OpenTelemetry(OTel)は、単なるツールではなく、クラウドネイティブ時代のオブザーバビリティ(Observability: 可観測性)を実現するための標準規格。 OpenTelemetryは、CPU使用率やメモリ使用量といったサーバー自体の情報(ホストメトリクス)も計測できる。 しかし、その真価が発揮されるのは、アプリケーション(プログラムコード)がどのように動いているかを計測する時。 「どの関数の処理に時間がかかっているか?」 「データベースへのクエリは何ミリ秒かかったか?」 「外部APIの呼び出しでエラーが起きたのはなぜか?」 といった、コードレベルの動作を可視化することに主眼を置いている。 オブザーバビリティ(Observability)とは? システムの出力を調べることによって、システムの内部状態を理解する能力のこと。 参考: OpenTelemetryとは | OpenTelemetry システムをオブザーバビリティがある状態にするには、計装されていなければなりません。 つまり、コードがトレース、メトリクス、またはログを出力しなければなりません。 メトリクス (Metrics): 一定間隔で集計された数値。 システムの「健康状態」を定量的に把握。 例: CPU使用率、メモリ使用量、リクエスト数/秒 (RPS)、エラー率。 ログ (Logs): タイムスタンプ付きの離散的なイベント記録。 特定の瞬間に何が起こったかを詳細に記録。 例: 「User 123 logged in」、「DB connection failed: timeout」 トレース (Traces): マイクロサービスを横断するリクエストの処理の流れを可視化したもの。 例: 1つのリクエストが、どのサービスを、どの順番で、どれくらいの時間をかけて通過したかの詳細な記録。 OpenTelemetryの歴史 2016年:OpenTracing の誕生 Cloud Native Computing Foundation (CNCF) によって主導されたプロジェクト。 開発者が、どのトレーシングツールを使うかに関わらず、同じ作法でコードを書けるようにすることを目...

FreeBSDのsystatとcollectdでリソース情報を取得

生成AIにAPI経由でサーバーのパフォーマンス解析レポートを定期実行させようとしているときの覚書。 環境: FreeBSD 14.3-RELEASE-p2 1. systatとは? systatは、FreeBSDのパフォーマンス統計情報を対話的に表示するコマンドラインツール。 topコマンド: プロセス視点「どのプロセスがCPUやメモリを消費しているか」 systatコマンド:  システム視点「システム全体のどのコンポーネント(I/O, メモリ, ネットワーク等)がボトルネックになっているか」 基本的な使い方 5秒間隔更新で起動。 # systat 5 最初からvmstatビューを1秒間隔で表示。 # systat -vmstat 1 起動中に「:help」を入力するとビュー名が表示される。 「:(ビュー名)」で各ビューに切り替わる。 Ctrl-Cで終了。 ビューの一覧 vmstat: システム全体のCPU、メモリ、ページング、プロセス状態をまとめたビュー。 pigs: CPUを最も消費しているプロセスを降順で表示する、いわゆる「CPUの豚(hogs)」。 iostat: ディスクデバイスごとのI/O統計情報。ディスク性能のボトルネック調査に必須。 ifstat: ネットワークインターフェースごとの通信量をリアルタイムで表示。 netstat: 現在アクティブなネットワークコネクションの状態を表示。netstat -anの対話版。 ip: IPプロトコルレベルでの統計情報。パケットの送受信、破棄、フラグメンテーションなど。 tcp: TCPプロトコルレベルでの詳細な統計情報。 icmp: ICMPプロトコル(ping, traceroute)レベルでの統計情報。 swap: スワップ領域の使用状況をパーティションごとに表示。 zarc: ZFSのキャッシュ(ARC, L2ARC)の統計情報。 vmstatの見方 Mem usage: Phy: 物理メモリ全体の使用率。 Mem usage: Kmem: カーネルが使用しているメモリの割合。 SWAP PAGER: in: スワップ領域からメモリにデータが読み戻された回数(スワップイ...

FreeBSDのtopコマンドの使い方

FreeBSDのtopコマンドの使い方を調べたときの覚書。 Gemini 2.5 Proと対話。 環境: FreeBSD 14.3-RELEASE-p2 top起動。 # top FreeBSD 公式サイトのmanページ:  top(1) よく使うキー P : CPUコアごとの統計表示切り替え(Linuxは1) i : アイドルプロセスの表示切り替え o : ソート順の変更 (メモリ順は res、CPU使用率順は wcpu、プロセスID順はpid) Linuxでは[P](CPU使用率順)と[]M(メモリ順)。 H : スレッド表示の切り替え。 T : スレッドID(TID)の列を表示。 表示の更新・終了 space - 表示を更新: 即座に最新の情報に更新 ? - ヘルプの表示 q - 終了 表示内容のフィルタリング・絞り込み / : コマンド名でフィルタ コマンド名でプロセスを絞り込めます。 例えば / を押した後に nginx と入力すると、nginx という名前のプロセスだけが表示されます。 + を入力すると全てのフィルタを解除します。 u : ユーザーでフィルタ 特定のユーザーが実行しているプロセスだけを表示します。 u を押した後に www と入力すると、www ユーザーのプロセスだけが表示されます。 ユーザー名を入力せずにEnterを押すと、全ユーザーの表示に戻ります。 p : PIDでフィルタ 特定のプロセスID(PID)を持つプロセスだけを表示します。 p を押した後にPIDを入力します。 + を入力するとフィルタを解除します。 J : Jailでフィルタ [(FreeBSD Jails機能を使用している場合) 特定のJail内で実行されているプロセスだけを表示します。 + を入力するとフィルタを解除します。 表示項目の切り替え(トグル) a : プロセス引数の表示切り替え COMMAND列に、コマンド名だけを表示するか、コマンドの引数を含めた完全なコマンドラインを表示するかを切り替えます。 C : CPU使用率の表示モード切り替え CPU使用率の表示を、重み付けされた最近のCPU使用率(WCPU、デフォ...

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 {   ...

FreeBSDのNginxをportsでビルド → 本番環境はダウンタイムなしで切り替える

Nginxのパフォーマンス改善にはportsからビルドするのがベストだと思ってやってみたときの覚書。 Gemini 2.5 Proと対話。 環境: FreeBSD 14.3-RELEASE-p2,  nginx 1.28.0 1. Portsリポジトリを取得 FreeBSD14からportsnapコマンドではなくgitコマンドを使う。 参考:  Chapter 4. Installing Applications: Packages and Ports | FreeBSD Documentation Portal まずは公式サイトにあるようにgit cloneする。 --depth 1 を付けることで、最新のコミット1つ分のみを取得。 # git clone --depth 1 https://git.FreeBSD.org/ports.git /usr/ports 移動して確認。 # cd /usr/ports/ # ls 2. Nginxをビルド pkgでインストールしたNginxのバージョンとビルドオプションを確認。 # nginx -V 2>&1 | sed 's/ --/\n--/g' nginx version: nginx/1.28.0 built with OpenSSL 3.0.16 11 Feb 2025 TLS SNI support enabled configure arguments: --prefix=/usr/local/etc/nginx --with-cc-opt='-I /usr/local/include' --conf-path=/usr/local/etc/nginx/nginx.conf --sbin-path=/usr/local/sbin/nginx --pid-path=/var/run/nginx.pid --error-log-path=/var/log/nginx/error.log --user=www --group=www --with-compat --with-pcre --modules-path=/usr/local/libexec/nginx --with-file-aio --http-client-body-temp-...

FreeBSDのportsとは?pkgとは?rpm/yum/dnf(Red Hat系Linux)との違い。

FreeBSDのportsでnginxをビルドしようとしているときの覚書。 Gemini 2.5 Proと対話。 環境: FreeBSD 14.3-RELEASE-p2 portsとは? Ports Collection (Ports)はソースコードからソフトウェアをコンパイル(ビルド)してインストールする仕組み。 FreeBSD Ports Collectionは、単なるソフトウェア管理ツールではなく、オープンソースの世界における 一つの発明と言えるほど画期的 なもの。 Portsの仕組みを基盤として、公式ビルドサーバーで事前にコンパイルしたバイナリパッケージを提供する Pkg システムが開発された。 つまりPkg で配布されている公式パッケージは Ports を使ってビルド したもの。 参考:  第4章 アプリケーションのインストール - packages と ports | FreeBSD Documentation Portal 2021年3月に旧来のSubversionリポジトリが更新を停止し、Gitが唯一の公式Ports Collectionのリポジトリとなった。 コマンドもportsnapからgitに移行。 FreeBSDのソースコード本体は2020年にSubversionからGitへ移行していた。 FreeBSD PortsのGitへの移行は、単なるツールの変更ではなく、プロジェクトの開発・メンテナンス手法を21世紀の標準に合わせるための、戦略的な決断。 これにより、開発者の貢献を促し、システムの透明性を高め、長期的なメンテナンス性を確保するという、大きなメリットがもたらされた。 MacPortsとの関係 MacPortsは、FreeBSD PortsのコンセプトをmacOS上に実現するためのプロジェクト。 macOS (当時はMac OS X) は、その心臓部にFreeBSD由来のコードを含むBSD UNIX (Darwin) をベースとしるため、FreeBSDの文化との親和性が高く、Portsの思想が持ち込まれた。 MacPortsはもともとAppleが主導したが、独立したコミュニ-ティによって運営されている。 pkgとrpm/yum/dnf(Red Hat系Linux)との違い pkgとは? pkgはportsで事前にビルドさ...

AVIF変換: FreeBSD14 + ImageMagick7-nox11 → libavif

FreeBSD14の環境でAVIF変換をしたときの覚書。 環境: FreeBSD 14.3-RELEASE-p2, ImageMagick 7.1.1 1. ImageMagick7をインストール ImageMagick7をインストールする。 GUIは使わないのでnox11をインストール。 # pkg search ImageMagick # pkg install ImageMagick7-nox11 バージョン確認。 # magick --version Version: ImageMagick 7.1.1-45 Q16-HDRI aarch64 22722 https://imagemagick.org Copyright: (C) 1999 ImageMagick Studio LLC License: https://imagemagick.org/script/license.php Features: Cipher DPC HDRI Modules Delegates (built-in): bzlib fftw fontconfig freetype heic jbig jng jp2 jpeg jxl lcms lqr ltdl lzma openexr png raw tiff webp wmf xml zip zlib zstd Compiler: clang (18.1.6) 対応フォーマットの確認。 AVIFサポートを確認。 # magick -list format # magick -list format | grep AVIF      AVIF  HEIC      rw+   AV1 Image File Format (1.19.8) libavifにavifencが含まれていことが分かったので、ImageMagick7をアンインストールする。 単機能アプリの方がメンテナンスが楽な分、ライブラリが新しくバグが少ない。 ImageMagick7をアンインストール。 # pkg remote ImageMagick7-nox11 不要な依存関係の確認(ドライラン)して削除する。 # pkg autorem...