Debian 11 (bullseye) - Monit でプロセス監視!

Updated:


Debian GNU/Linux 11 (bullseye) にプロセス監視ツール monit をインストールする方法についての記録です。

以前古いバージョンでの作業時に残していた記録を参考に作業を行い、今回更新した作業記録を貼付する形式の内容となっています。
(当然ながら、興味がなければスルーしてください)

0. 前提条件

  • Debian GNU/Linux 11.2.0 (bullseye; 64bit) での作業を想定。
  • root ユーザでの作業を想定。

1. monit のインストール

# apt -y install monit

2. 設定ファイル編集

設定ファイル /etc/monit/monitrc を編集する。
以下は当方の例。

File: /etc/monit/monitrc

  set daemon 120                              # 監視間隔(秒)

  set log /var/log/monit.log                  # ログファイル

  set idfile /var/lib/monit/id                # Monit インスタンスの ID ファイル

  set statefile /var/lib/monit/state          # Monitering ステート保存ファイル

  set mailserver localhost                    # メールサーバ

  set eventqueue
        basedir /var/lib/monit/events         # メールサーバが利用できない場合の通知用
        slots 100                             #   〃

  set mail-format {                           # メール書式
    from:    Monit <monit@$HOST>
    subject: monit alert --  $EVENT $SERVICE
    message: $EVENT Service $SERVICE
                  Date:        $DATE
                  Action:      $ACTION
                  Host:        $HOST
                  Description: $DESCRIPTION

             Your faithful employee,
             Monit
  }

  set alert root@localhost                    # 通知先メールアドレス

  set httpd port 2812 and
      allow localhost

    include /etc/monit/conf.d/*               # 別の設定ファイル読み込み
    include /etc/monit/conf-enabled/*         #   〃
  • set log /var/log/monit.logset log syslog facility log_daemon とすると syslog での出力となる。
  • メールサーバは複数設定可能。
  • メール通知先も複数設定可能。
  • set alert root@localhost only on { xxxx } などとすれば、xxxx アクション発生時のみメール通知するようにする。
  • set alert root@localhost but not on { xxxx } などとすれば、xxxx 以外のアクション発生時のみメール通知するようにする。
  • その他の設定等については、 “monit.conf” 内のコメントや公式ドキュメントを参照のこと。

3. アラート機能の設定

以下は MariaDB サーバを監視する例。(パスは環境に合わせて適宜置き換えること)

File: /etc/monit/conf.d/mysqld

check process mysql with pidfile /var/run/mysqld/mysqld.pid
    every 1 cycle
    start program = "/etc/rc.d/init.d/mysqld start"
    stop  program = "/etc/rc.d/init.d/mysqld stop"
    if failed
        host localhost port 3306 protocol mysql
        with timeout 15 seconds for 3 times within 4 cycles
    then restart$
    if failed
        unixsocket /var/run/mysqld/mysqld.sock protocol mysql
        for 3 times within 4 cycles
    then restart$
    if 5 restarts within 5 cycles then timeout
  • `mysqld.pid~ ファイルを1サイクル(今回の設定では 120秒 * 1 = 60秒)毎に監視し、存在しなければ MySQL サーバを再起動する。
  • TCP ポート 3306 への接続が4回中3回15秒のタイムアウトで失敗する場合は、 MariaDB サーバを再起動する。
  • Unix ソケットへの接続が4回中3回失敗する場合は、 MariaDB サーバを再起動する。
  • 5回中5回再起動となる場合は、タイムアウトする。
  • group xxxx としてグループ単位で監視の制御をすることも可能。
  • CPU 使用量やメモリ使用量等を監視することも可能。

PID ファイルの存在を監視するのではなく、プロセス自体の存在を監視したければ、1行目を以下のようにする。(以下は、プロセス名に hoge を含むプロセスを監視する例で、正規表現で指定する)

File: /etc/monit.d/hoge

check process hoge matching "hoge"

4. 構文チェック

予め設定ファイルの構文をチェックすることができる。

# monit -t
Control file syntax OK

5. Monit の再起動

# systemctl restart monit

6. 監視状況の確認

# monit status
Monit 5.27.2 uptime: 0m

System 'vbox'
  status                       OK
  monitoring status            Monitored
  monitoring mode              active
  on reboot                    start
  load average                 [1.27] [1.71] [2.43]
  cpu                          0.0%usr 0.0%sys 0.0%nice 0.0%iowait 0.0%hardirq 0.0%softirq 0.0%steal 0.0%guest 0.0%guestnice
  memory usage                 946.1 MB [96.9%]
  swap usage                   1.2 GB [31.3%]
  uptime                       1h 0m
  boot time                    Wed, 22 Sep 2021 15:24:00
  filedescriptors              1888 [0.0% of 9223372036854775807 limit]
  data collected               Wed, 22 Sep 2021 16:24:14

statusRunning であれば、「監視中」である。

monit summary だと status だけを確認できる。

7. 個別監視の停止・起動

個別に監視を停止・起動するには以下のようにする。

# monit stop xxxx
# monit start xxxx

8. グループ単位での監視の停止・起動

個別の設定ファイル内で group xxxx のように記述していれば、xxxx グループの単位で監視を停止・起動することができる。

# monit -g xxxx stop
# monit -g xxxx start

9. 参考サイト


以上。





 

Sponsored Link

 

Comments