

# CloudWatch Application Signals を有効にする
<a name="CloudWatch-Agent-Application_Signals"></a>

CloudWatch Application Signals を使用すると、AWS 上でアプリケーションを自動的に計測して、ビジネス目標に照らしてアプリケーションのパフォーマンスを追跡できます。Application Signals では、Java アプリケーションとその依存関係やエッジをアプリケーション中心の統合ビューで把握できます。詳細については、「[Application Signals](CloudWatch-Application-Monitoring-Sections.md)」を参照してください。

CloudWatch Application Signals は、CloudWatch エージェントを利用して、自動計測されたアプリケーションからメトリクスとトレースを受け取ります。必要に応じて、ルールを適用して高基数を減らしてから、処理済みのテレメトリを CloudWatch に公開できます。エージェント設定ファイルを使用すると、設定を特に Application Signals 向けにカスタマイズしてから CloudWatch エージェントに提供できます。エージェント設定ファイルでは `logs` セクション内の `metrics_collected` セクションに `application_signals` セクションがあり、CloudWatch エージェントが自動計測されたアプリケーションからメトリクスを受け取ることを指定しています。同様に、`traces` セクション内の `traces_collected` セクションに `application_signals` セクションがあり、CloudWatch エージェントが自動計測されたアプリケーションからトレースを受け取ることを指定しています。さらに、ここで説明しているように、必要に応じてカスタム設定ルールを渡して、公開する高基数テレメトリを減らすことができます。
+ Amazon EKS クラスターの場合、[Amazon CloudWatch Observability](install-CloudWatch-Observability-EKS-addon.md) EKS アドオンをインストールすると、デフォルトで CloudWatch エージェントが自動計測されたアプリケーションからメトリクスとトレースの両方を受け取るようになります。カスタム設定ルールを渡すことにした場合は、[(オプション) その他の設定](install-CloudWatch-Observability-EKS-addon.md#install-CloudWatch-Observability-EKS-addon-configuration) で説明しているように、別途必要な設定を行ってそのルールを作成または更新するときに、Amazon EKS アドオンにカスタムエージェント設定を渡します。
+ RedHat for OpenShift on AWS (ROSA) の場合、Helm チャートを使用して CloudWatch エージェントオペレータをインストールすると、CloudWatch エージェントはデフォルトで有効になり、自動計測されたアプリケーションからメトリクスとトレースの両方を受信できるようになります。必要に応じてカスタム設定ルールを渡すようにする場合は、[(オプション) その他の設定](install-CloudWatch-Observability-EKS-addon.md#install-CloudWatch-Observability-EKS-addon-configuration) で説明されているように、Helm チャートを使用してカスタムエージェント設定を渡します。
+ Amazon EC2 などサポートされているその他のプラットフォームの場合、CloudWatch エージェントを起動するには、Application Signals を有効にするようにエージェントを設定しておく必要があります。そのためにはこの後で説明しているように、`application_signals` セクションを指定し、さらに必要に応じてカスタム設定ルールを指定します。

次に、CloudWatch エージェント設定ファイルにあるフィールドのうち、CloudWatch Application Signals に関連するフィールドの概要を示します。
+ `logs`
  + `metrics_collected` - このフィールドには、エージェントにログ収集を指示するセクションを含めることができます。CloudWatch Application Signals と Container Insights のオブザーバビリティを Amazon EKS 向けに強化するといったユースケースを利用できるようになります。
**注記**  
以前このセクションは、エージェントが埋め込みメトリクス形式のログを収集するように指定するためにも使用されていました。それらの設定はもう必要ありません。
    + `application_signals` (オプション) CloudWatch Application Signals を有効にして、自動計測されたアプリケーションからメトリクスを受け取るよう指定し、CloudWatch Application Signals を利用しやすくします。
      + `rules` (オプション) 高基数を使用する状況に対応できるように、条件に従ってメトリクスとトレースを選択してアクションを適用する一連のルール。各ルールに次のフィールドの要素を含めることができます。
        + `rule_name` (オプション) ルールの名前。
        + `selectors` (オプション) メトリクスとトレースの一連のディメンションマッチャー。各セレクターでは、以下のフィールドを指定する必要があります。
          + `dimension` `selectors` が空でない場合は必須です。フィルターとして使用するメトリクスとトレースのディメンションを指定します。
          + `match` `selectors` が空でない場合は必須です。指定したディメンションの値のマッチングに使用されるワイルドカードパターン。
        + `action` (オプション) 指定したセレクターに一致したメトリクスとトレースに適用するアクション。`action` の値は、次のキーワードのいずれかにする必要があります。
          + `keep` メトリクスとトレースを `selectors` に一致した場合にのみ CloudWatch に送信するように指定します。
          + `drop` `selectors` に一致するメトリクスとトレースをドロップするように指定します。
          + `replace` `selectors` に一致するメトリクスとトレースのディメンションを置き換えるように指定します。`replacements` セクションに従って置き換えられます。
        + `replacements` `action` が `replace` の場合は必須です。`action` が `replace` の場合に、指定した `selectors` に一致するメトリクスとトレースに適用される一連のディメンションと値のペア。置き換えを行うには、以下のフィールドを指定する必要があります。
          + `target_dimension` `replacements` が空でない場合は必須です。置き換える必要があるディメンションを指定します。
          + `value` `replacements` が空でない場合は必須です。置き換え対象の値 `target_dimension` をこの値に置き換えます。
      + `limiter` (オプション) このセクションを使用して、Application Signals が CloudWatch に送信するメトリクスとディメンションの数を制限し、コストを最適化します。
        + `disabled` (オプション) `true` の場合、メトリクス制限機能は無効になります。デフォルトは `false` です。
        + `drop_threshold` (オプション) 1 つの CloudWatch エージェントがエクスポートできる、1 つのローテーション間隔におけるサービスごとの個別メトリクスの最大数。デフォルトは 500 です。
        + `rotation_interval` (オプション) リミッターが区別してカウントするためにメトリクスレコードをリセットする間隔。これは、一連の数字と単位サフィックスを使用する文字列として表されます。分数がサポートされています。サポートされている単位サフィックスは、`s`、`m`、`h`、`ms`、`us`、`ns` です。デフォルトは 1 時間の `1h` です。
        + `log_dropped_metrics` (オプション) Application Signals のメトリクスがドロップされたときに、エージェントが CloudWatch エージェントログにログを書き込む必要があるかどうかを指定します。デフォルトは `false` です。
**注記**  
このログ記録を有効にするには、`agent` セクションの `debug` パラメータも `true` に設定する必要があります。
+ `traces`
  + `traces_collected`
    + `application_signals` オプション。このフィールドを指定すると、CloudWatch Application Signals を利用しやすくするために、CloudWatch エージェントが自動計測されたアプリケーションからメトリクスを受け取るようにできます。

**注記**  
カスタムの `application_signals` ルールは、`logs` セクションに含まれている `metrics_collected` セクションの下に指定している場合でも、`traces_collected` セクションに暗黙的に適用されます。同じルールセットがメトリクスとトレースの両方に適用されます。

アクションの異なるルールが複数ある場合は、`keep`、`drop`、`replace` という順序で適用されます。

次に、CloudWatch エージェント設定ファイルでカスタムルールを適用する場合の設定例を示します。

```
{
  "logs": {
    "metrics_collected": {
      "application_signals": {
        "rules": [
          {
            "rule_name": "keep01",
            "selectors": [
              {
                "dimension": "Service",
                "match": "pet-clinic-frontend"
              },
              {
                "dimension": "RemoteService",
                "match": "customers-service"
              }
            ],
            "action": "keep"
          },
          {
            "rule_name": "drop01",
            "selectors": [
              {
                "dimension": "Operation",
                "match": "GET /api/customer/owners/*"
              }
            ],
            "action": "drop"
          },
          {
            "rule_name": "replace01",
            "selectors": [
              {
                "dimension": "Operation",
                "match": "PUT /api/customer/owners/*/pets/*"
              },
              {
                "dimension": "RemoteOperation",
                "match": "PUT /owners"
              }
            ],
            "replacements": [
              {
                "target_dimension": "Operation",
                "value": "PUT /api/customer/owners/{ownerId}/pets{petId}"
              }
            ],
            "action": "replace"
          }
        ]
      }
    }
  },
  "traces": {
    "traces_collected": {
      "application_signals": {}
    }
  }
}
```

この例の設定ファイルの場合、`rules` は以下のように処理されます。

1. ルール `keep01` により、ディメンション `Service` が `pet-clinic-frontend` で、ディメンション `RemoteService` が `customers-service` であるメトリクスとトレースが保持されます。

1. `keep01` の適用後、処理されたメトリクスとトレースを対象にルール `drop01` が適用され、ディメンション `Operation` が `GET /api/customer/owners/*` であるメトリクスとトレースがドロップされます。

1. `drop01` の適用後、処理されたメトリクスとトレースを対象にルール `replace01` が適用され、ディメンション `Operation` が `PUT /api/customer/owners/*/pets/*` で、ディメンション `RemoteOperation` が `PUT /owners` であるメトリクスとトレースが更新されます。その結果、`Operation` ディメンションが `PUT /api/customer/owners/{ownerId}/pets{petId}` に変更されます。

メトリクスの制限を 100 に変更し、ドロップされたメトリクスのログ記録を有効にして、ローテーション間隔を 2 時間に設定することで、Application Signals の基数を管理する CloudWatch 設定ファイルの完全な例を以下に示します。

```
{
    "logs": {
        "metrics_collected": {
            "application_signals": {
                "limiter": {
                    "disabled": false,
                    "drop_threshold": 100,
                    "rotation_interval": "2h",
                    "log_dropped_metrics": true
                }
            }
        },
        "traces": {
            "traces_collected": {
                "application_signals": {}
            }
        }
    }
}
```