Memo/Linux/Monit

https://dexlab.net:443/pukiwiki/index.php?Memo/Linux/Monit
 

Monit プロセス監視と自動再起動


新しいmonitに更新

  • CentOS 7 EPEL repo: monit-5.14
    • logrotate有り。RHEL6/7で設定ファイル名が異なる
# RHEL 7
rpm -ql monit
...
/etc/logrotate.d/monit
/etc/monit.d
/etc/monit.d/logging
/etc/monitrc
/usr/bin/monit
/usr/lib/systemd/system/monit.service
/usr/share/doc/monit-5.14
/usr/share/doc/monit-5.14/COPYING
/usr/share/doc/monit-5.14/README
/usr/share/man/man1/monit.1.gz
/var/log/monit.log
  • https://www.insaneworks.co.jp/pub/
    • RHEL/CentOS 6/7, 最新版v5.25.1あり
    • デフォルトlogがsyslogなため、logrotate設定無し。RHEL 6/7でファイル名/パスの違いが最小。rpmのファイル命名規則が違う
# RHEL 6
rpm -qlpi monit-5.25.1-1.el6.x86_64.rpm
...
/etc/monit.conf
/etc/monit.d
/etc/rc.d/init.d/monit
/usr/bin/monit
/usr/share/doc/monit-5.25.1
/usr/share/doc/monit-5.25.1/COPYING
/usr/share/doc/monit-5.25.1/README
/usr/share/man/man1/monit.1.gz
/var/lib/monit
/var/monit

# RHEL 7
rpm -qlpi monit-5.25.1-1.el7.centos.x86_64.rpm
...
/etc/monit.conf
/etc/monit.d
/usr/bin/monit
/usr/lib/systemd/system/monit.service
/usr/share/doc/monit-5.25.1
/usr/share/doc/monit-5.25.1/COPYING
/usr/share/doc/monit-5.25.1/README
/usr/share/man/man1/monit.1.gz
/var/lib/monit
/var/monit
# EHEL 6
rpm -qlpi monit-5.25.1-1.el6.x86_64.rpm
...
/etc/logrotate.d/monit
/etc/monit.conf
/etc/monit.d
/etc/monit.d/logging
/etc/rc.d/init.d/monit
/usr/bin/monit
/usr/share/doc/monit-5.25.1
/usr/share/doc/monit-5.25.1/COPYING
/usr/share/doc/monit-5.25.1/README
/usr/share/man/man1/monit.1.gz
/var/log/monit

# EHEL 7
rpm -qlpi monit-5.25.1-1.el7.x86_64.rpm
...
/etc/logrotate.d/monit
/etc/monit.d
/etc/monit.d/logging
/etc/monitrc
/usr/bin/monit
/usr/lib/systemd/system/monit.service
/usr/share/doc/monit-5.25.1
/usr/share/doc/monit-5.25.1/COPYING
/usr/share/doc/monit-5.25.1/README
/usr/share/man/man1/monit.1.gz
/var/log/monit.log
  • 環境
    • Ubuntu 12.04 LTS / monit 5.3.2がインストール済み
# 古いバージョンを待避
which monit
/usr/bin/monit
sudo service monit stop
sudo mv /usr/bin/monit /usr/bin/monit.5.3.2
wget https://mmonit.com/monit/dist/binary/5.24.0/monit-5.24.0-linux-x64.tar.gz
tar xvfz monit-5.24.0-linux-x64.tar.gz -C ./
sudo cp monit-5.24.0/bin/monit /usr/bin/
# ~/.monitrc, /etc/monitrc, /usr/local/etc/monitrc, /usr/local/etc/monitrc or at ./monitrc しか読んでくれないためsymlink
sudo ln -s /etc/monit/monitrc /etc/monitrc
sudo monit start
sudo monit status
  • 気づいた点
    • monit 5.24.0 では色が付いている

トラブル


check programで監視中に復帰しない事がある

以下、monit 5.25.1 に更新すると解消する事を確認。

  • pathで指定するヘルスチェックスクリプトは、exit code: 0:成功 , !0: 失敗 とする必要がある。
  • 5.14.0とは挙動が変わり、pathで指定されたスクリプト失敗時に1回だけexecが実行される。
  • ヘルスチェック成功後に、失敗すると再度execが実行される。
  • ヘルスチェックが失敗し続ける場合、再度実行はされない。

  • monit v5.14.0
  • /etc/monit.d/httpd.cfg
    # /opt/healthcheck/httpd/check.shが失敗した時(exit status != 0)にプロセスをkillして強制起動させたい
    check program httpd-healthcheck with path /opt/healthcheck/httpd/check.sh
          with timeout 60 seconds
          if status != 0
            for 3 cycles
          then exec "/bin/bash -c '/usr/bin/pkill -9 httpd && /bin/sleep 5 && /sbin/service httpd start'"
  1. 障害テストのためtcp/80をブロック
    sudo iptables -A INPUT -p tcp -m tcp --dport 14186 -j DROP
  2. /opt/healthcheck/httpd/check.sh のexit statusが!0を返す
  3. 3回ヘルスチェックが失敗したら、execが実行される。(想定通り)
  4. 障害から復帰したつもりでiptablesを停止
    sudo service iptables stop
  5. 手動では /opt/healthcheck/httpd/check.sh のexit statusが0を返す
  6. /var/log/monit.log には /opt/healthcheck/httpd/check.sh のexit status が !0 のまま(異常)で、再起動を繰り返す。(想定外)

