UbuntuにMuninを入れてサーバのリソース使用状況を監視する方法です。
Muninについて
Muninはサーバのリソース監視ソフトウェアで「CPU」「メモリ」「ディスク」「ネットワーク」等の情報を監視することが来ます。
同様な監視システムである 「Nagios」や「Zabbix」は「Munin」に比べると、より多くの機能を持っているのですがその分使いこなすのに時間が掛かったり導入が複雑になってきます。
小規模でシンプルな監視だけできれば良いときは、「Nunin」による監視がおすすめです。
Muninの構成
Muninはマスター(munin)とノード(munin-node)で構成され、それぞれ下記のような役割をもっています。
ノード(munin-node)
監視対象のサーバで「munin-node」が常時起動し情報を収集します。
すべての監視対象サーバにインストールする必要があります。
マスター(munin)
「mnin-node」に接続して監視対象の情報を収集しグラフを作成します。
マスターの役割をするサーバにだけ「munin」をインストールを行い、グラフを表示させるためのWebサーバも必要となります。
今回の構成
今回構築するMuninによる監視環境のイメージ図です。
今回インストールするパッケージの役割説明です。
- munin-node: サーバの情報を集めるエージェント
- munin: munin-nodeから情報を集めてグラフ・htmlを作成
- Nginx: Muninのhtml管理画面を表示するために必要なWebサーバ
- spawn-fcgi: Nginxでcgiを実行するために必要
MuninをWebサーバで公開する際のセキュリティ対策について
「Munin」のマスターサーバがインターネットに公開されている場合は、Webサーバ(Nginx)のhttps化やBasic認証などのセキュリティ対策を行った方が良いのですが、今回の手順では「Munin」の動作確認を行うためだけの、どちらの設定も行わないシンプルな設定を行っています。
そのため、インターネット上のDNSには、「Munin」マスターサーバのホスト名を登録せず、クライアント(Ubuntu)の「/etc/hosts」ファイルのみに登録することで、インターネットからはサーバ名でアクセスできないようにしています。
この設定により、サーバ名でアクセスできるのは、「/etc/hosts」ファイルが設定されたクライアントのみとなります。
クライアントがWindow11であれば「C:¥Windows¥System32¥drivers¥etc¥hosts」にホスト名を設定しておいてください。
「Munin」の設定が問題なく完了した後に、https化やBasic認証を行う予定です。
Muninマスターの構成について
OS:Ubuntu24.04
Webサーバとして「Nginx」+ 「spawn-fcgi」を使用し、Muninマスターのサーバ情報も監視したいので「munin-node」もインストールしています。
Muninノードの構成について
OS:Ubuntu22.04
Muninノードにはサーバの情報を収集するために必要な「munin-node」をインストールします。
マスターの「munin」から情報を収集する際にTCPの4949番ポート使用するため、ファイウォール(ufw)で通信を許可する設定も必要になります。
Muninマスターでの作業
まずは、自分自身のデータを収集してグラフをwebブラウザで確認できるところまでの作業手順を説明します。
munin munin-nodeインストール
aptを使って「munin」と「munin-node」のインストールを行います。
$ sudo apt update $ sudo apt install munin munin-node ### 中略 ### libtypes-serialiser-perl liburi-perl libvariable-magic-perl libxcb-render0 libxcb-shm0 libxrender1 libxstring-perl munin munin-common munin-doc munin-node munin-plugins-core munin-plugins-extra perl-doc perl-openssl-defaults rrdtool 0 upgraded, 114 newly installed, 0 to remove and 3 not upgraded. Need to get 14.5 MB of archives. After this operation, 35.9 MB of additional disk space will be used. Do you want to continue? [Y/n]
munin設定
muninの設定ファイルである「/etc/munin/munin.conf」で以下の設定を行います。
- htmldir: html用ディレクトリを/usr/share/nginx/muninに変更
- graph_strategy: グラフ作成をcronからcgiへ変更
- html_strategy: html作成cronからcgiへ変更
$ cd /etc/munin/ $ sudo cp -p munin.conf munin.conf_$(date "+%Y%m%d_%H%M%S") $ sudo vi munin.conf
行頭に「#」がついている部分が初期の設定なので、その下に今回設定を行う項目を追加していきます。
#htmldir /var/cache/munin/www htmldir /usr/share/nginx/munin #graph_strategy cron graph_strategy cgi #html_strategy cron html_strategy cgi
設定反映
設定が終わったら「munin」を再起動して設定を反映させます。
$ sudo systemctl restart munin
5分ほどで同時にインストールした「munin-node」からローカルホストの情報取得してきます。
「munin-node」は初期設定の状態で、ローカルホストにインストールされた「munin」からの通信を許可する設定なので、特に設定を行う必要はありません。
Nginxインストール
「Nginx」の公式リポジトリを使って「Nginx」をインストールします。
$ sudo apt update $ sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring $ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \ | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null $ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \ http://nginx.org/packages/mainline/ubuntu `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list $ sudo apt update $ sudo apt install nginx
詳しい手順は下記のページでも説明してますので、よければ参照してみてください。
Munin公開用ディレクトリの作成
「/usr/share/nginx/munin」ディレクトリを作成して、そこを「Munin」の公開用ディレクトリとします。
$ sudo mkdir -p /usr/share/nginx/munin $ sudo chown munin:munin /usr/share/nginx/munin
spawn-fcgi インストール
「Nginx」でcgiを使用できるようにするために必要な「spawn-fcgi」をインストールします。
$ sudo apt install spawn-fcgi
ログの所有者変更
「/var/log/munin/」に「munin」関連のログが作成されるのですが、「munin-cgi-graph.log」と「munin-cgi-html.log」の所有者が初期状態では「www-data:adm」となっています。
$ sudo ls -l /var/log/munin/ total 188 -rw-r----- 1 www-data adm 0 Nov 30 09:53 munin-cgi-graph.log -rw-r----- 1 www-data adm 0 Nov 30 09:53 munin-cgi-html.log -rw-rw-r-- 1 munin munin 55 Nov 30 10:00 munin-graph.log -rw-rw-r-- 1 munin munin 235 Nov 30 10:00 munin-html.log -rw-rw-r-- 1 munin munin 312 Nov 30 10:00 munin-limits.log -rw-r--r-- 1 root root 3628 Nov 30 09:53 munin-node-configure.log -rw-r--r-- 1 root root 468 Nov 30 10:00 munin-node.log -rw-rw-r-- 1 munin munin 170292 Nov 30 10:00 munin-update.log
この状態だとcgiがログに書き込みが出来ずに、グラフとhtmlを作成することが出来ないので所有者を「munin」に変更します。
$ sudo chown munin:munin /var/log/munin/munin-cgi-*
ログの所有者が「munin」に変更されていることを確認しておきます。
$ sudo ls -l /var/log/munin/ total 188 -rw-r----- 1 munin munin 0 Nov 30 09:53 munin-cgi-graph.log -rw-r----- 1 munin munin 0 Nov 30 09:53 munin-cgi-html.log -rw-rw-r-- 1 munin munin 55 Nov 30 10:00 munin-graph.log -rw-rw-r-- 1 munin munin 235 Nov 30 10:00 munin-html.log -rw-rw-r-- 1 munin munin 312 Nov 30 10:00 munin-limits.log -rw-r--r-- 1 root root 3628 Nov 30 09:53 munin-node-configure.log -rw-r--r-- 1 root root 468 Nov 30 10:00 munin-node.log -rw-rw-r-- 1 munin munin 170292 Nov 30 10:00 munin-update.log
syslogの設定変更
「/etc/logrotate.d/munin」を編集して、「munin-cgi-graph.log」のログがローテーションした際に、新規作成されるログファイルの所有者を「www-data」から「munin」に変更します。
$ sudo vi /etc/logrotate.d/munin
「/var/log/munin/munin-cgi-graph.log」の設定項目に「create 640 munin adm」設定を下記の部分に追加します。
/var/log/munin/munin-cgi-graph.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
#create 640 www-data adm
create 640 munin adm # 設定変更部分を追加
# see http://munin-monitoring.org/ticket/1152
copytruncate
}
「fastcgi-graph.sock」と「fastcgi-html.sock」ソケットを作成
「spawn-fcgi」を実行して、「munin-cgi-graph」と「munin-cgi-html」で使用する「/var/run/munin/fastcgi-graph.sock」と「/var/run/munin/fastcgi-html.sock」ソケット作成します。
$ sudo spawn-fcgi -s /var/run/munin/fastcgi-graph.sock \ -U nginx -u munin -g munin -- /usr/lib/munin/cgi/munin-cgi-graph $ sudo spawn-fcgi -s /var/run/munin/fastcgi-html.sock \ -U nginx -u munin -g munin -- /usr/lib/munin/cgi/munin-cgi-html
Nginx設定
「Munin」の動作テストを行うために、「munin.conf」ファイルを作成し最低限の設定を行っていきます。
$ cd /etc/nginx/conf.d $ sudo vi munin.conf
設定内容は以下のとおりです。
server { listen 80; server_name Muninマスターサーバ名; location / { root /usr/share/nginx/munin; index index.html; fastcgi_split_path_info ^(/)(.*); fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_pass unix:/var/run/munin/fastcgi-html.sock; include fastcgi_params; } location ^~ /munin-cgi/munin-cgi-graph/ { # access_log off; fastcgi_split_path_info ^(/munin-cgi/munin-cgi-graph)(.*); fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_pass unix:/var/run/munin/fastcgi-graph.sock; include fastcgi_params; } location /static/ { alias /etc/munin/static/; } }
設定反映
設定ファイルが完成しましたら、「Nginx」を再起動して設定を反映させます。
$ sudo systemctl restart nginx
動作確認
webブラウザでグラフが表示されることを確認します。
Muninのトップページが表示されます。
左側のメニューからグラフを表示させたい項目をクリックして、「localhost.localdomain」グラフが表示されることを確認してください。
spawn-fcgiの自動起動設定
現状は手動で「spawn-fcgi」を実行して「fastcgi-graph.sock」と「fastcgi-html.sock」のソケットを作成する必要があります。
毎回手動で起動させるのは面倒なので、「systemd」で管理をしてサーバ起動時に自動的にソケットを作成するように、「/etc/systemd/system」に以下のファイル作成します。
- munin-fcgi-html.service
- munin-fcgi-graph.service
munin-fcgi-html.serviceの作成
「/var/run/munin/fastcgi-html.sock」をサーバ起動時に自動的に作成するための設定ファイルを作成します。
$ cd /etc/systemd/system $ sudo vi munin-fcgi-html.service
設定内容は以下のとおりです。
[Unit] Description=Munin FCGI After=network.target [Service] Type=forking Restart=always ExecStart=/usr/bin/spawn-fcgi \ -s /var/run/munin/fastcgi-html.sock \ -U nginx -u munin -g munin \ -- /usr/lib/munin/cgi/munin-cgi-html [Install] WantedBy=multi-user.target
munin-fcgi-graph.serviceの作成
「/var/run/munin/fastcgi-graph.sock」を自動作成するための設定ファイルを作成します。
$ sudo vi munin-fcgi-graph.service
設定内容は以下のとおりです。
[Unit] Description=Munin FCGI After=network.target [Service] Type=forking Restart=always ExecStart=/usr/bin/spawn-fcgi \ -s /var/run/munin/fastcgi-graph.sock \ -U nginx -u munin -g munin \ -- /usr/lib/munin/cgi/munin-cgi-graph [Install] WantedBy=multi-user.target
systemdで自動起動設定
新しく「/etc/systemd/system」にファイルを作成したので、「systemd」にファイルを読み込ませます。
$ sudo systemctl daemon-reload
「enable munin-fcgi-html.service」と「munin-fcgi-graph.service」の自動起動設定を行います。
$ sudo systemctl enable munin-fcgi-html.service $ sudo systemctl enable munin-fcgi-graph.service
動作確認
サーバの再起動を行ってソケットが自動作成されるか確認してください。
$ sudo reboot
サーバが再起動したらソケットが作成されている確認を行います。
$ ls -l /var/run/munin/ total 4 srw-r----- 1 nginx nginx 0 Dec 1 20:08 fastcgi-graph.sock srw-r----- 1 nginx nginx 0 Dec 1 20:08 fastcgi-html.sock -rw-r--r-- 1 root root 6 Dec 2 00:00 munin-node.pid
次にwebブラウザで「http://Muninマスターサーバ/」にアクセスして、Muninのグラフが表示できるかを確認してください。
Muninノードでの作業
Muninのマスター設定が終わったので、次はノード側で下記の作業を行っていきます。
マスター(munin)からの通信を許可
「munin」と「munin-node」間の通信はTCPの4949番ポートを使用するので、「ufw」で通信の許可設定を行います。
$ sudo ufw allow 4949/tcp $ sudo ufw reload
munin-nodeインストール
監視対象にmunin-nodeをインストールします。
$ sudo apt install munin-node
munin-node設定
「munin-node」の設定ファイルである「/etc/munin/munin-node.conf」に、マスター(munin)との通信を許可する設定を追加します。
$ cd /etc/munin $ sudo cp -p munin-node.conf munin-node.conf_$(date "+%Y%m%d_%H%M%S") $ sudo vi munin-node.conf
Muninマスターのアドレスを追加して、マスターサーバにインストールしてある「munin」との通信を許可する設定を追加します。
「127.0.0.1」「::1」(ローカルホスト)との通信許可設定は最初からあるので、その下にMuninマスターのアドレスを追加します。
「xxx」の部分にはMuninマスターサーバのIPアドレスを記述します。
allow ^127\.0\.0\.1$
allow ^::1$
allow ^xxx\.xxx\.xxx\.xxx$ # MuninマスターサーバのIPアドレスを追加
設定反映
設定が終わったら「munin-node」を再起動して、設定を反映させます。
$ sudo systemctl restart munin-node.service
以上で監視ノードの側の作業は完了です。
Muninマスター側でノードの追加設定
Muninマスターで「munin」に監視対象ノードの「munin-node」を追加する設定を行います。
$ cd /etc/munin $ sudo cp -p munin.conf munin.conf_$(date "+%Y%m%d_%H%M%S") $ sudo vi munin.conf
追加するノードのホスト名が「vpslife.server-memo.net」であれば、下記のような内容を追加します。
「address」の部分はIPアドレスでも設定できます。
##### 初期設定でlocalhostは設定済み
[localhost.localdomain]
address 127.0.0.1
use_node_name yes
##### 以下を追加
[server-memo.net;vpslife]
address vpslife.server-memo.net
use_node_name yes
[server-memo.net;vpslife]と設定することで、「server-memo.net」グループの中に「vpslife」を追加しています。
設定反映
「munin」を再起動して設定を反映させます。
$ sudo systemctl restart munin
これで、5分ぐらい待つと監視対象ノードからデータの収集が行われます。
動作確認
webブラウザで「http://Muninマスターサーバ」にアクセスして、先程追加した監視対象ノードの情報がグラフとして表示されていることを確認してください。
表示されたグラフ画面の上部に、どのノードの何のグラフを表示しているのかが記載されています。
問題なくグラフが表示されれば作業は完了となります。
コメント