メニュー
AWS Elastic Beanstalk
開発者ガイド (API Version 2010-12-01)

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

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

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

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

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

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

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

インスタンスのみが対象。インスタンスの現在のヘルスステータスを示します。

RootFilesystemUtil

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

CPUIrq
CPUUser
CPUIdle
CPUSystem
CPUSoftirq
CPUIowait
CPUNice

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

AWS マネジメントコンソールでの CloudWatch メトリクスの設定

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

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

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

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

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

  4. [Health] パネルの [Web Tier] で、以下を選択します。 (編集).

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

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: で、ConfigDocument キーを追加して、CloudWatch メトリクスを個別に有効にします。たとえば、次に示す ConfigDocument は、環境レベルで ApplicationRequests5xx メトリクスと ApplicationRequests4xx メトリクスをパブリッシュし、インスタンスレベルで ApplicationRequestsTotal メトリクスをパブリッシュします。

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

    注記

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

  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 カスタムメトリクスの設定ドキュメントは、環境レベルとインスタンスレベルでパブリッシュするメトリクスのリストが含まれている 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
}