AWS Elastic Beanstalk
開発者ガイド

環境の Amazon CloudWatch カスタムメトリクスのパブリッシュ

AWS Elastic Beanstalk の拡張ヘルスレポートによって収集されたデータをカスタムメトリクスとして Amazon CloudWatch にパブリッシュできます。CloudWatch にメトリクスをパブリッシュすることにより、時間の経過に伴うアプリケーションのパフォーマンスの変化をモニタリングできるほか、リソースの使用状況やリクエストのレイテンシーが負荷に応じてどのようにスケーリングするかを追跡することによって、発生する可能性のある問題を特定できます。

また、CloudWatch にメトリクスをパブリッシュすることにより、モニタリンググラフアラームでメトリクスを使用できます。無料のメトリクスである EnvironmentHealth は、拡張ヘルスレポートを使用するとき、自動的に有効になります。EnvironmentHealth 以外のカスタムメトリクスを使用する場合、CloudWatch の標準料金が課金されます。

環境の CloudWatch カスタムメトリクスをパブリッシュするには、まず環境で拡張ヘルスレポートを有効にする必要があります。手順については、「AWS Elastic Beanstalk 拡張ヘルスレポートの有効化」を参照してください。

拡張ヘルスレポートのメトリクス

環境で拡張ヘルスレポートを有効にすると、拡張ヘルスレポートシステムが CloudWatch カスタムメトリクスの 1 つである EnvironmentHealth を自動的にパブリッシュします。追加のメトリクスを CloudWatch にパブリッシュするには、AWS マネジメントコンソールEB CLI、または .ebextensions を使用して、これらのメトリクスで環境を設定します。

環境から、次の拡張ヘルスメトリクスを CloudWatch にパブリッシュすることができます。

EnvironmentHealth

環境のみが対象。他のメトリクスを設定していなければ、拡張ヘルスレポートシステムからパブリッシュされる唯一の CloudWatch メトリクスです。環境の状態は、7 種類のステータスのいずれかで表されます。CloudWatch コンソールでは、これらのステータスは以下の値にマッピングされます。

  • 0 – OK

  • 1 – Info

  • 5 – Unknown

  • 10 – No data

  • 15 – Warning

  • 20 – Degraded

  • 25 – Severe

InstancesSevere
InstancesDegraded
InstancesWarning
InstancesInfo
InstancesOk
InstancesPending
InstancesUnknown
InstancesNoData

環境のみが対象。これらのメトリクスは、各ヘルスステータスにある環境内のインスタンスの数を示します。InstancesNoData は、データを受け取っていないインスタンスの数を示します (該当する場合)。

ApplicationRequestsTotal
ApplicationRequests5xx
ApplicationRequests4xx
ApplicationRequests3xx
ApplicationRequests2xx

インスタンスと環境が対象。 インスタンスまたは環境で完了したリクエストの総数と、各ステータスコードカテゴリで完了したリクエストの数を示します。

ApplicationLatencyP10
ApplicationLatencyP50
ApplicationLatencyP75
ApplicationLatencyP85
ApplicationLatencyP90
ApplicationLatencyP95
ApplicationLatencyP99
ApplicationLatencyP99.9

インスタンスと環境が対象。 リクエストのうち、早い方から x パーセントの完了にかかった平均時間を直ちに示します。

LoadAverage1min

インスタンスのみが対象。インスタンスに関する過去 1 分間の CPU 負荷の平均値。

InstanceHealth

インスタンスのみが対象。インスタンスの現在のヘルスステータスを示します。インスタンスの状態は、7 種類のステータスのいずれかで表されます。CloudWatch コンソールでは、これらのステータスは以下の値にマッピングされます。

  • 0 – OK

  • 1 – Info

  • 5 – Unknown

  • 10 – No data

  • 15 – Warning

  • 20 – Degraded

  • 25 – Severe

RootFilesystemUtil

インスタンスのみが対象。使用中のディスク容量の割合を示します。

CPUIrq
CPUUser
CPUIdle
CPUSystem
CPUSoftirq
CPUIowait
CPUNice

インスタンスのみが対象。過去 1 分間に CPU が各状態で消費した時間の割合を示します。

AWS マネジメントコンソール を使用した CloudWatch メトリクスの設定

AWS マネジメントコンソール を使用して、拡張ヘルスレポートのメトリクスを CloudWatch にパブリッシュし、モニタリンググラフとアラームで使用できるように環境を設定できます。

AWS マネジメントコンソールで CloudWatch カスタムメトリクスを設定するには

  1. Elastic Beanstalk コンソール を開きます。

  2. お客様の環境の管理ページに移動します。

  3. [Configuration] を選択します。

  4. [モニタリング] 設定カードで、[変更] を選択します。

  5. [ヘルスレポート] で、インスタンスと CloudWatch にパブリッシュする環境メトリクスを選択します。複数のメトリクスを選択するには、Ctrl キーを押して選択します。

  6. [Apply] を選択します。

