記事説明
この記事では、「Management & Governance」分野の重要なサービスである、
 Amazon CloudWatchについて説明します。
↓Management & Governanceの重要なサービス一覧
 ・Amazon CloudWatch
 ・AWS CloudFormation
 ・AWS CloudTrail
 ・AWS Config
 ・AWS Systems Manager
↓参考:【AWS Black Belt Online Seminar】Amazon CloudWatch
 https://d1.awsstatic.com/webinars/jp/pdf/services/20190326_AWS-BlackBelt_CloudWatch.pdf
Amazon CloudWatchの位置づけ
Amazon Management Toolsとして、5つの機能が提供されています。
1.リソースプロビジョニング
 ⇒テンプレート定義によるインフラプロビジョニングの自動化
 主なサービス:AWS CloudFormationなど
2.構成管理
 ⇒パッケージの導入、ソフトウェアとリソースのコンフィグレーション、パッチ適用
 主なサービス:AWS Systems Managerなど
3.モニタリング
 ⇒AWSリソースやアプリケーションに対する、モニタリング、アラーム、
 メトリクスダッシュボード、ログ、イベント管理
 主なサービス:Amazon CloudWatch
4.ガバナンスとコンプライアンス
 ⇒リソースインベントリ、構成変更管理、ユーザ操作とAPI呼び出しの記録、
 セルフマネージドなITカタログ
 主なサービス:AWS CloudTrail、AWS Config
5.リソース最適化
 ⇒コスト低減、パフォーマンス向上、セキュリティの改善に対する推奨事項の自動提供
 主なサービス:AWS Trusted Advisor
このうち、Amazon CloudWatchは
 Amazon Management Toolsの中のモニタリング機能として用いられます。
Amazon CloudWatchの概要
概要としては、
 「AWSサービスや、システムのモニタリングに関する様々な機能を提供する」
 サービスで、AWSサービスだけでなく、社内のオンプレサーバや他のクラウドサーバでの監視も可能です。
CloudWatchの重要な要素として、5つ挙げられます。
1.CloudWatch Metrics
 ⇒CloudWatchに発行されたメトリクス(測定データ)を収集し、統計を取得します。
2.CloudWatch Alarms
 ⇒CloudWatch Metricsをモニタリングして、アラームを発行可能で、
 条件を指定して自動アクション(通知や復旧など)を実行可能です。
3.CloudWatch Logs
 ⇒AWSサービスもしくはシステムのログ監視、保存、アクセスを提供します。
4.CloudWatch Dashboards
 ⇒CloudWatch コンソールでカスタマイズ可能なダッシュボードを作成できます。
5.CloudWatch Events
 ⇒リソース変更のイベントやスケジュールをトリガーとして、アクションを実行できます。
↓引用元
 https://d1.awsstatic.com/webinars/jp/pdf/services/20190326_AWS-BlackBelt_CloudWatch.pdf
それでは順に説明していきます。
CloudWatch Metricsについて
CPU使用率や5XX errorなど、様々な測定データのことを、AWSではメトリクスと呼びます。
 時系列のデータポイントとして、タイムスタンプと測定単位を保持します。
 例)08:00にCPU使用率:85% 等
様々なメトリクスの収集、統計結果を管理するのがCloudWatch Metricsとなります。
メトリクスデータの生成
 • 基本は1分、カスタムメトリクスの高解像度を利用して最短で1秒間隔で生成されます。
 • EC2では基本モニタリングで5分、詳細モニタリングで1分ごとにメトリクスが生成されます。
メトリクスデータの利用可能期間
 • 粒度によって利用可能期間が決まります。
 • 1分未満 ⇒ 3時間、1分 ⇒ 15日、5分 ⇒ 63日
 • 1時間のデータポイントだと15ヶ月(1年前のイベントとの比較に使えます)
| 高解像度 | 標準の解像度 | |||
| 取得粒度 | 1分未満 | 1分~ | 5分~ | 1時間~ | 
| 利用可能期間 | 3時間 | 15分 | 63日 | 15か月 | 
メトリクス値としては下記のようなデータが収集されます。
・Minimum : 指定された期間に認められた最小値
 ・Maximum :指定された期間に認められた最大値
 ・Sum : メトリクスで加算されたすべての合計値
 ・Average : 指定した期間の平均値(Sum/SampleCount)
 ・SampleCount : データポイントのカウント数
 ・pNN,NN : 指定されたパーセンタイルの値(パーセント値)
