Memo/Linux/Monit

http://dexlab.net/pukiwiki/index.php?Memo%2FLinux%2FMonit
 

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


新しいmonitに更新

  • CentOS 7 EPEL repo: monit-5.14
    • logrotate有り。RHEL6/7で設定ファイル名が異なる
      1. # RHEL 7
      2. rpm -ql monit
      3. ...
      4. /etc/logrotate.d/monit
      5. /etc/monit.d
      6. /etc/monit.d/logging
      7. /etc/monitrc
      8. /usr/bin/monit
      9. /usr/lib/systemd/system/monit.service
      10. /usr/share/doc/monit-5.14
      11. /usr/share/doc/monit-5.14/COPYING
      12. /usr/share/doc/monit-5.14/README
      13. /usr/share/man/man1/monit.1.gz
      14. /var/log/monit.log
  • https://www.insaneworks.co.jp/pub/
    • RHEL/CentOS 6/7, 最新版v5.25.1あり
    • デフォルトlogがsyslogなため、logrotate設定無し。RHEL 6/7でファイル名/パスの違いが最小。rpmのファイル命名規則が違う
      1. # RHEL 6
      2. rpm -qlpi monit-5.25.1-1.el6.x86_64.rpm
      3. ...
      4. /etc/monit.conf
      5. /etc/monit.d
      6. /etc/rc.d/init.d/monit
      7. /usr/bin/monit
      8. /usr/share/doc/monit-5.25.1
      9. /usr/share/doc/monit-5.25.1/COPYING
      10. /usr/share/doc/monit-5.25.1/README
      11. /usr/share/man/man1/monit.1.gz
      12. /var/lib/monit
      13. /var/monit
      14.  
      15. # RHEL 7
      16. rpm -qlpi monit-5.25.1-1.el7.centos.x86_64.rpm
      17. ...
      18. /etc/monit.conf
      19. /etc/monit.d
      20. /usr/bin/monit
      21. /usr/lib/systemd/system/monit.service
      22. /usr/share/doc/monit-5.25.1
      23. /usr/share/doc/monit-5.25.1/COPYING
      24. /usr/share/doc/monit-5.25.1/README
      25. /usr/share/man/man1/monit.1.gz
      26. /var/lib/monit
      27. /var/monit
  • https://kojipkgs.fedoraproject.org/packages/monit/
    • RHEL/CentOS 6/7, Fedora向け, 最新版v5.25.1あり
    • logrotate有り。RHEL6/7で logファイル名、設定ファイル名が異なる
      1. # EHEL 6
      2. rpm -qlpi monit-5.25.1-1.el6.x86_64.rpm
      3. ...
      4. /etc/logrotate.d/monit
      5. /etc/monit.conf
      6. /etc/monit.d
      7. /etc/monit.d/logging
      8. /etc/rc.d/init.d/monit
      9. /usr/bin/monit
      10. /usr/share/doc/monit-5.25.1
      11. /usr/share/doc/monit-5.25.1/COPYING
      12. /usr/share/doc/monit-5.25.1/README
      13. /usr/share/man/man1/monit.1.gz
      14. /var/log/monit
      15.  
      16. # EHEL 7
      17. rpm -qlpi monit-5.25.1-1.el7.x86_64.rpm
      18. ...
      19. /etc/logrotate.d/monit
      20. /etc/monit.d
      21. /etc/monit.d/logging
      22. /etc/monitrc
      23. /usr/bin/monit
      24. /usr/lib/systemd/system/monit.service
      25. /usr/share/doc/monit-5.25.1
      26. /usr/share/doc/monit-5.25.1/COPYING
      27. /usr/share/doc/monit-5.25.1/README
      28. /usr/share/man/man1/monit.1.gz
      29. /var/log/monit.log
  • 環境
    • Ubuntu 12.04 LTS / monit 5.3.2がインストール済み
      1. # 古いバージョンを待避
      2. which monit
      3. /usr/bin/monit
      4. sudo service monit stop
      5. sudo mv /usr/bin/monit /usr/bin/monit.5.3.2
      6.  
      7. wget https://mmonit.com/monit/dist/binary/5.24.0/monit-5.24.0-linux-x64.tar.gz
      8. tar xvfz monit-5.24.0-linux-x64.tar.gz -C ./
      9. sudo cp monit-5.24.0/bin/monit /usr/bin/
      10. # ~/.monitrc, /etc/monitrc, /usr/local/etc/monitrc, /usr/local/etc/monitrc or at ./monitrc しか読んでくれないためsymlink
      11. sudo ln -s /etc/monit/monitrc /etc/monitrc
      12. sudo monit start
      13. sudo monit status
  • 気づいた点
    • monit 5.24.0 では色が付いている

トラブル


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

以下、monit 5.25.1 に更新すると解消する事を確認。
ただし、挙動が変わり、ヘルスチェック失敗時に1回だけexecが実行される。

  • monit v5.14.0
  • /etc/monit.d/httpd.cfg
    1. # /opt/healthcheck/httpd/check.shが失敗した時(exit status != 0)にプロセスをkillして強制起動させたい
    2. check program httpd-healthcheck with path /opt/healthcheck/httpd/check.sh
    3.       with timeout 60 seconds
    4.       if status != 0
    5.         for 3 cycles
    6.       then exec "/bin/bash -c '/usr/bin/pkill -9 httpd && /bin/sleep 5 && /sbin/service httpd start'"
  1. 障害テストのためtcp/80をブロック
    1. 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を停止
    1. 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すると新しいファイルを見てくれるようになる。
    1. 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.

  1. # ゾンビプロセスの表示
  2. 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は正常に見える。

動作確認

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

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

  1. 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」メールが監視項目の数だけ来るので無視する
  • 以下最低限の設定。メールフォーマットはデフォルトになる
    1. vim /etc/monit.conf
    2. ----
    3. set mailserver localhost
    4. set alert manager@foo.bar not on { instance, action }
    5. ----
    6. monit reload

デバッグ

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

exec

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

監視状況の確認

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

CentOS 6.x用rpm

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

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-01-26 (金) 18:41:54 (89d)