

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Activer la recherche de transactions
<a name="Enable-TransactionSearch"></a>

Vous pouvez activer [Recherche de transactions](CloudWatch-Transaction-Search.md) via la console ou à l’aide d’une API. La recherche de transactions est configurée pour l'ensemble du compte et fait passer tous les spans ingérés via X-Ray en mode de collecte rentable à l'aide d'[Amazon CloudWatch Pricing](https://aws.amazon.com/cloudwatch/pricing/). Par défaut, vous indexerez également 1 % des spans ingérés gratuitement sous forme de résumé des traces à des fins d'analyse, ce qui est généralement suffisant étant donné que vous disposez déjà d'une visibilité complète end-to-end sur tous les spans ingérés via Transaction Search.

## Conditions préalables
<a name="Enable-TransactionSearch-prerequisites"></a>

 Avant de pouvoir activer une recherche de transactions, vous devez créer un rôle avec les autorisations suivantes. 

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "TransactionSearchXRayPermissions",
      "Effect": "Allow",
      "Action": [
        "xray:GetTraceSegmentDestination",
        "xray:UpdateTraceSegmentDestination",
        "xray:GetIndexingRules",
        "xray:UpdateIndexingRule"
      ],
      "Resource": "*"
    },
    {
      "Sid": "TransactionSearchLogGroupPermissions",
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutRetentionPolicy"
      ],
      "Resource": [
        "arn:aws:logs:*:*:log-group:/aws/application-signals/data:*",
        "arn:aws:logs:*:*:log-group:aws/spans:*"
      ]
    },
    {
      "Sid": "TransactionSearchLogsPermissions",
      "Effect": "Allow",
      "Action": [
        "logs:PutResourcePolicy",
        "logs:DescribeResourcePolicies"
      ],
      "Resource": "*"
    },
    {
      "Sid": "TransactionSearchApplicationSignalsPermissions",
      "Effect": "Allow",
      "Action": [
        "application-signals:StartDiscovery"
      ],
      "Resource": "*"
    },
    {
      "Sid": "CloudWatchApplicationSignalsCreateServiceLinkedRolePermissions",
      "Effect": "Allow",
      "Action": "iam:CreateServiceLinkedRole",
      "Resource": "arn:aws:iam::*:role/aws-service-role/application-signals.cloudwatch.amazonaws.com/AWSServiceRoleForCloudWatchApplicationSignals",
      "Condition": {
        "StringLike": {
          "iam:AWSServiceName": "application-signals.cloudwatch.amazonaws.com"
        }
      }
    },
    {
      "Sid": "CloudWatchApplicationSignalsGetRolePermissions",
      "Effect": "Allow",
      "Action": "iam:GetRole",
      "Resource": "arn:aws:iam::*:role/aws-service-role/application-signals.cloudwatch.amazonaws.com/AWSServiceRoleForCloudWatchApplicationSignals"
    },
    {
      "Sid": "CloudWatchApplicationSignalsCloudTrailPermissions",
      "Effect": "Allow",
      "Action": [
        "cloudtrail:CreateServiceLinkedChannel"
      ],
      "Resource": "arn:aws:cloudtrail:*:*:channel/aws-service-channel/application-signals/*"
    }
  ]
}
```

------

**Note**  
 Pour utiliser Transaction Search et d'autres CloudWatch fonctionnalités, ajoutez la [CloudWatchReadOnlyAccess politique](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/CloudWatchReadOnlyAccess.html) à votre rôle. Pour plus d’informations sur la création d’un rôle, consultez [Création d’un rôle IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html). 

## Activation de la recherche de transactions dans la console
<a name="CloudWatch-Transaction-Search-EnableConsole"></a>

 La procédure suivante décrit comment activer la recherche de transactions dans la console. 

**Pour activer la recherche de transactions dans la CloudWatch console**

1. Ouvrez la CloudWatch console à l'adresse [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1.  Dans le volet de navigation, sous **Vigie applicative**, sélectionnez **Recherche de transactions**. 

1.  Sélectionnez **Activer la recherche de transactions**. 

1.  Cochez la case pour ingérer les portées sous forme de journaux structurés et entrez le pourcentage de portées à indexer. Vous pouvez indexer gratuitement 1 % des portées et modifier ce pourcentage ultérieurement en fonction de vos besoins. 

## Activation de la recherche de transactions à l’aide d’une API
<a name="CloudWatch-Transaction-Search-EnableAPI"></a>

 La procédure suivante décrit comment activer la recherche de transactions à l’aide d’une API. 

### Étape 1. Créez une politique qui accorde l'accès aux spans d'ingestion dans Logs CloudWatch
<a name="w2aac28c21c15c11b5"></a>

 Lorsque vous utilisez le AWS CLI SDK pour activer Transaction Search, vous devez configurer les autorisations à l'aide d'une politique basée sur les ressources avec. [https://docs.aws.amazon.com/xray/latest/api/API_PutResourcePolicy.html](https://docs.aws.amazon.com/xray/latest/api/API_PutResourcePolicy.html) 

**Exemple de stratégie**  
 L'exemple de politique suivant permet à X-Ray d'envoyer des traces à CloudWatch Logs 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "TransactionSearchXRayAccess",
            "Effect": "Allow",
            "Principal": {
                "Service": "xray.amazonaws.com"
            },
            "Action": "logs:PutLogEvents",
            "Resource": [
                "arn:aws:logs:us-east-1:123456789012:log-group:aws/spans:*",
                "arn:aws:logs:us-east-1:123456789012:log-group:/aws/application-signals/data:*"
            ],
            "Condition": {
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:xray:us-east-1:123456789012:*"
                },
                "StringEquals": {
                    "aws:SourceAccount": "123456789012"
                }
            }
        }
    ]
}
```

