monitを利用した自動化
2019.02.12
monitを利用してプロセスダウンの際の自動復旧システムを構築します。AWSのCloudWatchLogsと連携することで自動復旧が実行された際や、自動復旧に失敗したことの通知を行います。
はじめに
東京でエンジニアをしているK.Kです。
弊社では日々、運用の自動化を進めています。
私の中で一番ホットなmonitを利用して自動化を実装しようと思います。
monitとは
本記事では簡易監視ツールのmonitについてご紹介します。monitはオープンソースのツールで一定周期で監視し、設定したイベント検知すると自動でコマンドを実行してくれる便利なツールです。
【関連リンク】
構成内容
概要
本構成ではAWSサービスを使用し、イベントが検知されたことの通知や設定したアクションに失敗したことの通知まで自動で実行する構成をお伝えしたいと思います。
環境
AWS
CentOS 7.5
monit設定
インストール
まずmonitをインストールしましょう。epelリポジトリからyumで簡単にインストールすることができます。
# yum install epel-release
# yum install monit
監視基本設定
インストールが無事に成功したら以下の設定ファイルからmonitの設定を行っていきます。※バージョンやディストリビューションによって設定ファイル名は異なるのでご注意ください。
# vi /etc/monitrc
監視の周期を確認します。秒単位で設定が可能です。あまり周期が短いと負荷がかかるためデフォルトの30秒で設定しています。
set daemon 30 # check services at 30 seconds intervals
デーモン起動後の監視開始の遅延時間をセットします。監視開始時間の遅延はデーモン起動後、監視対象のプロセスが起動していない場合があるので意図的に少し遅らせています。構成内容に応じて設定は変更してください。
with start delay 240 # optional: delay the first check by 4-minutes (by
monitはsyslogでの出力が可能です。特定のログファイルに出力したい場合は、ここにフルパスを記載します。後ほど記載しますが、デフォルトで/var/log/monit.logにもログは出力されます。
set log syslog
監視内容設定
次にhttpdプロセスの監視と自動復旧の設定を行っていきます。以下のフォルダを作成し、設定を記載していきます。今回の設定では5回再起動に失敗すると監視を停止するように設定しています。
# vi /etc/monit.d/httpd
check process httpd
with pidfile "/var/run/httpd/httpd.pid"
start program "/bin/systemctl start httpd"
stop program "/bin/systemctl stop httpd"
if failed port 80 with timeout 10 seconds then restart
if 5 restarts within 5 cycles then unmonitor/code>
設定確認
以下コマンドで設定の文法チェックを行ってくれます。
# monit -t
monitを起動し、自動起動設定を行います。
# systemctl start monit
# systemctl enable monit
# monit status
Monit 5.25.1 uptime: 0m
Process 'httpd'
status OK
monitoring status Monitored
monitoring mode active
on reboot start
pid 4727
parent pid 1
uid 0
effective uid 0
gid 0
uptime 1m
threads 1
children 5
cpu 0.0%
cpu total 0.0%
memory 0.5% [5.0 MB]
memory total 2.0% [19.6 MB]
security attribute system_u:system_r:httpd_t:s0
disk write 0 B/s [12 kB total]
port response time 0.288 ms to localhost:80 type TCP/IP protocol DEFAULT
data collected Mon, 22 Oct 2018 15:27:48
System 'ip-172-31-14-209.ap-northeast-1.compute.internal'
status OK
monitoring status Monitored
monitoring mode active
on reboot start
load average [0.01] [0.04] [0.05]
cpu 1.1%us 2.1%sy 0.0%wa
memory usage 119.3 MB [12.0%]
swap usage 0 B [0.0%]
uptime 3h 25m
boot time Mon, 22 Oct 2018 12:02:09
data collected Mon, 22 Oct 2018 15:27:48
追加設定
monitは複数回再起動に失敗すると監視を停止する機能がついています。監視が停止すると自動で再開してくれないので保険としてcronで監視再開させるためのコマンドを30分ごとに実行させます。
# crontab -e 0 */30 * * * monit monitor all
最後に
monitはプロセスの監視だけでなくディスク容量の監視やメモリ、CPU等様々な監視を行い閾値超過を検知した場合は、それに応じたアクションを実行することができます。なによりmonitは設定が簡単なので、運用負荷軽減のために簡単な自動化を取り入れたい時に重宝されます。
弊社では運用の自動化に向けたご相談は随時受け付けておりますので、お困りごとがありましたらぜひご相談ください。