Comment résoudre les problèmes liés aux journaux CloudWatch afin qu'ils soient diffusés vers mon domaine OpenSearch Service ?

Lecture de 7 minute(s)
0

Je ne parviens pas à diffuser mes journaux Amazon CloudWatch vers mon domaine Amazon OpenSearch Service.

Résolution

Je ne parviens pas à diffuser plusieurs groupes de journaux CloudWatch vers le même domaine OpenSearch Service

Par défaut, Amazon CloudWatch crée une seule fonction AWS Lambda pour chaque domaine OpenSearch Service. Si vous configurez plusieurs groupes de journaux pour indexer les données dans votre domaine, ils invoquent tous la même fonction Lambda. Lorsque le premier groupe de journaux appelle une fonction Lambda, l'invocation crée un index et un champ type dans votre domaine.

Les index créés dans OpenSearch Service 6.0.0 ou version ultérieure ne peuvent contenir qu'un seul type de mappage. Les index créés dans la version 5.x avec plusieurs types de mappage continuent de fonctionner dans OpenSearch Service 6.x. Pour plus d'informations sur l'obsolescence des types de mappage d'OpenSearch Service, consultez la section Suppression des types de mappage sur le site Web d'Elastic.

Lorsque d'autres groupes de journaux tentent d'appeler la même fonction Lambda, l'appel échoue avec l'erreur suivante :

"reason": "Rejecting mapping update to [<index_name>] as the final mapping would have more than 1 type: [log-group-1, log-group-2]” (« raison: » « Refus de la mise à jour du mappage vers [<index_name>] car le mappage final comporterait plus d’1 type : [log-group-1, log-group-2] »)

Pour résoudre ce problème, commencez par mettre à jour votre fonction Lambda avec la syntaxe suivante :

var indexName = [
     'cwl-' + payload.logGroup.toLowerCase().split('/').join('-') + '-' + timestamp.getUTCFullYear(),
     ('0' + (timestamp.getUTCMonth() + 1)).slice(-2),
     ('0' + timestamp.getUTCDate()).slice(-2)
     ].join('.');

Cette syntaxe crée plusieurs index pour les différents groupes de journaux qui sont diffusés dans votre domaine OpenSearch Service.

Enregistrez la fonction Lambda mise à jour afin de créer des index distincts pour les différents groupes de journaux qui sont diffusés dans votre domaine.

Je ne parviens pas à diffuser vers un domaine OpenSearch Service basé sur VPC avec le même compte AWS

Important : Avant de diffuser les groupes de journaux CloudWatch vers votre domaine OpenSearch Service basé sur votre cloud privé virtuel (VPC), mettez à jour votre politique de rôle AWS Identity and Access Management (IAM). Le rôle IAM attaché à la fonction Lambda correspondante doit être associé à la politique AWSLambdaVPCAccessExecutionRole.

Voici une politique AWSLambdaVPCAccessExecutionRole au format JSON :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "ec2:CreateNetworkInterface",
        "ec2:DescribeNetworkInterfaces",
        "ec2:DeleteNetworkInterface"
      ],
      "Resource": "*"
    }
  ]
}

Remarque : Cette politique gérée permet à la fonction Lambda d'écrire le groupe de journaux CloudWatch sur votre cluster dans le VPC.

Après avoir associé la politique à votre fonction Lambda, vous pouvez commencer à diffuser les journaux vers votre domaine OpenSearch Service dans le VPC.

Je ne parviens pas à diffuser mon groupe de journaux CloudWatch vers un domaine OpenSearch Service lorsque le contrôle d'accès précis est activé

Si vous diffusez vos journaux CloudWatch vers un domaine OpenSearch Service avec un contrôle d'accès précis, vous pouvez recevoir une erreur similaire à la suivante :

« "{\"statusCode\":403,\"responseBody\":{\"error\":{\"root_cause\":[{\"type\":\"security_exception\",\"reason\":\« aucune autorisation pour [indices:data/write/bulk] et l'utilisateur [name=arn:aws:iam::123456789101:role/lambda_opensearch_execution, roles=[arn:aws:iam::123456789101:role/lambda_opensearch_execution], requestTenant=null]\"}],\"type\":\"security_exception\",\"reason\":\« aucune autorisation pour [indices:data/write/bulk] et utilisateur [name=arn:aws:iam::123456789101:role/lambda_opensearch_execution, roles=[arn:aws:iam::123456789101:role/lambda_opensearch_execution], requestedTenant=null]\"},\"status\":403}} »

Si vous avez reçu ce message d'erreur depuis vos journaux de fonctions Lambda, cela signifie que le mappage des rôles est incomplet.

Remarque : Par défaut, OpenSearch Service crée une fonction Lambda pour vous.

Domaines OpenSearch Service exécutant la version 7.9 et versions ultérieures (y compris OpenSearch version 1.x)

Pour résoudre le message d'erreur, procédez comme suit :

1.    Ouvrez les tableaux de bord OpenSearch. Vous trouverez un lien vers les tableaux de bord OpenSearch dans le résumé du domaine de votre console OpenSearch Service.

2.    Dans le volet de navigation, choisissez Sécurité.

3.    Choisissez Rôles.

