Fermer

septembre 20, 2022

Automatiser l’exportation des journaux CloudWatch vers S3


AWS CloudWatch est un service de surveillance unifié pour les services AWS et vos applications cloud. Utilisant AWS Cloud Watchtu peux:

  • surveiller votre compte et vos ressources AWS
  • générer un flux d’événements
  • déclencher des alarmes et des actions pour des conditions spécifiques
  • exporter manuellement les groupes de journaux CloudWatch vers un compartiment Amazon S3

L’exportation de données vers un compartiment S3 est un processus important si votre organisation doit générer des rapports sur les données CloudWatch pendant une période supérieure à la durée de conservation spécifiée. Une fois la durée de conservation expirée, les groupes de journaux sont définitivement supprimés. Dans ce cas, les exportations manuelles atténuent les risques associés à la perte de données, mais un inconvénient majeur de l’exportation manuelle des journaux, tel que défini dans Documents AWS, est que chaque compte AWS ne peut prendre en charge qu’une seule tâche d’exportation à la fois. Cette opération est réalisable si vous n’avez que quelques groupes de journaux à exporter, mais peut prendre beaucoup de temps et être sujette à des erreurs si vous devez exporter manuellement plus de 100 groupes de journaux périodiquement.

Utilisons une solution étape par étape pour automatiser le processus d’exportation de groupes de journaux plus importants vers un compartiment S3 à l’aide d’une instance Lambda pour diriger le trafic basé sur les événements CloudWatch. Vous pouvez utiliser un compartiment S3 existant ou créer une nouvelle instance S3.

Service de stockage simple d’Amazon (S3)

Connectez-vous à votre compte AWS, recherchez le service Amazon S3 et suivez ces étapes pour activer le service de stockage simple :

  1. Sélectionnez un nom significatif
  2. Sélectionnez une région AWS
  3. Conserver toutes les valeurs par défaut
    1. ACL désactivées (recommandé)
    2. Bloquer tous les accès publics (désactivé)
    3. Gestion des versions de bucket (désactiver)
    4. Cryptage par défaut (Désactiver)
  • Sélectionner Créer un compartiment (Cela crée une nouvelle instance S3 pour le stockage des données)

Image 1

Photo2

Une fois le bucket créé, vous devrez accéder à l’onglet Permissions :

Photo3

Mettre à jour le Politique de compartiment qui permet à CloudWatch de stocker des objets dans le compartiment S3. Utilisez ce qui suit pour terminer ce processus :

