🦁

【初心者向け】Amazon CloudWatch 入門!完全ガイド

2023/06/05に公開

CloudWatch

☘️ はじめに

本ページは、AWS に関する個人の勉強および勉強会で使用することを目的に、AWS ドキュメントなどを参照し作成しておりますが、記載の誤り等が含まれる場合がございます。

最新の情報については、AWS 公式ドキュメントをご参照ください。

👀 Contents

CloudWatch とは

モニタリングに関する様々な機能を提供するサービスです。

【AWS Black Belt Online Seminar】Amazon CloudWatch(YouTube)(47:14)

blackbelt-cw1

Amazon CloudWatch の概要と基本【AWS Black Belt】(YouTube)(1:00:43)

blackbelt-cw2

Amazon CloudWatch Synthetics【AWS Black Belt】(YouTube)(39:18)

blackbelt-Synthetics

CloudWatch サービス概要

CloudWatch ドキュメント

CloudWatch よくある質問

CloudWatch の料金

オブザーバビリティ(Observability)とは

「可観測性」といい、システムの外部から、システム内部の状態が推測・把握できるかという意味です。

システムの状態把握に必要なものと、それに対応する AWS サービスは次のとおりです。

  • ログ  ⇒ CloudWatch Logs
  • メトリクス  ⇒ CloudWatch Metrics
  • トレース  ⇒ X-Ray

CloudWatch Metrics

メトリクスを収集し、統計を取得

  • 名前空間>ディメンション>メトリクス
  • 次の統計が使用可能
    • Minimum
    • Maximum
    • Sum
    • Average
    • SampleCount
    • パーセンタイル

CloudWatch Metric Math

Metric Math を使用する

メトリクスに数式を使用して新しいメトリクスを作成できます

コンソールで、CloudWatch メトリクスを表示している状態で、[数式の追加]を選択します。

CloudWatchMetricMath1

既に表示しているメトリクスの Id 列の文字列を使うことで、演算が可能です。単純な四則演算や、SUM や AVG といった集計も利用できます。

CloudWatchMetricMath2

ここで作成した数式使ってアラームを作成することができます。

CloudWatchMetricMath3

CloudWatch Metric Streams

メトリクスストリームの使用

ほぼリアルタイムにメトリクスを Kinesis 経由で送信するサービスです。
AWS サービスはもちろん、New Relic や Datadog のような外部の SaaS 、HTTP エンドポイントと連携できます。

設定は、コンソールから メトリクス>ストリーム を選択し、[メトリクスストリームの作成]から作成できます。

CloudWatchMetricStreams1

CloudWatchMetricStreams2

CloudWatchMetricStreams3

CloudWatch Alarms

CloudWatchAlarm

CloudWatchAlarm1

メトリクスを監視し、敷居値を超えた場合にアクションを実行できます。
アクションには、SNS のトピックや Lambda を呼び出すなどができます

2つ以上のアラームを組み合わせた 複合アラーム も設定できます。

ALARM(CPUUtilizationTooHigh) AND ALARM(DiskReadOpsTooHigh)

アラームをテストするには、AWS CLI の aws cloudwatch set-alarm-state を利用してステータスを強制的に変更し アラームを実行させる方法があります。
ほかには、すぐにアラームが実行されるような敷居値にする、という方法もありますが、値を変更しないでテストできる set-alarm-state のほうがいいでしょう。

CloudWatch Logs

ログを集約できるサービスです。ロググループ>ログストリーム という形式で格納されます。
ロググループ単位で保存期間を任意に設定することで、コスト削減できます。

サブスクリプションフィルターを使うことで、ログから任意の文字(ERROR など)を検知し、処理(kinesis や Lmabda に連携)を行うできます。

kinesis と連携することでログを S3 に転送することもできます
CloudWatch Logs サブスクリプションフィルターの使用

CloudWatch エージェント

CloudWatch エージェントを使用して Amazon EC2 インスタンスとオンプレミスサーバーからメトリクスとログを収集する

EC2 やオンプレミスサーバに CloudWatch エージェントをインストールすることで、ログファイルを CloudWatch Logs に転送したり、標準では取得できないメモリなどのメトリクスを CloudWatch に転送することができます。

