LoginSignup
4
3

More than 1 year has passed since last update.

【AWS】CloudWatchでログ監視し、アラーム状態となったらメール送信を行う

Last updated at Posted at 2021-11-18

■はじめに

CloudWatch、SNSトピックを利用してログに特定文字列が出力されたらアラーム発報し、メールを送信するところまで試しに構築してみたので手順をまとめました。

■対象者

本記事はAWS初学者向けの情報共有として構築手順をまとめています。
また、自分用の手順メモでもあります。

■構成図

image.png

  • EC2からCloudWatch logsへ/var/log/messagesを送信し監視対象とする。
  • CloudWatchは"ERROR"文字列を検知した場合、アラーム発報する。
  • アラーム発報すると関連付けられたSNSトピックは指定の宛先にメール通知を行う。

■作業内容

大まかに以下。

  1. EC2にCloudWatchエージェントのインストール
  2. EC2にCloudWatch logsへログを送信するための権限を付与
  3. CloudWatchメトリクス作成
  4. CloudWatchアラーム作成
  5. 検知、メール送信テスト

■作業手順詳細

1. EC2にCloudWatchエージェントのインストール

【インストール】

1-1. EC2にteratermなどでログインし、以下コマンドを実行

$ sudo yum install awslogs

image.png

Is this ok[y/d/N]
良いか聞かれるので y で Enter

インストール完了。

1-2. 以下コマンドでファイル群確認

$ cd /etc/awslogs

awscli.conf, awslogs.conf, config, proxy.confがあること
image.png

【awscli.conf編集】

1-3. 以下コマンドでawscli.conf編集

# vi awscli.conf

[default]タグにregionという項目があるので、us-east-1 から ap-northeast-1 に変更する
※cloudwatchエージェントがどのリージョン(のEC2)で動作するのかを設定。今回は東京リージョン。

【awslogs.conf編集】

awslogs.confはどのようなログをCloudWatchに送るかとその方法を指定する
変更を加えた場合はCloudWatchエージェントの再起動が必要
デフォルトで/var/log/messagesの記述があるので今回は編集しない。

image.png

項目 説明
datetime_fomat 日時のフォーマット指定
file どのファイルをCloudWatch logsに送るか指定
buffer_duration 送信間隔をミリ秒で指定 もしくは32kbite出力で送信
log_stream_name どのインスタンスのログかラベルをつけて表示する。 {instance_id}でインスタンスIDの変数が表示される
initial_position start_of_fileでログの上から読み、end_of_fileでログの下から読む
log_group_name マネジメントコンソールに表示される名称を指定

1-4. 以下コマンドでサービス自動起動設定する

# systemctl enable awslogsd

1-5. 以下コマンドを実行し、awslogsdを起動

# systemctl start awslogsd

2. EC2にCloudWatch logsへログを送信するための権限を付与

【IAMロール作成】

ロールをアタッチしないとログを送信できないので、ロールの作成、アタッチをする

2-1. マネジメントコンソールでIAMを開く

2-2. IAM 左ペイン ロールを選択し、「ロールの作成」押下

2-3. ユースケースの選択 - EC2 を選択し、次のステップへ

image.png

2-4. ポリシーの作成の検索窓で「CloudWatchAgentServerPolicy」と入力し、表示されたものを選択して次のステップ

image.png

2-5. タグの作成は任意。次のステップへ

2-6. 確認画面のロール名とロールの説明は「CloudWatchAgentServerPolicy」と入力し、ロールの作成を押下
image.png

【IAMロールアタッチ】

2-7. EC2画面で EC2を選択 - アクション - セキュリティ - IAMロールを変更を選択

image.png

2-8. IAMロールに「CloudWatchAgentServerPolicy」と入力し、保存を選択

image.png

CloudWatch画面 - ロググループに ロググループ名「/var/log/messages」が表示される

image.png

また、そのロググループ名「/var/log/messages」を選択 - ログストリームタブをみると
ログストリーム名はEC2のインスタンスIDとなっている。
image.png

awslogs.confのlog_stream_nameとlog_group_nameはここの表示名を指定している。