CloudWatch カスタムメトリクスを有効にすると、モニタリングページで使用できるメトリクスのリストにこれらのメトリクスが追加されます。

EB CLI を使用した CloudWatch カスタムメトリクスの設定

EB CLI を使用すると、環境の設定をローカルに保存し、パブリッシュするメトリクスを定義するエントリを追加してから、その設定を Elastic Beanstalk にアップロードすることによって、カスタムメトリクスを設定できます。保存した設定は、環境を作成する前または作成した後に環境に適用できます。

EB CLI と保存した設定を使用して CloudWatch カスタムメトリクスを設定するには

  1. eb init でプロジェクトフォルダーを初期化します。

  2. eb create コマンドを実行して、環境を作成します。

  3. eb config save コマンドを実行して、設定テンプレートをローカルに保存します。次の例では、--cfg オプションを使用して、設定の名前が指定されています。

    $ eb config save --cfg 01-base-state Configuration saved at: ~/project/.elasticbeanstalk/saved_configs/01-base-state.cfg.yml
  4. 保存した設定ファイルをテキストエディタで開きます。

  5. OptionSettings > aws:elasticbeanstalk:healthreporting:system: で、CloudWatch メトリクスを個別に有効にする ConfigDocument キーを追加します。たとえば、次に示す ConfigDocument は、環境レベルで ApplicationRequests5xx メトリクスと ApplicationRequests4xx メトリクスをパブリッシュし、インスタンスレベルで ApplicationRequestsTotal メトリクスをパブリッシュします。

    OptionSettings: ... aws:elasticbeanstalk:healthreporting:system: ConfigDocument: CloudWatchMetrics: Environment: ApplicationRequests5xx: 60 ApplicationRequests4xx: 60 Instance: ApplicationRequestsTotal: 60 Version: 1 SystemType: enhanced ...

    この例では、60 は測定間隔の秒数を示しています。これは、現在サポートされている唯一の値です。

    注記

    同じ ConfigDocument オプション設定で、CloudWatchMetricsRules を組み合わせることができます。Rules については、環境の拡張ヘルスルールの設定 で説明しています。

    以前に Rules を使用して拡張ヘルスルールを設定している場合、eb config save コマンドを使用して取得される設定ファイルには、既に Rules セクションに ConfigDocument キーがあります。削除しないでください。同じ ConfigDocument オプション値に CloudWatchMetrics セクションを追加します。

  6. 設定ファイルを保存し、テキストエディタを閉じます。この例では、更新した設定ファイルは、ダウンロードした設定ファイルとは異なる名前 (02-cloudwatch-enabled.cfg.yml) で保存されています。このファイルがアップロードされると、別の保存済み設定が作成されます。ダウンロードしたファイル同じ名前を使用すると、新しいキーペアを作成せずに既存の設定を上書きできます。

  7. eb config put コマンドを使用して、更新した設定ファイルを Elastic Beanstalk にアップロードします。

    $ eb config put 02-cloudwatch-enabled

    保存した設定に対して eb config get コマンドと put コマンドを使用するときは、ファイル名の拡張子を含めないでください。

  8. 実行中の環境に、保存済みの設定を適用します。

    $ eb config --cfg 02-cloudwatch-enabled

    --cfg オプションは、環境に適用される名前付き設定ファイルを指定します。設定ファイルはローカルまたは Elastic Beanstalk に保存できます。指定した名前を持つ設定ファイルが両方の場所に存在する場合、EB CLI はローカルファイルを使用します。

カスタムメトリクス設定ドキュメントの提供

Amazon CloudWatch カスタムメトリクスの設定 (config) ドキュメントは、環境レベルとインスタンスレベルでパブリッシュするメトリクスのリストが含まれている JSON ドキュメントです。次の例は、使用できるすべてのカスタムメトリクスを有効にする設定ドキュメントを示しています。

{ "CloudWatchMetrics": { "Environment": { "ApplicationLatencyP99.9": 60, "InstancesSevere": 60, "ApplicationLatencyP90": 60, "ApplicationLatencyP99": 60, "ApplicationLatencyP95": 60, "InstancesUnknown": 60, "ApplicationLatencyP85": 60, "InstancesInfo": 60, "ApplicationRequests2xx": 60, "InstancesDegraded": 60, "InstancesWarning": 60, "ApplicationLatencyP50": 60, "ApplicationRequestsTotal": 60, "InstancesNoData": 60, "InstancesPending": 60, "ApplicationLatencyP10": 60, "ApplicationRequests5xx": 60, "ApplicationLatencyP75": 60, "InstancesOk": 60, "ApplicationRequests3xx": 60, "ApplicationRequests4xx": 60 }, "Instance": { "ApplicationLatencyP99.9": 60, "ApplicationLatencyP90": 60, "ApplicationLatencyP99": 60, "ApplicationLatencyP95": 60, "ApplicationLatencyP85": 60, "CPUUser": 60, "ApplicationRequests2xx": 60, "CPUIdle": 60, "ApplicationLatencyP50": 60, "ApplicationRequestsTotal": 60, "RootFilesystemUtil": 60, "LoadAverage1min": 60, "CPUIrq": 60, "CPUNice": 60, "CPUIowait": 60, "ApplicationLatencyP10": 60, "LoadAverage5min": 60, "ApplicationRequests5xx": 60, "ApplicationLatencyP75": 60, "CPUSystem": 60, "ApplicationRequests3xx": 60, "ApplicationRequests4xx": 60, "InstanceHealth": 60, "CPUSoftirq": 60 } }, "Version": 1 }