{
« Version »: « 2012-10-17 »,
« Déclaration »: [
        {
            “Effect”: “Allow”,
            “Principal”: {
                “Service”: “logs.YOUR-REGION.amazonaws.com”
            },
            “Action”: “s3:GetBucketAcl”,
            “Resource”: “arn:aws:s3:::BUCKET_NAME_HERE”
        },
        {
            “Effect”: “Allow”,
            “Principal”: {
                “Service”: “logs.YOUR-REGION.amazonaws.com”
            },
            “Action”: “s3:PutObject”,
            “Resource”: “arn:aws:s3:::BUCKET_NAME_HERE/*”,
            “Condition”: {
                “StringEquals”: {
                    “s3:x-amz-acl”: “bucket-owner-full-control”
                }
            }
        }
    ]
}

AWS Lambda

Le compartiment S3 est maintenant configuré pour autoriser l’écriture immédiate d’objets à partir de notre service CloudWatch. Notre prochaine étape consiste à créer une instance Lambda qui héberge le code source pour recevoir les événements CloudWatch et les stocker dans notre instance S3.

Recherchez le service Lambda dans votre compte AWS, accédez aux fonctions et sélectionnez Créer une fonction.

Photo4

Suivez ces étapes:

  1. Sélectionnez le Modèle d’auteur à partir de rien

Image5

  1. Sous Informations de base, nous devons fournir :
    1. Nom de la fonction
    2. Durée (Python 3.9)
    3. Architecture du jeu d’instructions (x86_64 défaut)

Image6

  1. Conservez les valeurs par défaut sous le rôle d’exécution et la liste déroulante des paramètres avancés, puis sélectionnez Créer une fonction

Photo7

Script Python (Pseudocode)

Le script Python importe le module boto3 aws-sdk pour créer, configurer et gérer les services AWS avec un module os et time. Nous instancions une nouvelle instance des journaux CloudWatch et une nouvelle instance du magasin de paramètres AWS Systems Manager. Dans la méthode du gestionnaire lambda, nous initialisons un objet vide et deux tableaux vides. L’objet vide peut être utile si nous nous soucions uniquement de cibler un préfixe de nom de groupe de journaux spécifique.

Notre premier tableau cible tous les groupes de journaux, et le second tableau est utilisé pour déterminer les groupes de journaux à exporter. Nous vérifions ensuite si la variable d’environnement du compartiment S3 existe, sinon nous renvoyons une erreur. Sinon, nous entrons dans une série de boucles. La première boucle appellera la méthode AWS DescribeLogGroups et les ajoutera à notre tableau de groupes de journaux initial. Une fois tous les groupes de journaux ajoutés, nous commençons notre deuxième boucle qui recherche la balise ExportToS3 dans le tableau initial des groupes de journaux. Si cette balise existe, nous mettons à jour le deuxième tableau avec les groupes de journaux qui doivent être exportés.

La boucle finale itère sur le deuxième tableau et utilise le nom du groupe de journaux comme préfixe pour la recherche dans le magasin de paramètres. Si une correspondance est trouvée, nous vérifions alors la valeur temporelle stockée et la comparons à notre heure actuelle. Si 15 minutes se sont écoulées, nous mettons à jour le compartiment S3 avec nos données, puis mettons à jour la valeur Parameter Store avec l’heure actuelle.

  1. Sélectionnez Déployer pour enregistrer nos modifications de code, puis accédez à l’onglet Configuration

Photo8

  1. Nous devons maintenant créer une variable d’environnement qui référence le bucket S3 où nos événements CloudWatch seront stockés

Image9

Noter: La clé doit être définie sur S3_BUCKET et la valeur définie sur le nom de votre compartiment S3. Ceci est référencé dans le code lambda et devra être défini avant d’invoquer cette fonction.

  1. Notre prochain plan d’action consiste à mettre à jour le rôle d’exécution de base du lambda. Cela permet à notre autorisation lambda d’effectuer des opérations de lecture/mise à jour sur des services AWS distincts. Utilisez ce qui suit pour terminer le processus :

{

« Version »: « 2012-10-17 »,

« Déclaration »: [

        {

            “Sid”: “VisualEditor0”,

Amazon Web Services - Avoid Contact Center Outages: Plan Your Upgrade to Amazon Connect

            “Effect”: “Allow”,

            “Action”: [

                “logs:ListTagsLogGroup”,

                “logs:DescribeLogGroups”,

                “logs:CreateLogGroup”,

                “logs:CreateExportTask”,

                “ssm:GetParameter”,

                “ssm:PutParameter”

            ],

« Ressource »: « arn:aws:logs:{votre-région} :{votre numéro de compte aws} :* »

},

{

« Sid »: « ÉditeurVisuel1 »,

« Effet »: « Autoriser »,

« Action »: [

                “logs:ListTagsLogGroup”,

                “logs:CreateLogStream”,

                “logs:DescribeLogGroups”,

                “logs:PutLogEvents”,

                “logs:CreateExportTask”,

                “ssm:GetParameter”,

                “ssm:PutParameter”,

                “s3:PutObject”,

                “s3:PutObjectAcl”

            ],

« Ressource »: « arn:aws:logs:{votre région} :{votre numéro de compte aws}:log-group:/aws/lambda/{ Nom de la fonction} :* »

},

{

« Sid »: « ÉditeurVisuel2 »,

« Effet »: « Autoriser »,

« Action »: « ssm:DescribeParameters »,

« Ressource »: « * »

},

{

« Sid »: « ÉditeurVisuel3 »,

« Effet »: « Autoriser »,

« Action »: [

                “ssm:GetParameter”,

                “ssm:PutParameter”

            ],

« Ressource »: « arn:aws:ssm:{ votre région } :{numéro de compte aws}:parameter/log-exporter-* »

},

{

« Sid » : « ÉditeurVisuel4 »,

« Effet »: « Autoriser »,

« Action »: [

                “s3:PutObject”,

                “s3:PutObjectAcl”,

                “s3:GetObject”,

                “s3:GetObjectAcl”,

                “s3:DeleteObject”

            ],

« Ressource »: [

                “arn:aws:s3:::{aws bucket name}”,

                “arn:aws:s3:::{aws bucket name}/*”

            ]

}

]

}

Magasin de paramètres AWS

Maintenant que le bucket S3 et le Lambda sont complètement configurés, nous pouvons nous tourner vers le service AWS appelé Magasin de paramètres qui fournit un stockage sécurisé et hiérarchique pour la gestion des données de configuration et la gestion des secrets. Ce service est fourni à titre indicatif uniquement, car notre méthode lambda prend en charge la configuration initiale et les conventions de dénomination de ce service. Lorsqu’un événement CloudWatch est déclenché, notre code fait référence à Parameter Store pour déterminer si 15 minutes se sont écoulées depuis le dernier stockage de données dans notre compartiment S3. La première invocation définira la valeur de stockage des paramètres sur 0, puis vérifiera/mettra à jour cette valeur avec chaque événement récurrent sur des limites de 15 minutes. Les données ne sont jamais écrasées et notre configuration initiale fonctionne parfaitement sans aucune intervention de l’utilisateur.

Déclencheurs Lambda

Nous allons rediriger vers notre instance Lambda et effectuer une dernière mise à jour sous le Configuration > Déclencheurs languette

Photo10

  1. Sélectionner Ajouter un déclencheur
  2. Remplissez les champs suivants puis sélectionnez Ajouter
    1. CloudWatch Logs (cliquez sur le curseur pour sélectionner le menu déroulant et sélectionner le bon service)
    2. Groupe de journaux
    3. Nom du filtre

Photo11

Photo12

  1. Répétez les étapes 1 et 2 pour chaque groupe de journaux requis pour le stockage S3.

Noter: L’étape précédente et la suivante sont exécutées dans cet ordre pour éviter d’écrire des données dans le compartiment S3 pour un environnement actif.

Balises CloudWatch

Notre code n’exportera que les groupes de journaux contenant une balise et cette opération ne peut être effectuée qu’à partir d’un terminal. Faire référence à CLI AWS pour en savoir plus sur la configuration de l’accès à la ligne de commande (CLI) pour votre environnement AWS. Une fois l’accès à la ligne de commande terminé, nous pouvons configurer chaque groupe de journaux nécessitant une exportation via la ligne de commande. Utilisez la commande suivante pour terminer ce processus :

aws –region us-west-2 logs tag-log-group –log-group-name /api/aws/connect –tags ExportToS3=true

Nous sommes maintenant automatiquement configurés pour exporter les groupes de journaux CloudWatch vers notre compartiment S3 !

Solution AWS livrée

Nous avons choisi ServicesAWS en raison de sa flexibilité et de sa capacité à générer des résultats sur le marché en temps opportun. En attirant notre attention sur AWS Cloud, nous avons pu exporter efficacement des données vers un compartiment S3 piloté par des événements CloudWatch.

Nous contacter

Chez Perficient, nous sommes unPartenaire de conseil avancé APN pour Amazon Connectce qui nous donne un ensemble unique de compétences pour accélérer votre expérience cloud, agent et client.

Perficient est fier de notre approche personnelle du parcours client où nous aidons les entreprises clientes à transformer et à moderniser leur centre de contact et leur expérience CRM avec des plateformes comme Amazon Connect. Pour plus d’informations sur la façon dont Perficient peut vous aider à tirer le meilleur parti d’Amazon Lex, veuillezcontactez-nous ici.






Source link

septembre 20, 2022