0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CloudWatchでApache httpdサービスを監視し、停止時にメール通知アラートを発生させる方法

Last updated at Posted at 2024-10-13

はじめに

本記事では、CloudWatchエージェントを使用してApache WebサーバーのHTTPSサービスを監視し、停止した際にアラートを発生させる方法について解説します。

CloudWatchエージェントは、Apacheのログやシステムメトリクスを収集し、監視やアラートに活用できる有効なツールです。

実務では、Datadogというクラウドに最適化した監視製品を使用していますが、この機会にCloudWatchについても備忘録として整理していきます。

知識整理

EC2

Amazon EC2はAWSが提供するスケーラブルな仮想サーバーです。ここでは、EC2上に構築されたApache Webサーバーの状態をCloudWatchエージェントで監視します。

Apache

ApacheはHTTP/HTTPS通信を提供するWebサーバーで、今回の対象となるサービスです。特に、HTTPポート(通常80)での監視を行います。

CloudWatchエージェント

CloudWatchエージェントは、サーバーのメトリクスやログを収集してCloudWatchに送信し、可視化やアラートのトリガーに使うことができます。Apacheのログやサーバーのメトリクスを監視し、サービスの異常を検知します。

構築/検証手順

今回は、以下の参考画像を用いて、Amazon EC2インスタンスにCloudWatchエージェントを導入し、httpdのサービスを監視する仕組みを作成します。

image.png
引用画像:https://www.fujitsu.com/jp/products/software/resources/feature-stories/cloud-operation/aws-monitoring/

さらに、CloudWatchからのアラートが発生した際に、SNSサービスと連携して個人のGmailアドレスに通知を送信するところまでを検証のゴールとします。

image.png
引用画像:https://itsakura.com/aws-cloudwatch-sns

1. Apacheのインストールと設定(省略)

ここでは、Apache Webサーバーのインストール手順やHTTPSの設定は省略します。HTTPSを提供する状態のApacheがEC2上で動作している前提で進めます。

image.png

過去の記事で、EC2インスタンスに対するApacheのインストールと設定について説明していますので、参考にしてください。

ここでは、Apacheのデフォルトのテストページが表示されていることを確認済みとし、後続の検証に進みます。

image.png

EC2インスタンスに必要なロールの追加

CloudWatchエージェントを正しく機能させるためには、EC2インスタンスに以下のIAMロールを追加する必要があります。このロールは、CloudWatchへのメトリクスデータの送信や取得を許可します。

以下は、必要なIAMロールのポリシーの例です。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudwatch:PutMetricData",
                "cloudwatch:GetMetricStatistics",
                "cloudwatch:ListMetrics"
            ],
            "Resource": "*"
        }
    ]
}

このポリシーを持つIAMロールを作成し、対象のEC2インスタンスにアタッチしてください。

これにより、CloudWatchエージェントが必要なメトリクスデータを収集し、アラームを正常に設定できるようになります。

2. CloudWatchエージェントのインストール

EC2インスタンスにSSHでログインし、CloudWatchエージェントをインストールします。

Amazon Linux 2の場合:

sudo yum install amazon-cloudwatch-agent

Ubuntuの場合:

sudo apt-get update
sudo apt-get install amazon-cloudwatch-agent

次に、CloudWatchエージェントを起動します。

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a start

psコマンドを使用して、CloudWatchに関連するいくつかのプロセスが正常に起動していることを確認します。

image.png

3. CloudWatchエージェントの設定ファイルを作成

次に、CloudWatchエージェントの設定ファイルを作成します。

ここでは、ApacheのHTTPのプロセスを監視対象とします。

対象サーバーにログインし、設定ファイルを手動で作成します。

cd /opt/aws/amazon-cloudwatch-agent/etc/
vi amazon-cloudwatch-agent.json

/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.jsonに設定ファイルを新規作成します。

amazon-cloudwatch-agent.json
{
    "metrics": {
        "metrics_collected": {
            "procstat": [
                {
                    "exe": "httpd",
                    "measurement": [
                        "pid_count"
                    ],
                    "metrics_collection_interval": 60
                }
            ]
        }
    }
}

この設定では、Apache(httpd)のプロセスが正しく動作しているかを確認し、TCP 80ポート(HTTP)がリッスンしているかを監視します。

cwagentについては、これを機に少し学習を深めたので、以下のサイトを参考にしてみてください。

設定ファイルを変更したら、CloudWatchエージェントを再起動して新しい設定を反映させます。

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a stop
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a start
sudo systemctl restart amazon-cloudwatch-agent

また、上記で作成した設定ファイルを読み込ませます。これで完了です。

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json -s

4. ApacheのHTTPポート監視

CloudWatchエージェントでApacheのプロセスやポート監視を設定したので、次に、HTTPサービスが応答しない場合にアラートを設定します。

image.png

CloudWatchダッシュボードに移動し、メトリクスから「CWAgent」を選択し、適切なインスタンスIDを選びます。

image.png

「netstat」メトリクスの中から、tcp_listenを選択し、80番ポートがリッスンしているかを確認します。メトリクスに基づき、以下の条件でアラームを作成します。

5. CloudWatchアラームの作成

CloudWatchエージェントによって収集されたメトリクスを使用して、アラームを作成します。

具体的には、Apacheのプロセスが停止した場合やHTTPSポートが応答しない場合にアラートを発生させるための設定を行います。

AWS Management Consoleにログインし、CloudWatchサービスに移動します。

image.png

「CWAgent」メトリクスを選択し、「procstat」セクションから「httpd」プロセスのメトリクス(例:pid_count)を選択します。

image.png

アラームの条件を設定します。たとえば、pid_countが0のときにアラートを発生させるように、「静的な値」を選択し、0以下に設定します。

image.png

アラームが発生した際に通知を受け取るためのSNSトピックを選択します。SNSトピックが未作成の場合は、新しく作成します。

ここでは、私のGmailのアドレスに通知を送るように設定しています。

image.png

アラームの名前や説明を設定します。例:「Apache HTTPS Service Down Alert」。

image.png

設定を確認し、「アラームの作成」をクリックします。

image.png

これで、ApacheのHTTPSサービスが停止した際にアラートが発生する設定が完了しました。

アラート通知先に登録したメールアドレス宛に以下のようなメールが届くと思いますので、「Confirm subscription」を押下してください。

image.png

SNSのサービス画面にて、以下のように「確認済み」となっていることが分かりました。

image.png

検証確認

ここまでの設定が完了したので、以下のコマンドで実際に「httpd」のサービスを停止します。

[ec2-user@ip-10-0-14-203 ~]$ sudo systemctl stop httpd
[ec2-user@ip-10-0-14-203 ~]$ ps -ef | grep httpd
ec2-user  4804  4766  0 00:49 pts/0    00:00:00 grep --color=auto httpd

CloudWatchのサービス画面からも実際にアラーム状態になっていることが確認できました。

image.png

CloudWatchエージェントを使用して、ApacheのHTTPサービス監視を設定しました。

image.png

実際にサービスがダウンした際にアラートが発生し、メール通知が届くことを確認できましたので、今回の検証も大成功ですね!

まとめ

本記事では、CloudWatchエージェントを使用してApacheのHTTPサービスを監視し、停止時にアラートを発生させる手順を紹介しました。

CloudWatchエージェントを使うことで、プロセスやポートの状態を監視し、異常を検知した際に即座に通知を受け取ることができます。

この設定により、サービスダウン時の迅速な対応が可能になり、システムの可用性を高めることができます。

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?