スポンサーリンク

【Ubuntu】Muninでサーバのリソースを監視する方法

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

詳しい手順は下記のページでも説明してますので、よければ参照してみてください。

【Ubuntu Server 22.04】Nginx公式サイトのリポジトリを使用してインストール
Ubuntu Server 22.04では、apt-key addコマンドが非推奨(廃止予定)となりましたので、それにあわせたインストール手順を説明していきます。公式リポジトリを使用してNginxをインストールUbuntu Server 2...

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マスターサーバ」にアクセスして、先程追加した監視対象ノードの情報がグラフとして表示されていることを確認してください。

表示されたグラフ画面の上部に、どのノードの何のグラフを表示しているのかが記載されています。

問題なくグラフが表示されれば作業は完了となります。

コメント

タイトルとURLをコピーしました