🔍前回のおさらい
前回はEC2のログをクラウドウォッチで管理できるように設定しました。
CloudWatchでEC2ログの管理したい(1/2) 社畜L
今回はさらに使いやすくしていくにはどうすればいいか解説します。
CloudWatchの設定はわかりやすいようにCloudFormation用のymlで説明します。
🔍やりたいたこと
-
- CloudWatchエージェントをインストールする
-
- CloudWatchエージェントのJSONはSSMパラメータストアで管理しロードしたい
-
- JSONの読み込みは初回のみ手動で今後はEC2再起動のみでSSMパラメータストアを読み込むようにしたい
-
- ログ追加時に通知メールが欲しい
🔍事前準備
CloudWatchでEC2ログの管理したい(1/2) 社畜L の続きです
- CloudWatchの設定をパラメータストアで管理している
- AmazonSNSからの通知を受け取るためのメールアドレス
の準備を前提としています。
🔍作業手順
JSONの読み込みは初回のみ手動で今後はEC2再起動のみでSSMパラメータストアを読み込むようにしたい
systemdユニットファイル作成
※SSM内にCloudWatchエージェントの設定ファイルの保存が必要、内容は前回を参照
- EC2起動時コマンドを作成
sudo vi /etc/systemd/system/fetch-cloudwatch-config.service
[Unit] Description=Fetch CloudWatch Agent config from SSM After=network.target [Service] Type=oneshot ExecStart=/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c ssm:[SSM名] -s RemainAfterExit=true [Install] WantedBy=multi-user.target
- 設定ファイル読み込み
systemctl daemon-reload systemctl enable fetch-cloudwatch-config.service
ログ追加時に通知メールが欲しい
AmazonSNSの準備
-
-
サブスクリプションの作成(メールアドレスの登録)
作成したトピックを開くと画面下部にサブスクリプションの作成という項目があるので、作成を押すトピックARNには先ほど作成したトピックを指定し、
プロトコルはEメールを指定する
エンドポイントに通知用のメールアドレスを設定する※サブスクリプションに複数のメールアドレスを登録することで、
登録されているすべてのメールアドレスに通知されます。
CloudWatchアラーム設定(CloudFormation)
-
CloudFormation用のymlを作成
手動でも構いませんが下記の内容を[.yml]の形式で保存してください#バージョン指定 AWSTemplateFormatVersion: "2010-09-09" #スタックの説明(コメント) Description: Create_Metrics_Alarm #パラメータ Parameters: #Environment Environment: Type: String AllowedValues: - development - staging - production #SNS SNSarn: Type: String Description: SNS_arn #Name AlarmName: Type: String LogName: Type: String #リソースの定義 Resources: # Log Filter LaravelLogFilter: Type: AWS::Logs::MetricFilter Properties: FilterPattern: "" LogGroupName: !Ref LogName MetricTransformations: - MetricValue: "1" MetricNamespace: log-Namespace MetricName: log-Metric # Alarm LogAlarm: Type: AWS::CloudWatch::Alarm Properties: AlarmDescription: "アラームを確認してください。" AlarmName: !Ref AlarmName AlarmActions: - !Ref SNSarn ComparisonOperator: GreaterThanOrEqualToThreshold Threshold: 1 DatapointsToAlarm: 1 EvaluationPeriods: 1 MetricName: log-Metric Namespace: log-Namespace TreatMissingData: notBreaching # 1minutes Period: 60 Statistic: Average Tags: - Key: Environment Value: !Ref Environment
-
必要箇所修正
- AlarmDescription
アラームのコメント、SNSに通知される - Period
監視タイミング、現在の設定では60秒おきにチェックを行う - MetricName
カスタムメトリクス名、任意の名前でよい - Namespace
ネームスペース名、任意の名前でよい - FilterPattern
監視フィルタ、設定するとマッチした文字列を含むエラー時にのみ通知される
- AlarmDescription
-
実行
CloudFormationを開きスタックの作成を行う
テンプレートの指定で、テンプレートファイルのアップロードを選択し、ファイルの選択を押し、先ほど保存した.yml指定する
指定後は内容を触らず右下の、[次へ] [送信]と押すことでリソースが作成される
パラメータの設定を行う、
SNSarnの箇所にはSNSトピック内で確認できるARNを入力する
LogNameの箇所には監視予定のロググループ名を記載する
そのほかの項目は任意
🔍まとめ
今回はSNSの設定とCloudWatchの設定を中心に行いました。
CloudWatchの設定に悩んでいる方の解決に役立てば幸いです。