【補足 ログの保持期間】
ロググループのカラムに「保持」というものがある。
image.png

これはロググループのログの保持期間。デフォルトでは期限なしで明示的に削除しないと保持される。
アクション - 保持設定を編集で変更可能
image.png


3. CloudWatchメトリクス作成

【ログ メトリクスフィルター作成】

3-1. CloudWatch画面でロググループにチェックを入れ、アクション - メトリクスフィルターを作成を押下

image.png

3-2. 「パターンを定義」画面
フィルターパターンに ERROR と入力し、Next押下
※フィルターパターンには検知文字列を入力する

image.png

3-3. 「メトリクスの割り当て」画面

・フィルター名を作成

項目名 入力値
フィルター名 test_messages_error

・メトリクスの詳細

項目名 説明
メトリクスの名前空間 test_messages_name_space 後述の「メトリクス」画面での表示名
メトリクス名 test_messages_name 後述の「メトリクス」画面での表示名
メトリクス値 1 検知した場合にカウントアップする数値
デフォルト値 未入力 検知していない期間中の値

image.png

「保存」押下

3-4. CloudWatch - メトリクス - すべてのメトリクスを選択

先ほど作成したメトリクス名前空間、メトリクス名が存在する
image.png

image.png

4. CloudWatchアラーム作成

【メトリクスの指定と監視条件設定】

4-1. CloudWatch - アラーム - すべてのアラームを選択 - 「アラームの作成」押下

4-2. 「メトリクスと条件の指定」画面
「メトリクスの選択」押下

image.png

4-3. 「メトリクスの選択」画面
カスタム名前空間 test_messages_name_space - ディメンションなしのメトリクス - メトリクス名 test_messages_name にチェックを入れ、「メトリクスの選択」押下

4-4. 「メトリクス」画面

・グラフ

項目 入力値
統計 合計
期間 1分

image.png

・条件

項目 入力値
しきい値の種類 静的
xxxが次の時 より大きい
xxxよりも 5

1分で 6回 ERROR検出したら発報という設定
image.png

4-5. 「アクションの設定」画面

・通知

項目 入力値
アラーム状態トリガー アラーム状態
SNSトピックの選択 既存のSNSトピックを選択 ※なければ新しいトピックの作成を選択
通知の送信先 任意のアドレス

4-6. 「名前と説明を追加」画面

・名前と説明

項目 入力値
アラーム名 test_message_alarm
アラームの説明 test_message_alarm

4-7. 「プレビューと作成」画面

「アラームの作成」押下


【補足 SNSトピック新規作成】
新規作成した場合、以下のようなメッセージが出る。
トピック作成時に登録したアドレスに確認メールが送られるので Confirm subscriptionを選択すればよい

image.png


5. 検知、メール送信テスト

【コマンド実行、メール受信確認】

5-1. EC2にログインし、以下コマンド実行

# logger "ERROR"

※閾値が 「5より大きい」なので、6回以上実行

5-2. アラーム状態が変化し、メールが送信されることを確認

image.png


【補足 意図的にログに出力する方法】
以下の方法でも可能
1. CloudWatch - ロググループ - /var/log/messages を押下

  1. ログストリームタブのIDを押下

  2. アクション - ログイベントの作成 押下
    image.png

  3. 文字列を入力し「作成」押下
    image.png



【補足 時刻表示の変更】
CloudWatchの各画面の時刻表示がUTCとなっている
image.png

image.png
※実行したのは夜だが昼間の時間になっている
 
◎ログの時刻表示変更
1.EC2にログインし以下を実行する。

# ln -sf  /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# vi /etc/sysconfig/clock

ZONE="UTC" を ZONE="Asia/Tokyo" に変更

※/usr/share/zoneinfo にある国に変更可能
image.png

 
◎グラフの時刻表示の変更
1.以下を選択
image.png
 
2.右上 Local time zone を選択し、時間に表示したい時刻に変更
image.png


以上

■おわりに


この記事はAWS初学者を導く体系的な動画学習サービス
「CloudTech」の課題カリキュラムで作成しました。
https://aws-cloud-tech.com


4
3
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
4
3