監視中のファイルを変更すると実行に失敗する

  • monit v5.14.0
  • check programで監視対象スクリプトをvim等で書き換えても、古いファイルが実行される。恐らくi-nodeが変わっても追従してくれない。reloadすると新しいファイルを見てくれるようになる。
    sudo monit reload

ゾンビプロセスが増加する

  • 既知の不具合のようだ
  • Monit Manual

    This means that every "check program" will be associated with either a running process or a temporary zombie. This unwanted zombie side-effect will be removed in a later release of Monit.

# ゾンビプロセスの表示
ps aux | awk '{if($8 ~ /Z/) print}'

CPU Usage監視がうまく動作しない

  • 現象
    • Ubuntu 12.04 LTS / monit 5.3.2でCPU監視を使い、プロセスのCPU 100%が数回続いたときにプロセスの再起動をさせたい。
    • 4コアCPUで、topでプロセスを見るとCPU 100%だが、monit statusでは25%(1/4 CPUコア)と表示される。topは2コア使えば200%表記になる。
    • memory usageは正常に見える。

動作確認

  • サマリ
    sudo monit summary
  • 詳細
    sudo monit status

設定ファイルの構文チェック

monit -t

アラートメール送信

  • CentOS 6.x 64bit, monit-5.14-1.el6.x86_64
  • 「not on { instance }」 でMonit自体のstart/stopのアラートを抑制できる。 なぜか「only on { timeout, exec }」では期待した動作にならなかった。
  • 「monit monitor all」すると毎回「Action done」メールが監視項目の数だけ来るので無視する
  • 以下最低限の設定。メールフォーマットはデフォルトになる
    vim /etc/monit.conf
    ----
    set mailserver localhost
    set alert manager@foo.bar not on { instance, action }
    ----
    monit reload

デバッグ

  • -vで設定の詳細を表示
    sudo monit -v

exec

  • M/Monit | Wiki execのデバッグ
  • ログを出したい場合。
    # ファイルへ
    exec "/bin/bash -c '/path/myscript &> /tmp/myscript.out'"
    
    # syslogへ
    exec "/bin/bash -c '/path/myscript &> | /usr/bin/logger -i -t myscript'"
  • 複数コマンドを実行したい場合、startやexecにセミコロン";"区切りして指定しても実行されない。以下のようにする
      start program = "/bin/bash -c 'my shell command && my other command'"

監視状況の確認

  • Webインタフェースを有効にする
    cat /etc/monit.conf
    
    set httpd port 2812 and
        use address localhost  # only accept connection from localhost                                                                      
        allow localhost        # allow localhost to connect to the server and
        allow admin:monit      # require user 'admin' with password 'monit'
        allow @monit           # allow users of group 'monit' to connect (rw)                                                               
        allow @users readonly  # allow users of group 'users' to connect readonly
  • 確認
    sudo monit status

CentOS 6.x用rpm

  • 自分でビルドする場合
    mkdir -p ~/rpm/{BUILD,SRPMS,SPECS,SOURCES,RPMS}
    cd rpm
    echo "%_topdir $HOME/rpm" > ~/.rpmmacros
    
    # 依存パッケージをインストール
    sudo yum install flex pam-devel -y
    
    wget https://mmonit.com/monit/dist/monit-5.14.tar.gz
    tar xvfz monit-5.14.tar.gz
    cp monit-5.14/system/packages/redhat/monit.spec SPECS/
    mv monit-5.14.tar.gz SOURCES/
    
    # ビルド
    rpmbuild -bb SPECS/monit.spec
    
    # インストール
    sudo rpm -Uvh ./RPMS/x86_64/monit-5.14-1.x86_64.rpm
  • デフォルトインストールファイル。デフォルトだとあまりRedHatらしくない。
    rpm -ql monit
    
    /etc/init.d/monit
    /etc/monitrc
    /usr/bin/monit
    /usr/share/doc/monit-5.14
    /usr/share/doc/monit-5.14/COPYING
    /usr/share/doc/monit-5.14/README
    /usr/share/man/man1/monit.1.gz
    • 不足しているもの
      • /var/log/monit.log
      • /etc/logrotate.d/monit
      • /etc/monit.d

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-09-15 (土) 07:31:38 (94d)