はじめに
余っているRaspberryPizeroで何かできないかと考えMuninを使用して監視サーバにすることにしました。
前提
今回使用した環境
ハードウェア : Raspberrypizero WH
OS : Raspbian GNU/Linux 12 (bookworm)
用語など
Muninでは監視サーバをマスタ、監視対象の端末をノードと称します。
構築
マスタのインストール
まずは監視サーバの準備をしていきます。
- Apacheのインストール
bash
$ sudo apt-get install apache2
- Muninのインストール
bash
$ sudo apt-get install munin
- Apacheの動作確認
ローカルエリアネットワーク内の別端末からブラウザでApacheにアクセスしてみます。
URL : http://<マスタをインストールした端末のIP or 名前>
- apacheのコンフィグ設定
bash
$ ls /etc/munin apache24.conf munin-node.conf plugin-conf.d static munin-conf.d munin.conf plugins templates
bash$ sudo nano apache24.conf //変更前 <Directory /var/cache/munin/www> Require local Options None </Directory> //変更後 <Directory /var/cache/munin/www> Order allow,deny Allow from all Require all granted Options None </Directory>
- コンフィグファイルのシンボリックリンクをApacheのディレクトリに作成
bash
$ sudo ln -s /etc/munin/apache24.conf /etc/apache2/sites-enabled/munin.conf
- Muninの動作確認
ローカルエリアネットワーク内の別端末からブラウザでMuninにアクセスしてみます。
URL : http://<マスタをインストールした端末のIP or 名前>/munin
この段階ではまだノードが登録されていないためマスタ(監視サーバ自体)のみの情報が表示できます。
ノードの追加
それでは監視の対象になるノードの追加をしていきます。
- ノードのインストール(ノード(監視の対象となる端末)で実施)
bash
$ sudo apt-get install munin-node
- Muninノードのコンフィグファイルに追加(ノード(監視の対象となる端末)で実施)
bash
$ sudo nano /etc/munin/munin-node.conf //追加 # A list of addresses that are allowed to connect. This must be a # regular expression, since Net::Server does not understand CIDR-style # network notation unless the perl module Net::CIDR is installed. You # may repeat the allow line as many times as you'd like allow ^127\.0\.0\.1$ allow ^::1$ allow ^<マスタのIPアドレス>$ ⇨ 追加行
- ノードの再起動(ノード(監視の対象となる端末)で実施)
bash
$ sudo systemctl restart munin-node
- ノードの追加(マスタ(監視サーバ)側で実施)
bash
$ sudo nano /etc/munin/munin.conf //追加 # a simple host tree [localhost.localdomain] address 127.0.0.1 use_node_name yes [<任意の名前>.localdomain] ⇨ 追加行 address <追加するノードのIPアドレスまたは名前> ⇨ 追加行 use_node_name yes ⇨ 追加行
しばらくすると新しいノードが追加され確認できるようになります。
ちなみに.localdomeinの部分はグループ名と考えると良いかもしれません。こちらも任意に変更することができます。
アラートをGmailで飛ばす
exim4とmailutilのインストール
bash
sudo apt install exim4
sudo apt install mailutils
exim4の設定
bash
sudo dpkg-reconfigure exim4-config
exim4の設定はダイアログで設定を行います。
- General type of mail configuration:
- mail sent by smarthost; received via SMTP or fetchmailを選択
- System mail name:
- 特に指定するドメインなどが無い場合 localhost を入力
- IP-addresses to listen on for incoming SMTP connections:
- 127.0.0.1 ; ::1 を入力
- Machines to relay mail for:
- 未入力
- IP address or host name of the outgoing smarthost:
- smtp.gmail.com:587 を入力
- Hide local mail name in outgoing mail?
- No を選択
- Keep number of DNS-queries minimal (Dial-on-Demand)?
- No を選択
- Delivery method for local mail:
- mbox format in /var/mail/ を入力
- Split configuration into small files?
- No を選択
/etc/exim4/passwd.clientの編集
bash
sudo nano /etc/exim4/passwd.client
以下を入力して保存する。この際Googleアカウントに二段階認証設定をしている場合は通常のGoogleアカウントのパスワードではなく、アプリパスワードを発行して入力する必要がある。
アプリパスワードを作成していない場合はこちらを参照して作成してください。
gmail-smtp.l.google.com:<メールアドレス>:<アプリ パスワード>
*.google.com:<メールアドレス>:<アプリ パスワード>
smtp.gmail.com:<メールアドレス>:<アプリ パスワード>
設定を反映する
bash
sudo update-exim4.conf
テストメールを送信する
bash
sudo echo "test mail massage" | mail -s "test mail" <送信先メールアドレス>
Muninのアラート設定
bash
sudo nano /etc/munin/munin.conf
変更箇所
# 送信コマンド
# フォーマット contact.<通知先名>.command mail -s "<件名>" <送信先メールアドレス>
contact.admin.command mail -s "Munin Alart ${var:worst}: ${var:group}::${var:host}::${var:plugin}" <送信先メールアドレス>
# 送信するアラートレベル設定
# フォーマット contact.<通知先名>.always_send <障害レベル設定>
contact.admin.always_send warning critical
# 送信設定
# フォーマット contacts <通知先名>
contacts admin
# アラートレベルと閾値を設定(ノード追加した際に追加した各ノードの項に追記する)例えばcpu80%をWarning、90%をcriticalとしたい場合
# フォーマット <plugin名>.<インターナル名>.<障害レベル> <閾値>
# a simple host tree
[<ホスト名>]
cpu.user.warning 80
cpu.user.critical 100
- 通知先名は任意に設定可能、通知先名を分けて複数行書くこともできるので通知先エイリアスといってもいいかもしれない
- 件名部分で使用できる変数はこちらが参考になる
- plugin名は
munin-node-configure
コマンドやls /etc/munin/plugins
で確認する - インターナル名は
sudo munin-run <plugin名> config
コマンドや、実際のmuninの画面(各グラフをクリックし際に下の方に表示される表)で確認する - 通知したくないノードがある場合は
contacts no
とすることで通知されなくなる
その他
プラグインの設定確認コマンド
bash
sudo munin-run <plugin名> config