エージェントは、次の方法でインストールできます

オンプレミスサーバにもエージェントをインストールし、メトリクスやログを収集することができます。オンプレミスサーバ上の ~/.aws/credentials に aws_access_key_id と aws_secret_access_key を設定します。

CloudWatch Dashboards

CloudWatchDashboards

CloudWatch にて収集したデータをグラフなどで表示するサービスです

CloudWatch Events / EventBridge

現在は、拡張された Amazon EventBridge を利用します
時間や、他のリソースなど、イベント駆動アーキテクチャを実現するためのサービスです

CloudWatch Metrics Insights

CloudWatch Metrics Insights を使用してメトリクスをクエリする

CloudWatchMetricsInsights

Metric Math を使うことで、四則演算、最大最小などを求めることはできますが、式が複雑になりがちです。

Metrics Insights を使うことで、SQL によるメトリクスの集計が可能になります。次のような構文で分析を行うことができます。

SELECT FUNCTION(metricName)
FROM namespace | SCHEMA(...)
[ WHERE labelKey OPERATOR labelValue [AND ... ] ]
[ GROUP BY labelKey [ , ... ] ]
[ ORDER BY FUNCTION() [ DESC | ASC ] ]
[ LIMIT number ]

SQL が書けなくてもクエリビルダーを使うことで簡単に作成することができます。

CloudWatchMetricsInsights2

CloudWatch Logs Insights

チュートリアル: サンプルクエリを実行および変更する

クエリ言語を使用して、ロググループを検索、集計できます

fields @message
  | parse @message "[*] *" as loggingType, loggingMessage
  | filter loggingType = "ERROR"
  | display loggingMessage

CloudWatchLogsInsights

CloudWatch Container Insights

CloudWatchContainerInsights

Container Insights の使用

タスクやコンテナ単位のメトリクスが、Container Insights によって取得できるようになるサービスです。

CloudWatchContainerInsights1

CloudWatchContainerInsights1

ECS コンテナのクラスター設定で 有効 にすることで利用できます。

CloudWatchContainerInsights1

[アカウント設定] を使うことで、アカウントレベルで設定を行い、アカウント内で作成される ECS クラスタに対して Container Insights を有効にすることができます。

CloudWatchContainerInsights2

収集されたメトリクスは、ECS/ContainerInsights 名前空間にあります。
Container Insights により収集されるメトリクス

CloudWatchContainerInsights3

CloudWatch Lambda Insights

Lambda Insights の使用

LambdaInsights1

サーバーレスアプリケーションの Lambda 関数ランタイムパフォーマンスメトリクスとログを収集および集計できるサービスです。

使用したい Lambda 関数の [設定>モニタリングおよび運用ツール]から、「拡張モニタリング」を ON にすることで利用できます。

LambdaInsights2

Lambda Insights によって収集されたメトリクス に記載がありますが、init_duration メトリクスが取得できるようになるので、コールドスタートの時間も分析できます。
また、memory_utilization メトリクスにより関数に割り当てられたメモリの使用率も取得することができます。

CloudWatch Contributor Insights

Contributor Insights を使用した高カーディナリティデータの分析

CloudWatchContributorInsights

CloudWatch Logs の特定箇所を抽出して、可視化することができます。
例えば、VPC フローログを CloudWatch Logs に出力している場合、サンプルルールを使用することで簡単に可視化できます。

CloudWatchContributorInsights2

CloudWatchContributorInsights3

他にも CloudWatch Logs にログを出力していれば、アプリケーションのログを分析することが可能です。

CloudWatch Application Insights

Amazon CloudWatch Application Insights

特定のリソースのメトリクスだけでなく、リソースグループという単位で Amazon EC2 インスタンスを使用するアプリケーションをまとめて監視、通知できるサービスです。

CloudWatch コンソールから、[Application Insight の使用を開始する] から設定するだけです。

CloudWatchApplicationInsights1

CloudWatchApplicationInsights2

セットアップ後、アラームも自動で作成されています。

CloudWatchApplicationInsights3

ダッシュボードでアラームを確認することができます。

CloudWatchApplicationInsights4

