OPS

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

 

monitsyslogでの出力が可能です。特定のログファイルに出力したい場合は、ここにフルパスを記載します。後ほど記載しますが、デフォルトで/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は設定が簡単なので、運用負荷軽減のために簡単な自動化を取り入れたい時に重宝されます。

弊社では運用の自動化に向けたご相談は随時受け付けておりますので、お困りごとがありましたらぜひご相談ください。