↓その他の機能
Metric Mathについて、
 標準メトリクスでは欲しいデータを収集できない場合、
 CloudWatchメトリクスに数式を使用して、新しいメトリクスを作成できます。
スナップショットグラフについて、
 CloudWatchコンソールでメトリクスを表示した際のグラフをPNG画像として取得できます。
 異常検知の際にグラフを添付したい際などに有用です(CloudWatch Alarmsと組み合わせ)

EC2で標準メトリクスとされるもの
• CPUUtilization(CPU使用率)
 • CPUCreditBalance(獲得CPUクレジット数)
 • CPUCreditUsage(CPUクレジットの使用)
 • CPUSurplusCreditBalance(獲得CPUクレジットが消費された後の、余剰CPUクレジット数)
 • CPUSurplusCreditsCharged(課金が発生する余剰CPUクレジット数)
 • DiskReadBytes(ディスク読み取りバイト数)
 • DiskReadOps(読み取り操作回数)
 • DiskWriteBytes(ディスク書き込みバイト数)
 • DiskWriteOps(書き込み操作回数)
 • NetworkOut(送信ネットワークトラフィックのバイト数)
 • NetworkPacketsOut(送信パケット数)
 • NetworkIn(受信ネットワークトラフィックのバイト数)
 • NetworkPacketsIn(受信パケット数)
 • StatusCheckFailed_Instance(インスタンスステータスチェック 0:成功、1:失敗)
 • StatusCheckFailed_System(システムステータスチェック 0:成功、1:失敗)
 • StatusCheckFailed(インスタンスとシステム両方のステータスチェック 0:成功、1:失敗)
その他のメトリクスについては、カスタムメトリクスとなり、
 AWS CLIの”put-metric-data”もしくは”PutMetricData” APIでデータを登録し、
 監視することができます。(解像度が 1秒のデータを含む高解像度なメトリクスを発行可能)
CloudWatch で利用できるエージェント/プロトコルについて
統合CloudWatch エージェント(推奨)
 • メトリクスとログの両方を単一のエージェントで収集
 • クラウドでもオンプレミスでも利用可能
 • Linux, Windowsの両方で稼働。手動もしくはウィザードから設定が可能。
他にも、より詳しいメトリクスを収集する場合は、下記の方法があります。
StatsD のサポート
 • StatsD プロトコルを使用して、カスタムメトリクスを取得(Linux,Windows)
collectd のサポート
 • collectd プロトコルを使用してカスタムメトリクスを取得(Linux)
 • collectd ソフトウェアを使用してCloudWatch エージェントにメトリクスを送信
procstatプラグイン
 • 個別のプロセスからメトリクスを収集
 • CloudWatchエージェントで設定
CloudWatch Alarmsについて
CloudWatch Alarmsは、CloudWatch Metricsをモニタリングして、アラームを発行可能で、
 条件を指定して自動アクション(通知や復旧など)を実行する機能です。
例)CPU使用率が85%以上になった際、指定されたアドレスにアラートメールを送信する
アラームの状態としては3種類あります。
1.OK
 ⇒定義された閾値を下回っている状態です。問題ありません。
2.ALARM
 ⇒定義された閾値を上回っている状態です。発報されるべき状態です。
3.INSUFFICIENT_DATA
 データ不足の為、状態を判定できない状態です。
 必ずしも障害を表すステータスではなく、発報されるべきか判断できません。
また、データが欠落しているときの処理として、下記の設定が可能です。
| オプション | 設定内容 | 
| missing | 不明ステータスとなる。デフォルト設定。 | 
| notBreaching | 欠落データポイントは閾値内として判定される。 | 
| breaching | 欠落データポイントは閾値超過として判定される。 | 
| ignore | 現在のアラーム状態が維持される。 | 
例)breachingのユースケース
 EC2上の継続的にCPU使用率を監視しているようなシステムについて、
 データポイントの欠落は異常として検知する。