4.    Choisissez le rôle all_access.

5.    Choisissez l'onglet Utilisateurs mappés.

6.    Sur la page de dialogue Utilisateurs mappés, choisissez Gérer le mappage.

7.    Sous Rôles principaux, entrez l'ARN du rôle d'exécution de la fonction Lambda.

8.    Choisissez Carte. Vos journaux sont désormais diffusés vers votre domaine OpenSearch Service.

Pour plus d'informations sur le mappage des rôles, consultez la section Mappage des rôles aux utilisateurs.

Domaines OpenSearch Service exécutant la version 7.8 et les versions antérieures

Pour résoudre le message d'erreur, procédez comme suit :

1.    Ouvrez les tableaux de bord OpenSearch. Vous trouverez un lien vers les tableaux de bord OpenSearch dans le résumé du domaine de votre console OpenSearch Service.

2.    Dans le volet de navigation, choisissez l'icône en forme de cadenas.

3.    Choisissez Mappages de rôles.

4.    Choisissez all_access et security_manager comme rôles.

Remarque : Le rôle all_access permet d'accéder uniquement à votre cluster. En fonction de votre cas d'utilisation, vous pouvez également ajouter un contrôle d'accès précis à votre cluster.

5.    Modifiez le mappage pour all_access.

6.    Pour le Rôle de backend, ajoutez le rôle d'exécution de la fonction Lambda et cliquez sur Envoyer. Vos journaux sont désormais diffusés vers votre domaine OpenSearch Service.

Mes journaux CloudWatch ne sont pas transmis à mon domaine OpenSearch Service

Lorsque vous utilisez la fonction Lambda par défaut pour diffuser les journaux CloudWatch vers votre domaine OpenSearch Service, l'erreur suivante peut s'afficher :

« "errorMessage": "{\"statusCode\":200,\"responseBody\":{\"took\":42,\"errors\":true}}", »

**Remarque :**Par défaut, les erreurs Lambda sont renvoyées sous la forme de réponses 200 OK.

Pour résoudre ce message d'erreur, procédez comme suit :

1.    Ouvrez la fonction Lambda par défaut.

2.    Trouvez la ligne de code suivante :

"var logFailedResponses = false;"

3.    Mettez à jour la valeur var logFailedResponses sur vrai. Cette mise à jour fournit des informations supplémentaires pour toute nouvelle demande d'indexation utilisant la fonction Lambda. Vous pouvez utiliser les informations supplémentaires pour identifier la cause de votre problème d'indexation.

Je reçois une erreur cluster_block_exception

Un manque d'espace de stockage libre ou une pression excessive sur la mémoire JVM entraînent des exceptions de blocage du cluster.

Pour plus d'informations, consultez Comment puis-je résoudre les problèmes de forte sollicitation de la mémoire JVM sur mon cluster Amazon OpenSearch Service ?

Mon filtre d'abonnement CloudWatch ne parvient pas à envoyer des données à mon cluster via une fonction Lambda par défaut (OpenSearch Service 2.0 et versions ultérieures)

Si vous disposez d'un filtre d'abonnement CloudWatch pour envoyer des journaux à OpenSearch Service 2.x à l'aide de la fonction Lambda par défaut, une erreur peut s'afficher. Si le filtre d'abonnement ne parvient pas à ingérer les journaux et que vous obtenez l'erreur suivante, cela signifie qu'un paramètre désactivé est à l'origine de l'erreur :

« {\"statusCode\":400,\"responseBody\":{\"error\":{\"root_cause\":[{\"type\":\"illegal_argument_exception\",\"reason\":\"Action/metadata line [1] contient un paramètre inconnu [_type]\"}],\"type\":\"illegal_argument_exception\",\"reason\":\"Action/metadata line [1] contient un paramètre inconnu [_type]\"},\"status\":400}} »

Dans les versions 2.0 et ultérieures d'OpenSearch Service, le paramètre _type est supprimé des points de terminaison de l'API. Pour résoudre cette erreur, vous devez également supprimer le paramètre du code de votre fonction Lambda.

1.    Ouvrez la console AWS Lambda.

2.    Sélectionnez la fonction Lambda par défaut pour votre filtre d'abonnement.

3.    Consultez le code de votre fonction sous Code source.

4.    Trouvez la fonction transformation définie dans le code. Dans cette fonction, les données sont converties au format d'indexation JSON pour OpenSearch Service. Les premières lignes de ce code sont similaires au code suivant :

function transform(payload) {
    if (payload.messageType === 'CONTROL_MESSAGE') {
        return null;
    }

    var bulkRequestBody = '';

    payload.logEvents.forEach(function(logEvent) {
                var timestamp = new Date(1 * logEvent.timestamp);

5.    Sous la fonction transformation, recherchez le paramètre _type. Dans la plupart des cas, il s'agit de la ligne 79. Supprimez ou commentez la ligne de code qui ajoute le paramètre _type. Après la suppression, votre code est similaire au code suivant :

var action = {
    "index": {}
};
action.index._index = indexName;
//action.index._type = payload.logGroup;
action.index._id = logEvent.id;

bulkRequestBody += [

Vous pouvez désormais envoyer des demandes d'indexation avec succès.

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an