0
0

164日目 CloudWatchでEC2ログの管理したい(2/2) 社畜L

Last updated at Posted at 2024-09-30

🔍前回のおさらい

前回はEC2のログをクラウドウォッチで管理できるように設定しました。
CloudWatchでEC2ログの管理したい(1/2) 社畜L

今回はさらに使いやすくしていくにはどうすればいいか解説します。
CloudWatchの設定はわかりやすいようにCloudFormation用のymlで説明します。

🔍やりたいたこと

    • CloudWatchエージェントをインストールする
    • CloudWatchエージェントのJSONはSSMパラメータストアで管理しロードしたい
    • JSONの読み込みは初回のみ手動で今後はEC2再起動のみでSSMパラメータストアを読み込むようにしたい
    • ログ追加時に通知メールが欲しい

🔍事前準備

CloudWatchでEC2ログの管理したい(1/2) 社畜L の続きです

  1. CloudWatchの設定をパラメータストアで管理している
  2. AmazonSNSからの通知を受け取るためのメールアドレス

の準備を前提としています。

🔍作業手順

JSONの読み込みは初回のみ手動で今後はEC2再起動のみでSSMパラメータストアを読み込むようにしたい

systemdユニットファイル作成

※SSM内にCloudWatchエージェントの設定ファイルの保存が必要、内容は前回を参照

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

  2. 設定ファイル読み込み
    systemctl daemon-reload
    systemctl enable fetch-cloudwatch-config.service
    

ログ追加時に通知メールが欲しい

AmazonSNSの準備

  1. トピックの作成
    任意の名前で作成する
    スクリーンショット 2024-09-25 153503.png
    スクリーンショット 2024-09-25 153512.png


  2. サブスクリプションの作成(メールアドレスの登録)
    作成したトピックを開くと画面下部にサブスクリプションの作成という項目があるので、作成を押す

    image.png

    トピックARNには先ほど作成したトピックを指定し、
    プロトコルはEメールを指定する
    エンドポイントに通知用のメールアドレスを設定する

    サブスクリプションに複数のメールアドレスを登録することで、
    登録されているすべてのメールアドレスに通知されます。

    image.png

CloudWatchアラーム設定(CloudFormation)

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

  2. 必要箇所修正

    • AlarmDescription
      アラームのコメント、SNSに通知される
    • Period
      監視タイミング、現在の設定では60秒おきにチェックを行う
    • MetricName
      カスタムメトリクス名、任意の名前でよい
    • Namespace
      ネームスペース名、任意の名前でよい
    • FilterPattern
      監視フィルタ、設定するとマッチした文字列を含むエラー時にのみ通知される

  3. 実行
    CloudFormationを開きスタックの作成を行う
    image.png

    テンプレートの指定で、テンプレートファイルのアップロードを選択し、ファイルの選択を押し、先ほど保存した.yml指定する
    指定後は内容を触らず右下の、[次へ] [送信]と押すことでリソースが作成される
    image.png

    パラメータの設定を行う、
    SNSarnの箇所にはSNSトピック内で確認できるARNを入力する
    LogNameの箇所には監視予定のロググループ名を記載する
    そのほかの項目は任意
    スクリーンショット 2024-09-25 163405.png

🔍まとめ

今回はSNSの設定とCloudWatchの設定を中心に行いました。
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