例)notBreachingのユースケース
 DynamoDBのスロットリングを監視しているシステムについて、
 データポイントは正常時に生成されないので、閾値内とする。
その他にも、アラームを発生させるデータポイント数を設定可能です。
 例)1分間隔のデータポイントが3回連続で異常だった場合、アラームを生成
CloudWatch Alarmsのアクション機能について
異常(アラーム)が検知された際の挙動を設定することができます。
 異常を検知するタイミングが深夜だった場合、人の手で復旧作業せずに
 自動で復旧してくれると嬉しいですよね。
例)EC2インスタンスの自動復旧
CloudWatch:StatusCheckFailed_Systemのアラームをキャッチ
 ↓
 CloudWatch Alarms(アクション):SNSトピックを作成、EC2インスタンスの再起動
 ↓
 SNS:Eメールで指定アドレスへ通知
CloudWatch Logsについて
AWSサービスおよびシステムのログ監視をする機能です。
 エージェント経由でログをCloudWatchエンドポイントへ送信します。
 ※S3へのエクスポートも可能
CloudWatch Logsのディレクトリ階層については、下記のようになります。
 ロググループ > ログストリーム > ログイベント
例)社内に3つのwebサーバがあった場合
 ロググループ:webサーバ
 ログストリーム:Aサーバ、Bサーバ、Cサーバ
 ログイベント:それぞれのサーバでの、イベント発生時のタイムスタンプ+メッセージ
 ※この場合の数的関係性は、ロググループ:ログストリーム:ログイベント=1:3:多
収集したログについて
・ログの内容はタイムスタンプとログメッセージ(UTF-8)で構成される
 ・ログの保存期間は、永久保存が可能
 ・Amazon S3へのエクスポートが可能
 ・特定文字列でフィルタリング検索が可能(正規表現利用不可)
 ・特定文字列のエントリ頻度でアラームを作成、SNS連携が可能
 ・収集したログをフィルタパターンに応じて、下記のサービスに転送可能(AWS CLIからのみ)
 ⇒Kinesis Data Streams
 ⇒Kinesis Data Firehose
 ⇒Lambda
その他、CloudWatch Logs Insightsという、CloudWatch Logsのログデータを
 専用のクエリ言語で検索して分析できる機能があり、グラフで可視化することも可能です。
CloudWatch Dashboardsについて
CloudWatch コンソールでカスタマイズ可能なダッシュボードを作成できます。
 自分の監視したいメトリクスを指定して、一度に閲覧することができます。
これは、CloudWatch Alarmsと統合することで、
 Alarm状態になるとウィジェットが赤に変わるため、
 一目見て異常が起こっているかを監視することができます。
CloudWatch Eventsについて
リソース変更のイベントやスケジュールをトリガーとして、アクションを実行する機能です。
 トリガーとなる要素は大きく分けて、2種類存在します。
1.event-base
 リソースの変更を行うシステムイベントを処理させることができます。
 例)EC2のRunningイベントをキャッチして、指定タグが付いていない場合は、終了する。
2.time-base
 ターゲットに対して、スケジューリングを行ってイベントを処理させることが可能。
 例)22:00になったら、EC2インスタンスの自動停止を行う。
まとめ
AWSのサービスの中で非常に重要な位置づけである、CloudWatchに関する記事でした。
 CloudWatch Alarmsのアクション機能など、うまく活用することができれば、
 運用コストを下げることができそうですね。
また、既に会社で別の監視ツールを活用しているという方もいらっしゃると思います。
 現に前職では、異常があればすぐに担当者へ電話をかけてもらうような24時間365日対応の監視サービスを利用しておりました。
CloudWatchではEメールでの通知となるので、
 電話ですぐに連絡してもらいたい場合などは、別のサービスを用いる方が良いかもしれません。
 なので、下記のような使い分けをすれば良いと思います。
障害検知後すぐに電話での連絡を要する ⇒ 別の監視サービスを利用
 障害検知から自動的にAWSのサービスのイベントを実行 ⇒ CloudWatch利用
それでは、お読みいただきありがとうございました。
 
 