CloudWatch ServiceLens

CloudWatchServiceLens

様々なリソースの情報を 1 カ所に統合して可視化するサービスで、マイクロサービスなどで特に効果を発揮します。X-Ray と連携します。

CloudWatchServiceLens1

CloudWatchServiceLens2

CloudWatch Resource Health

CPU やメモリの使用率の状況を視覚的に把握することができるサービスです。管理している EC2 の台数が多い場合はカッコイイ表示ができます。

CloudWatchResourceHealth

引用元:Introducing CloudWatch Resource Health to monitor your EC2 hosts | AWS Management & Governance Blog

デフォルトではマップ表示ですが、表示形式を切り替えることができます。
(先ほどの引用画像とは異なり、EC2 が少なく、停止しているような状態では少々さみしい感じになってしまいます)

マップ表示
CloudWatchResourceHealth1

リスト表示では、EC2 コンソールと似ていますが、CPU やメモリの使用率が一覧で見られる点が異なります。

CloudWatchResourceHealth2

CloudWatch Synthetics

CloudWatchSynthetics

模擬モニターリングの使用

Web サイトや URL、REST API に対してのモニタリングを自動で実行可能なサービスで、Web サイトの死活監視も可能です。
同様の機能に、Route53 の HealthCheck がありますが、こちらよりも複雑な条件を設定することができ、実際にユーザーがアクセスするようなパラメータを再現できます。

テンプレートがあるので、簡単に作成することができます。

CloudWatchSynthetics1

失敗した場合はこのようになります。

CloudWatchSynthetics2

スクリーンショットを取得するようにしていると、このように確認することができます。

CloudWatchSynthetics2ss

成功の場合はこのようになります。

CloudWatchSynthetics5

削除する場合は、一度[中止]してから[削除]を行います。スクリーンショットなどの出力先である S3 バケットは削除されませんので、後で削除する必要があります。

CloudWatchSynthetics3

チェックした結果は、CloudWatchSynthetics 名前空間にメトリクスがあるので、アラームを設定することもできます。

CloudWatchSynthetics4

CloudWatch Evidently

CloudWatchEvidently

機能フラグ(フィーチャーフラグ:Feature Flag)と A/B テストが実施できるサービスです。

機能フラグとは、「コードを書き換えることなく動的にシステムの振る舞いを変更できる」開発手法です。

たとえば、DB のエンドポイントを渡すことで動的に切り替える、特定のユーザーやある割合のユーザーのみに機能を公開し、徐々に割合を増やしていくといったケースで使われます。

CloudWatchEvidently1

CloudWatchEvidently2

CloudWatchEvidently3

CloudWatch Real-User Monitoring (RUM)

CloudWatchRUM

CloudWatch RUM を使用する

JavaScript のコードスニペットをクライアントアプリに埋め込んでデータを収集し、ダッシュボードで可視化できます。

サイト訪問者の地域やブラウザ、動線を統計分析してくれる機能です。

CloudWatch Anomaly Detection

CloudWatch 異常検出の使用

CloudWatch メトリクス上の異常値を自動検出ができるサービスです。

CloudWatch アラームを作成するときに、適正な閾値を設定するのは容易ではありません。平日・休日、日中・夜間、キャンペーン時期などなど、考慮することが多いです。

そのようなときに、利用するのが本サービスです。機械学習により異常値を自動検出できます。

CloudWatchAnomalyDetection

自動検出を有効にしたメトリクスでは、予想される範囲がグレーで表示され、異常値と判定したところが赤線になっています。

アラーム設定では、[静的]ではなく[異常値]にすることで利用できます。

CloudWatchAnomalyDetection1

異常検出に基づく CloudWatch アラームの作成

One Observability Workshop

監視系のサービスを学べるワークショップ。3~4 時間ほどで終わるが、下記構成図から分かるように様々なサービスを利用するので、ある程度の課金を覚悟して使う。

https://catalog.us-east-1.prod.workshops.aws/workshops/31676d37-bbe9-4992-9cd1-ceae13c5116c/ja-JP

One Observability Workshop

📖 まとめ

CloudWatch

GitHubで編集を提案

Discussion