Debian 9 (Stretch) - Monit でプロセス監視!

Updated:


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

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

0. 前提条件

  • Debian GNU/Linux 9 (Stretch) での作業を想定。
  • root ユーザでの作業を想定。

1. monit のインストール

# apt -y install monit

2. 設定ファイル編集

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

File: /etc/monit/monitrc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
  set daemon 120                              # 監視間隔(秒)

  set logfile /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@$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                    # 通知先メールアドレス

    include /etc/monit/conf.d/*               # 別の設定ファイル読み込み
    include /etc/monit/conf-enabled/*         #   〃
  • set logfile /var/log/monit.logset logfile 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. アラート機能の設定

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
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秒のタイムアウトで失敗する場合は、 MySQL サーバを再起動する。
  • Unix ソケットへの接続が4回中3回失敗する場合は、 MySQL サーバを再起動する。
  • 5回中5回再起動となる場合は、タイムアウトする。
  • group xxxx としてグループ単位で監視の制御をすることも可能。
  • CPU 使用量やメモリ使用量等を監視することも可能。

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

File: /etc/monit.d/hoge

1
check process hoge matching "hoge"

4. 構文チェック

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

# monit -t
Control file syntax OK

5. Monit の再起動

# systemctl restart monit

6. 監視状況の確認

# monit status
The Monit daemon 5.9 uptime: 1m

Process 'mysqld'
  status                            Running
  monitoring status                 Monitored
  pid                               5258
  parent pid                        4953
  uid                               999
  effective uid                     999
  gid                               1001
  uptime                            32m
  children                          0
  memory kilobytes                  157.3 MB
  memory kilobytes total            157.3 MB
  memory percent                    7.8%
  memory percent total              7.8%
  cpu percent                       0.0%
  cpu percent total                 0.0%
  unix socket response time         0.000s to /var/run/mysqld/mysqld.sock [MYSQL]
  port response time                0.001s to localhost:3306 [MYSQL via TCP]
  data collected                    Wed, 21 Dec 2016 22:05:55

System 'foo.bar.com'
  status                            Running
  monitoring status                 Monitored
  load average                      [0.63] [0.31] [0.24]
  cpu                               0.0%us 0.0%sy 0.0%wa
  memory usage                      663.4 MB [33.2%]
  swap usage                        0.0 B [0.0%]
  data collected                    Wed, 21 Dec 2016 22:05:55

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