AWS再入門ブログリレー Amazon CloudWatch 編

『AWS 再入門ブログリレー 2020』 9 日目の Amazon CloudWatch の記事です。
2020.08.14

コンサル部@大阪オフィスのYui(@MayForBlue)です。

当エントリは弊社コンサルティング部による『AWS 再入門ブログリレー 2020』の 9 日目のエントリです。

このブログリレーの企画は、普段 AWS サービスについて最新のネタ・深い/細かいテーマを主に書き連ねてきたメンバーの手によって、 今一度初心に返って、基本的な部分を見つめ直してみよう、解説してみようというコンセプトが含まれています。

AWS をこれから学ぼう!という方にとっては文字通りの入門記事として、またすでに AWS を活用されている方にとっても AWS サービスの再発見や2020年のサービスアップデートのキャッチアップの場となればと考えておりますので、ぜひ最後までお付合い頂ければ幸いです。

では、さっそくいってみましょう。9日目のテーマは Amazon CloudWatch です。

Amazon CloudWatch とは

Amazon CloudWatch はAWSのリソースやアプリケーション、オンプレミスのサーバーをモニタリングするためのマネージドサービスです。
CloudWatch には監視そのものの機能以外にアラーム通知、イベント検知、可視化などの機能があります。
また、多くのAWSサービスとの統合もサポートされています。

CloudWatch 機能

CloudWatch を構成する機能について解説していきます。

CloudWatch メトリクス

メトリクスとは、システムのパフォーマンスに関するデータのことです。
CloudWatch では監視対象のリソースからメトリクスを収集することで監視を行っています。 CloudWatch メトリクスを発行する AWS のサービス

CloudWatch メトリクスでは、メトリクスはまず名前空間という単位でグループ化されます。
その中でディメンション(=名前と値)の組み合わせごとにグループ化されます。

CloudWatch Logs

CloudWatch Logs はログファイルの監視と保存を担う機能です。
AWSサービスやオンプレミスのサーバーからエージェント経由でログメッセージを CloudWatch エンドポイントに転送することでログデータの保存ができます。
ログデータは保存期間として1日〜永久保存を選択することができます。

ログイベントの保存単位

CloudWatch Logs ではまずロググループというログのグループの単位があります。 その中にログストリームというグループの単位があり、それぞれのログストリームの中にログイベントが保存されます。

ログデータのリアルタイム処理

CloudWatch Logs に保存したログデータはサブスクリプションという機能を使ってリアルタイムに処理し、他のサービスに配信することができます。 サブスクリプションを使って配信できるサービスは以下です。

  • Amazon Kinesis Data Streams
  • Amazon Kinesis Data Firehose
  • AWS Lambda

サブスクリプションはロググループ単位で最大1つ作成できます。(作成したサブスクリプションはロググループ内の全ログストリーム内のログイベントに適用されます。) どのログを転送するかを定義するためにサブスクリプションフィルタというものを作成し、以下を設定します。

  • ロググループ名
    • サブスクリプションフィルタを適用するロググループ名です。
  • フィルタパターン
    • 特定の文字列を含むログデータのみを転送したい場合などに使用できます。空文字を設定すると全ログイベントを転送します。
  • destination arn
    • サブスクリプションの送信先として使用するサービスのARN(Amazon リソース ネーム)です。
  • role arn
    • CloudWatch Logs が送信先のリソースにデータを置くのに必要な権限を与えるためのIAMロールを設定します。
  • ディストリビューション
    • Amazon Kinesis Data Streams にデータを送信する場合、メソッドを指定します。

S3へのログデータの転送

CloudWatch Logs に保存されたログデータは、サブスクリプションを使用することでリアルタイムにS3へログを転送することができます。
S3にログデータを保存したり、S3からS3 Glacierなどの低コストのストレージクラスに移行することでログ保存の費用を抑えることができます。

以下のブログでは CloudWatch Logs のサブスクリプションで Amazon Kinesis Data Firehose にログを転送し、 S3 にデータを保存する方法をご紹介しています。

ログイベントからのメトリクスの利用

ロググループに対してメトリクスフィルターという機能を使用することで、ログイベントからメトリクスを生成することができます。
メトリクスフィルターは一つのロググループに対して複数作成可能です。 メトリクスフィルター作成時にフィルターパターンを設定することで特定の文字列のみを抽出し、メトリクスとして検知することが可能です。
また、メトリクスフィルターをもとにアラームを作成することができます。

特定の文字列を含むログが保存された場合にメール通知したい場合、ロググループに対してメトリクスフィルターを作成し、フィルターパターンを設定、メトリクスフィルターに対してアラームを設定してアラーム内で通知先を設定することで実現できます。

メトリクスフィルターの使用方法については以下のブログで詳しくご紹介しています。

CloudWatch Events

CloudWatch Eventsを利用すると、監視対象のAWSリソースの状態が変化した場合にアクションを実行することができます。
リソースの状態の変化以外に、時間を指定することもでき、特定の時間にアクションを実行することも可能です。
CloudWatch イベント のターゲットとして設定できるサービスは以下です。

  • Amazon EC2 インスタンス
  • AWS Lambda 関数
  • Amazon Kinesis Data Streams のストリーム
  • Amazon Kinesis Data Firehose の配信ストリーム
  • Amazon CloudWatch Logs のロググループ
  • Amazon ECS タスク
  • Systems Manager コマンドを実行
  • Systems Manager オートメーション
  • AWS Batch ジョブ
  • Step Functions ステートマシン
  • CodePipeline のパイプライン
  • CodeBuild プロジェクト
  • Amazon Inspector の評価テンプレート
  • Amazon SNS のトピック
  • Amazon SQS キュー
  • 組み込みターゲット: EC2 CreateSnapshot API call、EC2 RebootInstances API call、EC2 StopInstances API call、および EC2 TerminateInstances API call
  • 別の AWS アカウントのデフォルトのイベントバス

