[レポート] DEV311: カオスからの脱却:AWSクラウドネイティブアプリのモニタリング ベストプラクティス #reinvent

先日開催された re:Invent 2018 より、セッション「Breaking Observability Chaos: Best Practices to Monitor AWS Cloud Native Apps」をレポートします。コードが公開されているサンプル IoT アプリケーションを動かしながら X-Ray 等の動作を実際に見ていく、実践的なセッションです。
2018.12.29

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

先日開催されました AWS re:Invent 2018 より下記セッションをレポートします。セッションの拝聴はできなかったのですが、公開された動画と資料をもとにお送りします。

セッションタイトル

概要

セッション概要より抄訳:
モダンなアプリケーションにとって、システム・リソースの運用可視化、アプリのデバッグと解析、そしてユーザ体験の最適化のためには、メトリクス・ログ・トレースを横断した観測が必要です。このセッションでは CloudWatch と AWS X-Ray を使い、全ての顧客においてのモニタリングベストプラクティスを紹介します

Companies that are building and deploying modern applications need to have observability across metrics, logs, and traces to gain operational visibility of systems and resources, debug and analyze applications, and optimize customer experience. In this session, we leverage Amazon CloudWatch and AWS X-Ray to highlight best practices for addressing monitoring challenges that most customers face. We showcase an IoT application built using common AWS services, create multiple monitoring challenges, and demonstrate best practices. After the session, we will make demonstration available for you to test using your own AWS account.

Speaker

  • Jon Jozwiak - AWS Solutions Architect, AWS
  • Marcos Ortiz - AWS Solutions Architect, AWS

資料

スライド

動画

内容

モニタリングの景観とトレンド

  • 全てのセグメントの企業は変革している
    • スタートアップ
    • エンタープライズ
    • B2B
    • B2C
    • 公共・地方自治体
  • モダンなアプリ
    • モノリシックからの脱却
    • 幅広いアーキテクチャ
    • APIベース
    • AWSにおいては :
      • ビジネスロジックにフォーカス
      • コンテナ
      • サーバーレス
    • 素早い構築 > チームを強くする > 発明と発展 > 顧客はより幸せに
  • 観測性は成功の鍵
    • メトリクス
    • ログ
    • イベント
    • トレース

(説明のための)サンプルアプリケーション

This demo demonstrates how leverage aws monitoring services to monitor an iot app.
Services used: CloudWatch Logs, Events, Dashboards, Metrics, Lambda, StepFunctions, IoT, DynamoDB and S3.

  • Botを作成するとStepFunctionsが動く
    1. プロビジョニング -> AWS IoT
    2. 鍵と証明書 -> S3バケット
    3. メタデータ -> DynamoDB
  • フロントエンドはReactベースのSPA

(実際の動作をデモ)

  • botはECSコンテナ(Fargate)
    1. 鍵と証明書を取得
    2. Pub/Sub
      • MQTT

このアプリケーションを例として、以下を説明していく

モニタリング on AWS

  • Amazon CloudWatch
    • クラウドリソースの完全な可視化
    • アプリのモニタリング
    • 性能変化への対応
    • リソース利用率の最適化
    • 運用上の健康具合をひとつのビューで
  • AWS X-Ray
    • 本番環境へデプロイされたアプリケーションの解析とデバッグ
    • 性能ボトルネックの識別
    • 根本原因へのトラブルシュート
    • ユーザリクエストのトレース
    • シンプルかつ複雑なアプリケーション向け

1. 運用の本質(Operational insights)

  • 「運用の優秀性」には用意が必要
  • ビジネスの要求にあったメトリクスを定義する
    • bot のバッテリーライフはどうやって計測する?
    • bot の観測遅延とパッケージサイズは?
  • カスタムメトリクスをどう実装する?

(デモ - Lambda コード内にputMetricDataを仕込む、CloudWatchダッシュボードで表示)

  • まとめ
    • ビジネスの要求にあったメトリクスを定義する
    • Amazon CloudWatch Agent はカスタムメトリクスをサポートする
    • デプロイプロセスに「 CloudWatch ダッシュボードへの挿入」を追加する
      • CFnテンプレート
"Type" : "AWS::CloudWatch::Dashboard",
"Properties" : {
    "DashboardName" : String,
    "DashboardBody" : String,
}

2. エラーを検知しハンドリングする

  • Everything fails all the time.
    • Werner Vogels, Amazon CTO
  • 障害を知る
  • 知らせる
  • 可能な限り自動的に障害に対処する
  • bot が十分なバッテリー残量をもっていないことをどうやって検知する?

(デモ - CloudWatch Events のルールで Lambda を起動し、DynamoDB 内のバッテリーステータスを検索)

  1. Lambda searchLowBatteryBots が対象 bot を検索する
  2. 詳細を CloudWatch Logs へ出力
  3. IoT コマンド発行(「Self Healing」)
  4. CloudWatch Alarm を発呼し通知する
    • カスタムメトリクスを出力することで実施
  • まとめ
    • サイクルを回す
    • 計測 (Measure) : CloudWatch メトリクス
    • 検知 (Detect) : CloudWatch Alarm
    • 通知 (Notify) : EC2 AutoScaling、Amazon SNS
    • 修正 (Fix) : Amazon SNS をトリガにした AWS Lambda

3. ワークロードイベントへの反応(React)

  • あなたはワークロードイベントをキャプチャし反応することができる
  • 特殊なイベントにマッチし適切に誘導するようなルールを設定しよう
    • ルール = CloudWatch Events ルール
  • bot のコネクティビティを追跡するには?

  • bot のステータスをトラックするには?

(デモ - DynamoDB のステータスや CloudWatch カスタムメトリクスを拾う)

  • まとめ
    • 自動化しよう
    • 状態遷移を追跡しシェアする
    • タイムベースとイベントベース
    • AWS サービスと CloudTrail
    • カスタムイベントのサポート
    • イベントにマッチし誘導するルールを使う

4. トラブルシュート

  • エンド-トゥ-エンドの可視化
  • 性能低下と例外的なふるまいを速やかに識別する
  • サービスは何に依存しているか?
  • 何処を高められるか?
  • ボトルネックとエラーレートは?

(デモ - AWS X-Ray > Service mapでエラー率等を俯瞰、Tracesで詳細確認)

  • CloudWatch
    • ログの収集と集中化、検索
    • ログの保持戦略のプランニングを忘れない
      • Elasticsearch なども併用する
  • AWS X-Ray
    • Service Maps を見る
    • Tracing を有効に

ベストプラクティス

  • ビジネスの裏側で動いているモニタリング戦略を計画する
    • CloudWatch カスタムメトリクス、ダッシュボード
  • アプリの一部としてモニタリング機能を配布する
  • メトリクス、ログ、イベント、トレース、4つ全てを収集する
  • 全てをモニタリングする : サービス、上限、コスト、APIでのやり取り 等々
  • 観測性能を強化するためにAWSサービスを使う :
    • AWS CloudTrail
    • AWS Config
    • AWS Trusted Advisor
    • Amazon Macie
    • Amazon GurdDuty
    • AWS Budgets
    • AWS Health
    • Amazon RDS Performance Insights

所感

実際のアプリや bot の動作やコードの解説、CloudWatch や X-Ray など、デモによる実演が多いセッションでした。資料にない画面も多く説明されているので、興味があったら是非動画を見てみてください。