AWS CLI では、JSON オブジェクトであるオプション設定引数の Value キーの値としてドキュメントを渡します。この場合、埋め込まれているドキュメントの引用符はエスケープする必要があります。

$ aws elasticbeanstalk validate-configuration-settings --application-name my-app --environment-name my-env --option-settings '[ { "Namespace": "aws:elasticbeanstalk:healthreporting:system", "OptionName": "ConfigDocument", "Value": "{\"CloudWatchMetrics\": {\"Environment\": {\"ApplicationLatencyP99.9\": 60,\"InstancesSevere\": 60,\"ApplicationLatencyP90\": 60,\"ApplicationLatencyP99\": 60,\"ApplicationLatencyP95\": 60,\"InstancesUnknown\": 60,\"ApplicationLatencyP85\": 60,\"InstancesInfo\": 60,\"ApplicationRequests2xx\": 60,\"InstancesDegraded\": 60,\"InstancesWarning\": 60,\"ApplicationLatencyP50\": 60,\"ApplicationRequestsTotal\": 60,\"InstancesNoData\": 60,\"InstancesPending\": 60,\"ApplicationLatencyP10\": 60,\"ApplicationRequests5xx\": 60,\"ApplicationLatencyP75\": 60,\"InstancesOk\": 60,\"ApplicationRequests3xx\": 60,\"ApplicationRequests4xx\": 60},\"Instance\": {\"ApplicationLatencyP99.9\": 60,\"ApplicationLatencyP90\": 60,\"ApplicationLatencyP99\": 60,\"ApplicationLatencyP95\": 60,\"ApplicationLatencyP85\": 60,\"CPUUser\": 60,\"ApplicationRequests2xx\": 60,\"CPUIdle\": 60,\"ApplicationLatencyP50\": 60,\"ApplicationRequestsTotal\": 60,\"RootFilesystemUtil\": 60,\"LoadAverage1min\": 60,\"CPUIrq\": 60,\"CPUNice\": 60,\"CPUIowait\": 60,\"ApplicationLatencyP10\": 60,\"LoadAverage5min\": 60,\"ApplicationRequests5xx\": 60,\"ApplicationLatencyP75\": 60,\"CPUSystem\": 60,\"ApplicationRequests3xx\": 60,\"ApplicationRequests4xx\": 60,\"InstanceHealth\": 60,\"CPUSoftirq\": 60}},\"Version\": 1}" } ]'

YAML の .ebextensions 設定ファイルの場合は、JSON ドキュメントをそのまま提供できます。

option_settings: - namespace: aws:elasticbeanstalk:healthreporting:system option_name: ConfigDocument value: { "CloudWatchMetrics": { "Environment": { "ApplicationLatencyP99.9": 60, "InstancesSevere": 60, "ApplicationLatencyP90": 60, "ApplicationLatencyP99": 60, "ApplicationLatencyP95": 60, "InstancesUnknown": 60, "ApplicationLatencyP85": 60, "InstancesInfo": 60, "ApplicationRequests2xx": 60, "InstancesDegraded": 60, "InstancesWarning": 60, "ApplicationLatencyP50": 60, "ApplicationRequestsTotal": 60, "InstancesNoData": 60, "InstancesPending": 60, "ApplicationLatencyP10": 60, "ApplicationRequests5xx": 60, "ApplicationLatencyP75": 60, "InstancesOk": 60, "ApplicationRequests3xx": 60, "ApplicationRequests4xx": 60 }, "Instance": { "ApplicationLatencyP99.9": 60, "ApplicationLatencyP90": 60, "ApplicationLatencyP99": 60, "ApplicationLatencyP95": 60, "ApplicationLatencyP85": 60, "CPUUser": 60, "ApplicationRequests2xx": 60, "CPUIdle": 60, "ApplicationLatencyP50": 60, "ApplicationRequestsTotal": 60, "RootFilesystemUtil": 60, "LoadAverage1min": 60, "CPUIrq": 60, "CPUNice": 60, "CPUIowait": 60, "ApplicationLatencyP10": 60, "LoadAverage5min": 60, "ApplicationRequests5xx": 60, "ApplicationLatencyP75": 60, "CPUSystem": 60, "ApplicationRequests3xx": 60, "ApplicationRequests4xx": 60, "InstanceHealth": 60, "CPUSoftirq": 60 } }, "Version": 1 }