Amazon CloudWatch とは

#Amazon CloudWatch とは
> Amazon CloudWatch は、Amazon Web Services (AWS) リソースと、AWS でリアルタイムに実行されるアプリケーションを監視

#Amazon CloudWatch Logs の概念

* ログイベント
> ログイベントは、モニタリングされているアプリケーションまたはリソースによって記録されたアクティビティのレコードです。CloudWatch Logs が理解するログイベントレコードには 2 つのプロパティがあります。イベント発生時のタイムスタンプおよび生のイベントメッセージです。イベントメッセージは UTF-8 でエンコードされている必要があります。

* ログストリーム
> ログストリームは、同じソースを共有する一連のログイベントです。より具体的には、ログストリームは一般的に、モニタリングされているアプリケーションインスタンスやリソースから送信された順序でイベントを表すものです。たとえば、ログストリームは特定のホストの Apache アクセスログと関連付けられる場合があります。ログストリームを必要としなくなった場合、aws logs delete-log-stream コマンドを使用して、削除できます。さらに、AWS は 2 か月を超える空のログストリームを削除する場合もあります。

* ロググループ

> ロググループは、保持、監視、アクセス制御について同じ設定を共有するログストリームのグループを定義します。各ログストリームは、1 つのロググループに属している必要があります。たとえば、各ホストから Apache アクセスログの別のログストリームがある場合は、それらのログストリームを MyWebsite.com/Apache/access_log という名前の 1 つのロググループにグループ化できます。

* メトリクスフィルター

> メトリクスフィルターを使用して、取り込まれたイベントからメトリクスの監視データを抽出し、CloudWatch メトリクスのデータポイントに変換できます。メトリクスフィルターはロググループに割り当てられ、ロググループに割り当てられたすべてのフィルターはそのログストリームに適用されます。

* 保持設定

> 保持設定は、CloudWatch Logs にログイベントを保持する期間を指定するために使用できます。期限切れのログイベントは自動的に削除されます。メトリクスフィルターと同様に、保持設定はロググループに割り当てられ、ロググループに割り当てられた保持期間はそのログストリームに適用されます。

#CloudWatch Logs の使用開始

* 推奨 – 統合 CloudWatch エージェント
* サポートされているが、廃止予定 – 以前の CloudWatch Logs エージェント。

# loudWatch Logs Insights を使用したログデータの分析
CloudWatch Logs Insightsの簡単なまとめ
https://qiita.com/sakochi/items/8e60654ffe36432c5228

# CloudWatch Logs でのログデータ保管期間の変更
> デフォルトでは、ログデータは CloudWatch Logs に永続的に保存されます。ただし、ロググループにログデータを保存する期間を設定できます。現在の保持設定より古いデータはすべて自動的に削除されます。各ロググループのログの保持期間は、いつでも変更できます。

#Amazon CloudWatch Logs ロググループのタグ付け
* タグの基本

> タグを使用すると、ロググループを分類できます。たとえば、目的、所有者、環境などに基づいて分類できます。タグごとにキーと値を定義するため、特定のニーズを満たすためのカテゴリのカスタムセットを作成できます。たとえば、所有者と、関連するアプリケーションに基づいてロググループを追跡するのに役立つタグのセットを定義できます。次にいくつかのタグの例を示します。

・プロジェクト: プロジェクト名

・所有者: 名前

・目的: 負荷テスト

・アプリケーション: アプリケーション名

・環境: 本稼働

#アラームイベントと EventBridge

##Amazon EventBridge とは?
> Amazon EventBridge は、アプリケーションをさまざまなソースからのデータと簡単に接続できるようにするサーバーレスイベントバスサービスです。EventBridge は、お客様独自のアプリケーションや SaaS (Software-as-a-Service) アプリケーション、AWS サービスからのリアルタイムデータのストリームを配信し、このデータを AWS Lambda などのターゲットにルーティングします。ルーティングルールを設定することで、データの送信先を決定し、すべてのデータソースにリアルタイムで対応するアプリケーションアーキテクチャを構築することができます。EventBridge は、疎結合で分散されたイベント駆動型アーキテクチャを構築できるようにします。

* タグ付けを使用したコストの追跡

> タグを使用して、AWS コストを分類して追跡できます。AWS リソース (ロググループなど) にタグを適用すると、AWS のコスト配分レポートに、タグ別に集計された使用状況とコストが表示されます。自社のカテゴリ (たとえばコストセンター、アプリケーション名、所有者) を表すタグを適用すると、複数のサービスにわたってコストを分類することができます。

#AWS KMS を使用した CloudWatch Logs でのログデータの暗号化
> AWS Key Management Service (AWS KMS) カスタマーマスターキー (CMK) を使用して CloudWatch Logs でログデータを暗号化できます。暗号化は、ロググループを作成するときか、ロググループが存在しているときに、CMK とロググループを関連付けることによりロググループレベルで有効になります。

#ログデータの検索およびフィルタリング

