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

More than 1 year has passed since last update.

CloudWatch Agentでのログ監視

Posted at

はじめに

CloudWatch Agentを使用してログを収集し、エラーが発生した場合には通知を行いたいというユースケースが以前にもあって、やり方を忘れかけていたので備忘録として記事に残そうと思います。(最近AWSに触れていなかったせいもあり。。)
この記事では、EC2上のサンプルログをCloudWatch Logsに収集し、SNSを使用してエラーが発生した場合にメールを送信する方法を記載します。

手順

画像挿入

主に以下のような手順で実施していきます。

  1. EC2インスタンスにCloudWatch Agentをインストールし、設定ファイルを作成。
  2. CloudWatch Logsにロググループを作成し、設定ファイルで指定したログストリームにログを送信するように設定。
  3. SNSトピックを作成し、通知先のメールアドレスを設定。
  4. CloudWatch Alarmを設定し、SNSトピックを通知先に設定。

EC2インスタンスの設定

IAM Roleの作成

まずはじめにEC2インスタンスからCloudWatchにログを収集するためのRoleを作成する必要があります。「CloudWatchAgentServerPolicy」をアタッチしたRoleを作成します。IAMコンソール上から作成可能なので細かい手順は飛ばします。
以下のようなRoleができればOKです。
スクリーンショット 2023-04-26 15.57.20.png

CloudWatch Agentのインストールと設定ファイルの作成

今回はamazon linuxのインスタンスを利用しますので手順は別OSを利用する場合はインストール方などは異なりますが、ドキュメントに記載してあるのでそれ通り行えば問題ないです。

CloudWatch Agentのインストール

以下のコマンドでインストールを行います。

  $ sudo yum install amazon-cloudwatch-agent -y
設定ファイルの作成

今回はsample.log、sample_2.log(自分で作成した)の2つを同じSampleグループになるように設定しました。シスログを送ろうとしたのですが、amazon linux2023ではsystemd-journaldで管理しているぽいので/var/log/messagesなどがなかったです。。今回の目的とはずれてしまうので適当なlogを指定して試すことにしました。

  {
      "logs": {
        "logs_collected": {
          "files": {
            "collect_list": [
              {
                "file_path": "/home/ec2-user/sample.log",
                "log_group_name": "Sample",
                "log_stream_name": "sample.log",
                "timezone": "UTC"
              },
              {
                "file_path": "/home/ec2-user/sample_2.log",
                "log_group_name": "Sample",
                "log_stream_name": "sample_2.log",
                "timezone": "UTC"
              }
            ]
          } 
        },
        "log_stream_name": "sample"
      }
}

起動

上記で作成したjsonファイルを指定してCloudWatch Agentを起動します。

$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:configuration-file-path
$ sudo sysytemctl status amazon-cloudwatch-agent

CloudWatch上にロググループが作成されているかの確認

CloudWatchコンソール上でロググループが作成されログが収集できたかの確認を行います。
スクリーンショット 2023-04-26 18.23.50.png

スクリーンショット 2023-04-26 18.24.12.png

どうやら無事にログを収集できたようです。

SNSの設定

トピックの作成

下記画像のようにトピックを作成します。(動作確認したいだけなのでオプションは基本的にデフォルトにしました。)
スクリーンショット 2023-04-26 18.32.09.png

サブスクリプションの作成

今回のケースはEmailで通知を行いたいのでプロトコルはEメールを選択します。エンドポイントに送信あてのメールアドレスを記載し、作成します。
スクリーンショット 2023-04-26 18.35.33.png

※サブスクリプション作成後にメールが届くのでメール内の「Confirm subscription」リンクを押すことで正式に登録されます。

CloudWatch Alarmの設定

メトリクスフィルターの作成

今回はsample.logにERROR文字列が書き込まれた際に通知が来る設定にします。
スクリーンショット 2023-04-26 18.40.44.png
スクリーンショット 2023-04-26 18.41.26.png
スクリーンショット 2023-04-26 18.42.49.png
スクリーンショット 2023-04-26 18.43.00.png

アラームの作成

最後にアラームの作成を行います。ERROR文字列が1つでもあればアラームが発生するように設定します。通知先は先程作成したSNSトピックを設定し、完了です。
スクリーンショット 2023-04-26 18.46.15.png
スクリーンショット 2023-04-26 18.46.31.png

メールの確認

今回はsample.logという自身で作成したlogファイルを元に行っているので、こちらのファイルに適当にERRORと記載して実際にアラーム状態となり、SNSからメールが届くかの確認を行います。
スクリーンショット 2023-04-26 19.05.22.png

 スクリーンショット 2023-04-27 12.03.15.png

無事にメールが届きました。

まとめ

メールに細かいエラーの内容を表示させたいとかそういう要件がある場合はlambdaを使ったりしないとだめですが、エラーを通知するだけなら簡単にできそうです。

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