------

**Exemple de commande**  
 L'exemple suivant montre comment formater votre AWS CLI commande avec`PutResourcePolicy`. 

```
aws logs put-resource-policy --policy-name MyResourcePolicy --policy-document '{ "Version": "2012-10-17",		 	 	  "Statement": [ { "Sid": "TransactionSearchXRayAccess", "Effect": "Allow", "Principal": { "Service": "xray.amazonaws.com" }, "Action": "logs:PutLogEvents", "Resource": [ "arn:partition:logs:region:account-id:log-group:aws/spans:*", "arn:partition:logs:region:account-id:log-group:/aws/application-signals/data:*" ], "Condition": { "ArnLike": { "aws:SourceArn": "arn:partition:xray:region:account-id:*" }, "StringEquals": { "aws:SourceAccount": "account-id" } } } ]}'
```

### Étape 2. Configurez la destination des segments de trace
<a name="w2aac28c21c15c11b7"></a>

 Configurez l’ingestion des portées avec [https://docs.aws.amazon.com/xray/latest/api/API_UpdateTraceSegmentDestination.html](https://docs.aws.amazon.com/xray/latest/api/API_UpdateTraceSegmentDestination.html). 

**Exemple de commande**  
 L'exemple suivant montre comment formater votre AWS CLI commande avec`UpdateTraceSegmentDestination`. 

```
aws xray update-trace-segment-destination --destination CloudWatchLogs
```

### Étape 3. Configurez le nombre de portées à indexer
<a name="w2aac28c21c15c11b9"></a>

 Configurez le pourcentage d’échantillonnage souhaité avec [https://docs.aws.amazon.com/xray/latest/api/API_UpdateIndexingRule.html](https://docs.aws.amazon.com/xray/latest/api/API_UpdateIndexingRule.html) 

**Exemple de commande**  
 L'exemple suivant montre comment formater votre AWS CLI commande avec`UpdateIndexingRule`. 

```
aws xray update-indexing-rule --name "Default" --rule '{"Probabilistic": {"DesiredSamplingPercentage": number}}'
```

**Note**  
 Une fois la recherche de transactions activée, il faut compter dix minutes pour que les portées soient disponibles pour la recherche et l’analyse. 

### Étape 4 : Vérifier que les portées sont disponibles pour la recherche et l’analyse
<a name="w2aac28c21c15c11c11"></a>

 Pour vérifier que les portées sont disponibles pour la recherche et l’analyse, utilisez [https://docs.aws.amazon.com/xray/latest/api/API_GetTraceSegmentDestination.html](https://docs.aws.amazon.com/xray/latest/api/API_GetTraceSegmentDestination.html). 

**Exemples de commandes**  
 L'exemple suivant montre comment formater votre AWS CLI commande avec`GetTraceSegmentDestination`. 

```
aws xray get-trace-segment-destination
```

**Exemple de réponse**  
 L’exemple suivant montre la réponse à laquelle vous pouvez vous attendre lorsque la recherche de transactions est active. 

```
{
    "Destination": "CloudWatchLogs",
    "Status": "ACTIVE"
}
```

# Utilisation de la recherche de transactions avec CloudFormation
<a name="CloudWatch-Transaction-Search-Cloudformation"></a>

Vous pouvez l'utiliser CloudFormation pour activer et configurer X-Ray Transaction Search.

**Note**  
Pour créer une CloudFormation pile, consultez la section [Création de votre première pile](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/gettingstarted.walkthrough.html).

## Conditions préalables
<a name="prerequsites-transaction-search"></a>
+ Vous devez avoir accès à un AWS compte avec un utilisateur ou un rôle IAM autorisé à utiliser Amazon EC2 CloudFormation, Amazon S3 ou disposant d'un accès utilisateur administratif.
+ Vous devez disposer d’un cloud privé virtuel (VPC) ayant accès à Internet. Pour simplifier les choses, vous pouvez utiliser le VPC par défaut fourni avec votre compte. Le VPC par défaut et les sous-réseaux par défaut sont suffisants pour cette configuration.
+ Assurez-vous que la recherche de transactions est désactivée avant d'activer l'option AWS CDK ou CloudFormation.

## Activation de la recherche de transactions
<a name="enabling-transaction-search-CFN"></a>

Pour activer l'utilisation de Transaction Search CloudFormation, vous devez créer les deux ressources suivantes.
+ `AWS::Logs::ResourcePolicy`
+ `AWS::XRay::TransactionSearchConfig`

1. **Créer AWS::Logs::ResourcePolicy** — Créez une politique de ressources qui permet à X-Ray d'envoyer des traces à CloudWatch Logs

   **YAML**

   ```
   Resources:
     LogsResourcePolicy:
       Type: AWS::Logs::ResourcePolicy
       Properties:
         PolicyName: TransactionSearchAccess
         PolicyDocument: !Sub >
           {
             "Version": "2012-10-17",		 	 	 
             "Statement": [
               {
                 "Sid": "TransactionSearchXRayAccess",
                 "Effect": "Allow",
                 "Principal": {
                   "Service": "xray.amazonaws.com"
                 },
                 "Action": "logs:PutLogEvents",
                 "Resource": [
                   "arn:${AWS::Partition}:logs:${AWS::Region}:${AWS::AccountId}:log-group:aws/spans:*",
                   "arn:${AWS::Partition}:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/application-signals/data:*"
                 ],
                 "Condition": {
                   "ArnLike": {
                     "aws:SourceArn": "arn:${AWS::Partition}:xray:${AWS::Region}:${AWS::AccountId}:*"
                   },
                   "StringEquals": {
                     "aws:SourceAccount": "${AWS::AccountId}"
                   }
                 }
               }
             ]
           }
   ```

   **JSON**

   ```
   {
       "Resources": {
           "LogsResourcePolicy": {
               "Type": "AWS::Logs::ResourcePolicy",
               "Properties": {
                   "PolicyName": "TransactionSearchAccess",
                   "PolicyDocument": {
                       "Fn::Sub": "{\n  \"Version\": \"2012-10-17\",		 	 	 \n  \"Statement\": [\n    {\n      \"Sid\": \"TransactionSearchXRayAccess\",\n      \"Effect\": \"Allow\",\n      \"Principal\": {\n        \"Service\": \"xray.amazonaws.com\"\n      },\n      \"Action\": \"logs:PutLogEvents\",\n      \"Resource\": [\n        \"arn:${AWS::Partition}:logs:${AWS::Region}:${AWS::AccountId}:log-group:aws/spans:*\",\n        \"arn:${AWS::Partition}:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/application-signals/data:*\"\n      ],\n      \"Condition\": {\n        \"ArnLike\": {\n          \"aws:SourceArn\": \"arn:${AWS::Partition}:xray:${AWS::Region}:${AWS::AccountId}:*\"\n        },\n        \"StringEquals\": {\n          \"aws:SourceAccount\": \"${AWS::AccountId}\"\n        }\n      }\n    }\n  ]\n}"
                   }
               }
           }
       }
   }
   ```

1. **Créer et configurer AWS::XRay::TransactionSearchConfig** : créez la `TransactionSearchConfig` ressource pour activer la recherche de transactions.

   **YAML**

   ```
   Resources:
     XRayTransactionSearchConfig:
       Type: AWS::XRay::TransactionSearchConfig
   ```

   **JSON**

   ```
   {
     "Resources": {
       "XRayTransactionSearchConfig": {
         "Type": "AWS::XRay::TransactionSearchConfig"
       }
     }
   }
   ```

1. (Facultatif) Vous pouvez définir la propriété `IndexingPercentage` pour contrôler le pourcentage de portées qui seront indexées.

   **YAML**

   ```
   Resources:
     XRayTransactionSearchConfig:
       Type: AWS::XRay::TransactionSearchConfig
       Properties:
         IndexingPercentage: 50
   ```

   **JSON**

   ```
   {
     "Resources": {
       "XRayTransactionSearchConfig": {
         "Type": "AWS::XRay::TransactionSearchConfig",
         "Properties": {
           "IndexingPercentage": 20
         }
       }
     }
   }
   ```

   La IndexingPercentage valeur peut être définie entre 0 et 100.

## Exemples de modèles
<a name="transaction-search-CFN-examples"></a>

L'exemple suivant inclut à la fois la politique de ressources et le TransactionSearchConfig.

**YAML**

```
Resources:
  LogsResourcePolicy:
    Type: AWS::Logs::ResourcePolicy
    Properties:
      PolicyName: TransactionSearchAccess
      PolicyDocument: !Sub >
        {
          "Version": "2012-10-17",		 	 	 
          "Statement": [
            {
              "Sid": "TransactionSearchXRayAccess",
              "Effect": "Allow",
              "Principal": {
                "Service": "xray.amazonaws.com"
              },
              "Action": "logs:PutLogEvents",
              "Resource": [
                "arn:${AWS::Partition}:logs:${AWS::Region}:${AWS::AccountId}:log-group:aws/spans:*",
                "arn:${AWS::Partition}:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/application-signals/data:*"
              ],
              "Condition": {
                "ArnLike": {
                  "aws:SourceArn": "arn:${AWS::Partition}:xray:${AWS::Region}:${AWS::AccountId}:*"
                },
                "StringEquals": {
                  "aws:SourceAccount": "${AWS::AccountId}"
                }
              }
            }
          ]
        }

  XRayTransactionSearchConfig:
    Type: AWS::XRay::TransactionSearchConfig
    Properties:
      IndexingPercentage: 10
```

**JSON**

```
{
    "Resources": {
        "LogsResourcePolicy": {
            "Type": "AWS::Logs::ResourcePolicy",
            "Properties": {
                "PolicyName": "TransactionSearchAccess",
                "PolicyDocument": {
                    "Fn::Sub": "{\n  \"Version\": \"2012-10-17\",		 	 	 \n  \"Statement\": [\n    {\n      \"Sid\": \"TransactionSearchXRayAccess\",\n      \"Effect\": \"Allow\",\n      \"Principal\": {\n        \"Service\": \"xray.amazonaws.com\"\n      },\n      \"Action\": \"logs:PutLogEvents\",\n      \"Resource\": [\n        \"arn:${AWS::Partition}:logs:${AWS::Region}:${AWS::AccountId}:log-group:aws/spans:*\",\n        \"arn:${AWS::Partition}:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/application-signals/data:*\"\n      ],\n      \"Condition\": {\n        \"ArnLike\": {\n          \"aws:SourceArn\": \"arn:${AWS::Partition}:xray:${AWS::Region}:${AWS::AccountId}:*\"\n        },\n        \"StringEquals\": {\n          \"aws:SourceAccount\": \"${AWS::AccountId}\"\n        }\n      }\n    }\n  ]\n}"
                }
            }
        },
        "XRayTransactionSearchConfig": {
            "Type": "AWS::XRay::TransactionSearchConfig",
            "Properties": {
                "IndexingPercentage": 20
            }
        }
    }
}
```

Voici un exemple d'utilisation AWS CDK de TypeScript.

**CDK**

```
import * as cdk from '@aws-cdk/core';
import * as logs from '@aws-cdk/aws-logs';
import * as xray from '@aws-cdk/aws-xray';

export class XRayTransactionSearchStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // Create the resource policy
    const transactionSearchAccess = new logs.CfnResourcePolicy(this, 'XRayLogResourcePolicy', {
      policyName: 'TransactionSearchAccess',
      policyDocument: JSON.stringify({
        Version: '2012-10-17',		 	 	 
        Statement: [
          {
            Sid: 'TransactionSearchXRayAccess',
            Effect: 'Allow',
            Principal: {
              Service: 'xray.amazonaws.com',
            },
            Action: 'logs:PutLogEvents',
            Resource: [
              `arn:${this.partition}:logs:${this.region}:${this.account}:log-group:aws/spans:*`,
              `arn:${this.partition}:logs:${this.region}:${this.account}:log-group:/aws/application-signals/data:*`,
            ],
            Condition: {
              ArnLike: {
                'aws:SourceArn': `arn:${this.partition}:xray:${this.region}:${this.account}:*`,
              },
              StringEquals: {
                'aws:SourceAccount': this.account,
              },
            },
          },
        ],
      }),
    });

    // Create the TransactionSearchConfig with dependency
    const transactionSearchConfig = new xray.CfnTransactionSearchConfig(this, 'XRayTransactionSearchConfig', {
      indexingPercentage: 10,
    });

    // Add the dependency to ensure Resource Policy is created first
    transactionSearchConfig.addDependsOn(transactionSearchAccess);
  }
}
```

## Vérification de la configuration
<a name="transaction-search-verify"></a>

Après avoir déployé votre CloudFormation stack, vous pouvez vérifier la configuration à l'aide du AWS CLI.

**aws xray get-trace-segment-destination**

Une configuration réussie renverra le résultat suivant.

```
{
    "Destination": "CloudWatchLogs",
    "Status": "ACTIVE"
}
```