CloudWatchまとめ モニタリング~異常検知/通知の自動化(SNS連携)/コスト管理

AWSの一般的なサーバレス構成における、以下の手法を解説します

  • 運用状況をCloudWatch Dashboardで可視化
  • CloudWatch Alarm メトリクスの異常値を自動検知
  • Amazon SNS連携による自動通知
  • コスト超過でSNS通知

必要な情報をCloudWatchに集める

  • 今回のターゲット
    • ユーザがコンテンツを利用する際に接する、以下のリソースの利用状況
      • CloudFront
      • WAF

Dashboardを作成

  • Console/CloudWatch/Dashboard

  • ダッシュボードの作成

    • 名称を設定(今回PJ名)
  • ウィジェットの作成

    • タイプを選択
    • CloudFront
      • 欲しい項目を選択
        image
      • ウィジェットの作成
  • 次にWAFのエラー=ソースIP外から試みたアクセスを可視化する

    • ウィジェットの追加
    • タイプを選択
    • AWS/WAFV2/Rule, WebAClから必要な項目を選択
      CloudWatchメトリクスの追加
    • ウィジェットの作成
  • 以下のようにウィジェットが表示される
    CloudFront Dashboard

  • 分かり辛いので名称を変更
    CloudFront Dashboard

  • ダッシュボードの保存

各サービスのコンソールから設定する場合

  • 例:CloudFrontのメトリクスをダッシュボードに追加
    • aws console/CloudFront
    • 左のメニューバー/Monitoringを選択
    • 作成済みのディストリビューションのラジオボタンを選択
    • View distribution metricsを押下
    • ダッシュボードに追加を押下

その他

アラームを設定

  • WAFで弾かれるリクエストが異常発生した際にSNSで通知が来るように設定
    • アラーム/アラームの作成
    • メトリクスの選択
      • AWS/WAFV2/Rule, WebACL
      • BlockedRequestを選択
    • メトリクスと条件の指定
      • 5分間に50以上弾かれていれば攻撃を受けている可能性があるのでアラートを出す
        CloudWatchアラームの作成
      • 次へ
    • アクションの設定
      • 新しいトピックの作成
        • 通知を受け取るEメールエンドポイントに、開発チームのTeamsチャンネルのメールアドレスを指定
        • トピックの追加を押下
          • この時点でテストメールが発信されます
          • ”Confirm Subscription”と書かれたリンクを押すと有効化される
      • 次へ
    • 名前と説明を追加
      名前と説明を追加
    • 次へ
    • 問題なければアラームの作成

設定したいアラーム毎に以上の作業を行えばOK


コスト追跡

  • CloudWatchの請求アラーム
    • これはアカウント全体に対する請求のアラームであり、PJ毎にコスト監視することはできない
    • PJ毎にTagでフィルタリングして監視するにBudgetsで監視する

おまけ:CloudWatch Logs

  • CloudWatch Logs
    • EC2等からエージェント経由でログを集めるサービスなので今回は不要だが、ログをExportする手法を以下にメモとして残しておきます
    • 有料にはなるが、CloudTrailの証跡へのアクセスをLogsで取り込んで、改竄発生時にアラートを出すことも可能

ログの取得まで

  • CloudWatch Logs エージェントをEC2にインストール
  • ロググループを作成~サブスクライブ設定

S3にログをエキスポート

  • 事前にログ格納用のS3バケットを作成

Export設定

  • 任意のロググループ/アクション/データをAmazon S3にエクスポート
    CloudWatch Export

  • データを Amazon S3 にエクスポート

    • 開始と終了を選択
    • S3バケットを選択
      • 事前に作成が必須
    • エクスポート

CloudWatch Export

参考

関連記事

その他

[AWS Budgets x SNS]でPJ毎の運用コストを管理/閾値超過で通知

AWSにおけるコストの管理方法についてです。総コストはCloud Watchでも見れますが、PJ単位でコスト管理するにはAWS Budgetsでタグを使ってフィルタリングする方式が適しています。

AWS Budgestとは?

  • AWS Budgets
    • カスタム予算を設定して、コストまたは使用量が予算額や予算量を超えたとき (あるいは、超えると予測されたとき) にアラートを発信できるサービス

AWS Budgets

  • コストレポートで出力して、報告にそのまま使える
    Report

PJのリソースの総コストをタグでフィルタリング

  • まずは各リソースにタグを付ける

    • PJタグを付与するルールをチーム内で設定
  • Console/ AWS Budgets

  • Cost Explorer

    • ここでコストの詳細を視覚的に確認できる
      Cost Explorer
  • データのグループ化やフィルタリングでPJ毎のリソースのコストを抽出する

    • グループ化の条件/詳細/タグから絞る
      AWS Budgets グループ化

    • データのフィルタ機能で全体から絞る
      AWS Budgets データのフィルタ

予算作成 & アラートを設定

  • AWS Budgets/予算を作成
  • 予算を作成する
    • 予算タイプ
      • コスト予算
    • 予算の設定
      • タグでPJで利用しているリソース群に絞る
        予算設定
    • アラートの設定
      • しきい値
        • 80%にしておく
      • SNS Topicを経由するか、直でメール送信か選べる
        • 今回は連絡電子メールにTeamsの開発チームのチャンネルのアドレスを設定
          AWS Budgets alart
    • 予算の確認
      • 問題なければ”作成”

以上で、コストの閾値超過時点でTeamsに通知が飛ぶように設定できた。

参考

関連記事

@EventEmitter @Input @Output @ViewChild ACM AMP API Gateway AR AR.js AR.js Studio AWS AWS Amplify AWS Budgets AWS Cost Explorer AWS SDK for JavaScript AddThis Adobe XD Alexa Amazon CloudWatch Amazon Honycode Amazon SNS Android Angular Angular Material AngularFire AppSync Augury C CDN CI/CD Cloud Craft Cloud9 CloudFormation CloudFront CloudTrail Cognito Cost Anomaly Detection Cubase ai Cubasis LE DTM Disqus DynamoDB Elgato HD 60S Firebase Firebase Hosting Former2 Github Github Actions Github.com GithubEnterprise GithubPages Google Chrome Google Cloud Shell GraphQL Hexo Hosting IAM Ionic JSON JavaScript LadioCast Logging LowCode MFA MS Authentication MacBook Pro 16 Mind Node NETDUETTO Netflix Party Netlify Network NoCode Observable PO PdM Promise RPA ReactiveForm Recognition Route53 S3 SAM(Serverless Application Model) SAR SSL SYNCROOM Schematics ScrumInc Serverless Service Siri Sitemap Spark AR Steinberg UR44C Teams Touch Cast Studio Treetable TypeScript UI UI Bakery WAF WAFv2 WEB Page Dev WEB会議 WebAR WebSocketAPI Webhook Windows Power Automate Wireshark aot async/await aws config cloud9 display.land draw.io e2e test filter() forkJoin() google search console hexo-generator-amp iOS iPad Pro iPhone icarus map() mat input mat tree mat-checkbox mat-input mat-selection-list mmhmm ngFor plantUML popIn Aladdin2 then() vscode ”global is not defined” らくがきAR アジャイル アジャイル開発 クロスプラットフォーム ショートカット スクラム スクラム開発 テレワーク ファイル操作 ブラウザ型IDE プロダクトオーナー プロダクトマネージャー プロトタイピング リモートセッション 共同開発 双方向データバインディング 待ち合わせ処理 認定スクラムマスター 静的WEB Hosting 静的WEBサイトHosting
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×