2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

4xx Client Error (クライアントエラー)をCloudWatchLogsで検知してメール送信する

Last updated at Posted at 2022-02-11

#初めに
CloudWatch Logsにて、特定のエラーログを取得したいケースは多いかと思います。
今回はWebサーバにて4xx台のレスポンスが返ってきた際に、CloudWatch Logsで検知してメール送信するための方法を備忘録として纏めていきたいと思います。

#前提
・事前にEC2(Amazon Linux 2)を作成済み
・EC2にnginxをインストール済み

#実装
###①CloudWatch Logsエージェントの設定
EC2にログインし、CloudWatch Logsエージェントをインストールします。

# yum install -y awslogs

次にCloudWatch Logsエージェントが出力する先のリージョンを指定します。
/etc/awslogs/awscli.confに設定されているリージョンを、デフォルトのus-east-1からap-northeast-1に変更します。

awscli.conf
[plugins]
cwlogs = cwlogs
[default]
region = ap-northeast-1

続いてCloudWatch Logsエージェントの設定ファイルである/etc/awslogs/awslogs.confの設定を行います。
今回はnginxのaccess.logに出力されるログを収集する必要があるので、その設定を行います。
以下設定値を、ファイルの末尾に追記します。

awslogs.conf
~~~省略~~~

[Nginx_AccessLog]
log_group_name = /var/log/nginx/access.log
log_stream_name = {instance_id}_accesslog
file = /var/log/nginx/access.log
datetime_format = %b %d %H:%M:%S
initial_positon = start_of_file
buffer_duration = 5000

最後にCloudWatch Logsエージェントの起動を行います。
systemctlでstartを行い、status確認でエラー無く起動されていれば、エージェントの設定は完了です。

# systemctl start awslogsd
# systemctl status awslogsd
● awslogsd.service - awslogs daemon
   Loaded: loaded (/usr/lib/systemd/system/awslogsd.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2022-02-11 11:35:42 UTC; 22s ago
 Main PID: 3895 (aws)
   CGroup: /system.slice/awslogsd.service
           mq3895 /usr/bin/python2 -s /usr/bin/aws logs push --config-file /e...

Feb 11 11:35:42 ip-10-0-0-219.ap-northeast-1.compute.internal systemd[1]: Sta...
Hint: Some lines were ellipsized, use -l to show in full.

###②IAMロールの割り当て
続いてCloudWatch LogsエージェントがCloudWatch Logsにログを連携可能とするための権限割り当てを行っていきます。
IAMロールの作成画面にて[一般的なユースケース]から[EC2]を選択し、[次へ]をクリックします。
WS000072.JPG

許可ポリシーの設定画面にて、[CloudWatchLogsFullAccess]ポリシーを選択し、[次へ]をクリックします。
WS000005.JPG

ロール名を入力し、画面下部の[ロールの作成]をクリックします。
(今回は「nginx-Access-Log-Policy」という名前にしました)
WS000006.JPG

[ロール nginx-Access-Log が作成されました]と出力されれば、作成は成功です。
WS000007.JPG

あとはこのロールを、CloudWatch Logsエージェントをインストールしたインスタンスにアタッチします。
EC2のコンソール画面から対象EC2を選択し、[アクション]>[セキュリティ]>[IAMロールを変更]をクリックし、アタッチを行います。
WS000008.JPG

これにより、CloudWatch Logsのロググループに今回設定したロググループが表示されるようになります。
WS000011.JPG

###③メトリクスフィルターの設定
nginxのアクセスログをCloudWatch Logsで取得するところまでは出来たので、今回の対象のエラーコードである4xxのみをフィルターする設定を行っていきます。

CloudWatch Logsの画面から、作成した「/var/log/nginx/access.log」のロググループを選択し、「メトリクスフィルターを作成」をクリックします。
WS000013.JPG

フィルターパターン[host, logName, user, timestamp, request, statusCode=4*, size]を指定し、[Next]をクリックします。
WS000014.JPG

フィルター名、メトリクス名前空間、メトリクス名、メトリクス値、デフォルト値をそれぞれ入力し、画面下部の[Next]をクリックします。
WS000016.JPG

設定内容を確認し、[メトリクスフィルターを作成]をクリックします。
WS000018.JPG

メトリクスフィルター画面で、作成したメトリクスフィルターが表示されていれば設定は完了です。
WS000019.JPG

###④CloudWatch Alarmの作成
最後に、フィルターして拾ってきたログをメールに通知するための設定を行います。
CloudWatch Logsの画面から、[アラームの作成]をクリックします。
WS000020.JPG

[メトリクスの選択]>[③で設定した名前空間]>[ディメンションなしのメトリクス]をクリックし、作成したメトリクスフィルターにチェックを入れます。
そして[メトリクスの選択]をクリックします。
WS000040.JPG

次にメトリクスの条件を指定します。
今回はメトリクス名を「Nginx-4xx-Error-Metrics」とし、1分間の間に1回以上の4xxエラーを検知した場合にトリガーされるように設定します。
そして画面下部の[次へ]をクリックします。
WS000039.JPG

続いてアクションの設定を行います。
アラーム状態トリガーは[アラーム状態]を選択します。
そして今回は「nginx-4xx-Topic」という名前のSNSトピックを新たに作成してアラームの送信先のEメールエンドポイントを設定し、画面下部の[次へ]をクリックします。
WS000024.JPG

アラーム名を入力し、[次へ]をクリックします。
(今回は「nginx-4xxError-Alarm」としました)
WS000025.JPG

プレビューにて設定を確認し、問題なければ[アラームの作成]をクリックします。
WS000027.JPG

「アラームnginx-4xxError-Alarmが正常に作成されました。」と表示されれば、作成は完了です。
WS000028.JPG

また、アクションの設定で作成したSNSトピックの送信先のメールアドレス宛にサブスクリプションを承認するためのメールが届いているので、Confirmを行います。
WS000030.JPG

Confirmされると以下のメッセージが表示されます。
これにて全ての設定は完了になります。
WS000031.JPG

#検証
作成したEC2のパブリック IPv4 DNSをブラウザのアドレスバーに入力し、存在しないページを末尾に追加して404エラーを意図的に発生させてみます。
WS000035.JPG

暫くすると、404エラーを通知するメールがちゃんと届くことを確認できました。
WS000041.JPG

#最後に
以上、今回は4xx Client Error (クライアントエラー)をCloudWatchLogsで検知してメール送信する方法を纏めてみました。
こんなにシンプルにエラーログの通知が行えるは凄いですね。

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?