> CloudWatch Logs エージェントが Amazon CloudWatch へのログデータの発行を開始した後、1 つ以上のメトリクスフィルターを作成して、ログデータの検索およびフィルタリングを開始できます。メトリクスフィルターは CloudWatch Logs に送信されたログデータを検索するための語句とパターンを定義します。CloudWatch Logs はこれらのメトリクスフィルターを使用して、ログデータをグラフの作成やアラームの設定に利用できる数値の CloudWatch メトリクスに変換します。これらのメトリクスを表示する、またはアラームを設定するときは、パーセンタイル統計など、任意のタイプの CloudWatch 統計を使用できます。

## 概念
* フィルターパターン
    * 各ログイベントのデータを CloudWatch Logs がどのように解釈するかについての記号による説明です。たとえば、ログエントリにはタイムスタンプ、IP アドレス、文字列などが含まれる可能性があります。パターンを使用して、ログファイルの検索対象を指定します。
* メトリクス名
    * モニタリングされたログ情報が発行される CloudWatch メトリクスの名前です。
* メトリクス名前空間
    * 新しい CloudWatch メトリクスの送信先名前空間
* メトリクス値
    * 一致するログが見つかるたびにメトリクスに発行する数値。たとえば、「Error」など特定の語句の発生回数をカウントする場合、その値は発生するごとに「1」になります。転送されたバイト数をカウントする場合は、ログイベントに見つかった実際のバイト数で増分できます。
* デフォルト値
    * 一致するログが見つからなかった期間中にメトリクスフィルターに報告された値。この値を 0 に設定することで、データは毎秒報告され、データがない期間がある「むらがある」メトリクスを回避できます。

#CloudWatch Logs サブスクリプションフィルタの使用
> サブスクリプションを使用して CloudWatch Logs からのログイベントのリアルタイムフィードにアクセスし、カスタム処理、分析、他のシステムへのロードを行うために、Amazon Kinesis ストリーム、Amazon Kinesis Data Firehose ストリーム、AWS Lambda などの他のサービスに配信することができます。ログイベントのサブスクリプションを開始するには、Kinesis ストリームなど、イベントを配信する宛先ソースを作成します。サブスクリプションフィルタは、AWS リソースに配信されるログイベントのフィルタリングに使用するフィルタパターンと、一致するログイベントの送信先に関する情報を定義します。

* Kinesis のサブスクリプションフィルタ
* AWS Lambda のサブスクリプションフィルタ
* Amazon Kinesis Data Firehose のサブスクリプションフィルタ

#Amazon S3 へのログの送信
> 一部の AWS サービスは、ログを直接 Amazon S3 に発行できます。これにより、ログの主な要件が Amazon S3 のストレージである場合、追加のインフラストラクチャを設定しなくても、サービスで簡単にログを作成し、直接 Amazon S3 に配信することができます。

Amazon S3 に発行されたログは、指定する既存のバケットに発行されます。指定したバケットで、5 分おきに 1 つ以上のログが作成されます。

#CloudWatch Logs データの Amazon Elasticsearch Service へのストリーミング
> CloudWatch Logs サブスクリプションを通して、ほぼリアルタイムでAmazon Elasticsearch Service (Amazon ES) クラスターで受け取るCloudWatch Logs ロググループをストリームデータに設定することができます。

#CloudWatch Logs にログを発行する AWS のサービス
* Amazon API Gateway
    * API Gateway で CloudWatch API ログ記録をセットアップする
* Amazon Aurora MySQL
    * Amazon CloudWatch Logs への Amazon Aurora MySQL ログの発行 |
* AWS CloudHSM
    * Amazon CloudWatch Logs で AWS CloudHSM 監査ログをモニタリングする |
* AWS CloudTrail 
    * Amazon CloudWatch Logs を使用して CloudTrail のログファイルをモニタリングする
* Amazon Cognito
    * CloudWatch LogsIAM ロールの作成
* Amazon Connect
    * Amazon Connect のログ記録とモニタリング
* AWS DataSync
    * Amazon CloudWatch ロググループへのログのアップロードを DataSync に許可する
* AWS Elastic Beanstalk
    * Amazon CloudWatch Logs で Elastic Beanstalk を使用する
* Amazon Elastic Container Service
    * コンテナインスタンスでの CloudWatch Logs の使用
* Amazon Elastic Kubernetes Service
    * Amazon Amazon Elastic Kubernetes Service コントロールプレーンのログ記録
* AWS Fargate
    * awslogs ログドライバーを使用する

##コンテナインスタンスでの CloudWatch Logs の使用

# 参考文献
* Amazon CloudWatch とは
    * https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html
* Amazon EventBridge とは?
    * https://docs.aws.amazon.com/ja_jp/eventbridge/latest/userguide/what-is-amazon-eventbridge.html
* CloudWatch Logsでメトリクスフィルターを作成し、アラームでメール通知させてみた
    * http://blog.serverworks.co.jp/tech/2020/01/06/cloudwatchlogs-alert/