Amazon CloudWatch Events とは

CloudWatch Eventsの概念

CloudWatch Events は以下の要素で成り立っています。

  • Events
  • ルール
    • イベントが生成されたときにアクションを実行するためのルールです。ルールの条件に一致した場合のみアクションを実行することが可能です。
      イベントソースとしてサービス名やイベントタイプ、スケジュールを指定し、条件に一致した場合にアクションを行いたいターゲットを指定します。
  • ターゲット
    • イベントがルールに一致した場合にアクションを行う対象を指定します。

CloudWatch Alarms

CloudWatch メトリクス をもとにアラームを発行する機能です。
メトリクスが特定のしきい値を超えた場合にアクションを実行し、EC2、EC2 Auto Scalingへのアクション実行、SNSトピックへ通知を送信することが可能です。

メトリクスアラームの状態

メトリクスアラームの状態を示す値は以下です。

  • OK:メトリクスは定義したしきい値を下回っている
  • ALARM:メトリクスや式は、定義したしきい値を超えている
  • INSUFFICIENT_DATA:アラームが開始直後またはメトリクスが利用できない、データが不足していてアラームの状態を判定できない

アラームの設定

CloudWatch Alarm の作成時はメトリクスに対して以下の値を設定する必要があります。

  • 対象のメトリクス
  • 統計方法
    • 平均、最大、合計などの中から適切な統計方法を選択します。
  • 期間
    • 何分単位に1回メトリクスを評価するかを設定します。

メトリクス評価時にデータポイントの一部がサーバーのダウンなどによって送信されない場合があります。
このような欠落データを処理する方法を以下の中から選択できます。

  • notBreaching:欠落データポイントは「良好」とされ、しきい値内として扱われます。
  • breaching:欠落データポイントは「不良」とされ、しきい値超過として扱われます。
  • ignore:現在のアラーム状態が維持されます。
  • missing:このアラームは、状態を変更するかどうかを評価する際に、欠落データポイントを考慮に入れません。

どの方法が最適かは扱うデータによって異なります。メトリクスによって適切な方法を選択する必要があります。

CloudWatch Logs Insights

CloudWatch Logs Insights では専用のクエリ言語を使用して CloudWatch Logs のログデータの検索・分析ができます。 クエリを実行することで、特定のログデータをすばやく検出することができます。

CloudWatch Logs Insights では、CloudWatch Logs に送信されるログごとに以下のフィールドが自動的に生成されます。

  • @message:生の未解析のログイベントを示します。これは、ログイベント の message フィールドに相当します。
  • @timestamp:ログイベントの timestamp フィールドに含まれるイベントタイムスタンプが含まれます。
  • @ingestionTime:ログイベントが CloudWatch Logs によって受信された時間です。
  • @logStream:ログイベントの追加先のログストリーム名です。
  • @log:account-id:log-group-name の形式のロググループ識別子です。

サポートされるログと検出されるフィールド

CloudWatch Logs Insights の使い方を簡単にご紹介します。
CloudWatch の画面の左側メニューから「インサイト」を選択し、ロググループを選択します。
実行したいクエリを記述し、「クエリの実行」をクリックします。

クエリを実行すると結果に基づいたログが表示されることが確認できます。

CloudWatch Dashboards

CloudWatch Dashboards を利用することで、複数のログやメトリクスをひとつの画面で確認することができます。
また、異なるリージョンのリソースも1つのダッシュボードでモニタリングすることができます。

CloudWatch Alarm との統合

作成したCloudWatch Alarmをダッシュボードに追加することができます。
Alarm状態になるとウィジェットが赤色に変化し、アラーム状態を可視化できます。

作成方法

マネジメントコンソールからダッシュボードを作成する方法を簡単にご紹介します。
ダッシュボードの作成はマネジメントコンソールのほか、AWS CLI、PutDashboard API を使用することができます。

CloudWatch の画面の左側メニューから「ダッシュボード」を選択し、「ダッシュボードの作成」をクリックします。

任意のダッシュボード名を入力し、「ダッシュボードの作成」をクリックします。

ダッシュボードに追加するウィジェットのタイプを選択します。

ダッシュボードに追加するメトリクスを選択し、「ウィジェットの作成」をクリックします。

作成が完了すると、ダッシュボードが追加され、その中にウィジェットが作成され、データが表示されていることが確認できます。

料金

Amazon CloudWatch は他のAWSサービスと同様、使った分だけ料金が請求される従量課金制となっています。
2020/08/14 現在、以下の範囲内での利用は無料となります。

無料利用枠を超える利用についての課金は以下の公式ドキュメントをご参照ください。
Amazon CloudWatch の料金

参考リンク

Amazon CloudWatch ドキュメント

まとめ

以上、『AWS 再入門ブログリレー 2020』の 9 日目のエントリ『Amazon CloudWatch』編でした。
機能が多く、なかなか理解するのが大変ですが、慣れるとすごく便利だと思うので、この記事がお役に立てると幸いです!

来週月曜日 (8/17) はもこさんによる「AWS Amplify」の予定です。お楽しみに!