Mackerelでプロセスの監視と自動復旧をしてみた

2022.02.02

はじめに

こんにちは。ネクストモード株式会社 でセールス担当をしているmachiです。
今回はMackerelでhttpdのプロセス監視を行い、さらにプロセスがダウンした際に自動で再起動するように設定してみました。

前提

今回はEC2にMackerelエージェントをインストール済という前提で進めます。
エージェントのインストール方法については以前書いたブログをご参照ください。

全体の流れ

  1. EC2にApacheをインストール
  2. Mackerelのプラグインをインストール
  3. Mackerelの設定ファイルを編集してhttpdプロセスの監視を行うよう設定
  4. httpdプロセスを停止しアラート通知が飛ぶか確認
  5. httpdプロセスダウン時に自動で再起動を実施

EC2にApacheをインストール

下記コマンドを叩き、Apacheのインストールと起動を行います。

# Apacheインストール
sudo yum install httpd

# Apacheの起動
sudo systemctl start httpd

# Apacheの状態確認
sudo systemctl status httpd

Mackerelのプラグインをインストール

Mackerelでは各種ミドルウェアに対応した公式プラグインを提供しており、それらをインストールすることでプロセス監視やログ監視が可能になります。

下記コマンドを叩きプラグインをインストールします。

sudo yum install mackerel-check-plugins

Mackerelの設定ファイルを編集してhttpdプロセスの監視を行う

下記コマンドでMackerelの設定ファイルが編集できます。

sudo vi /etc/mackerel-agent/mackerel-agent.conf

設定ファイルに下記を記述します。

[plugin.checks.check_httpd]
command = ["check-procs", "--pattern", "httpd"]

Mackerelの再起動を行います。これによりhttpdプロセス監視が可能になります。

# 再起動
sudo systemctl restart mackerel-agent

# 状態確認
sudo systemctl status mackerel-agent


Mackerelポータル上で確認すると、ちゃんと監視できています!簡単!

httpdプロセスを停止しアラートが出るか確認

下記コマンドを叩きhttpdを停止します。

# プロセスの停止
sudo systemctl stop httpd

# プロセスの状況確認
sudo systemctl status httpd


Mackerelポータルを見るとアラートが出ています!


httpdを再度起動してみます。

# Apacheの起動
sudo systemctl start httpd

# Apacheの状態確認
sudo systemctl status httpd


アラートが消えて正常に戻りました。

httpdプロセスダウン時に自動で再起動を実施

上記は手動で再起動しましたが、Mackerelはhttpdの異常を検知した際に自動で再起動させることができます!
下記の流れでやってみます。

①Mackerelの設定ファイルに「httpdプロセスが異常な場合には再起動するよ」という設定を追加
②httpdを停止し、本当に自動で再起動されるか確認

①Mackerelの設定ファイルに「httpdプロセスが異常な場合に、httpdを再起動するよ」という設定を追加する

再度、Mackerelの設定ファイルを編集しましょう。

sudo vi /etc/mackerel-agent/mackerel-agent.conf

下記を記述します。

action = { command = "bash -c '[ \"$MACKEREL_STATUS\" != \"OK\" ]' && sudo systemctl restart httpd" }

※先ほど設定した下記2行の真下に記述してください

[plugin.checks.check_httpd]
command = ["check-procs", "--pattern", "httpd"]


Mackerelの再起動を行い、設定を反映させます。

# 再起動
sudo systemctl restart mackerel-agent

# 状態確認
sudo systemctl status mackerel-agent

②httpdを停止し、本当に自動で再起動されるか確認する

下記コマンドを叩きhttpdを停止します。

# プロセスの停止
sudo systemctl stop httpd

# プロセスの状況確認
sudo systemctl status httpd


Mackelポータルを見てみると、当然ですがアラートが出ています。


1分ほど待つと、自分では何もしていないのにアラートが消えました…!


Mackelでアラートの履歴を見ると、異常を検知してから1分後に回復していることが分かります。


EC2上でhttpdの状態を確認すると、アクティブになっています。
本当に再起動された…簡単すぎる…。

さいごに

とても簡単にプロセスの監視と自動再起動ができました!興味があれば是非お試しいただければと思います。

また、弊社ではMackerelをベースとした監視サービス「運用アシスタント」をご提供しています。障害対応や日々の運用代行の実施も可能ですので、AWS運用にご不安がありましたらお気軽にお問い合わせ頂けますと幸いです。