Dilip vous montre comment traiter
les journaux Amazon CloudFront à l'aide d'
Amazon Elasticsearch Service

dilip_cloudfront_logs_elasticsearch

Je souhaite créer des rapports personnalisés à l'aide des journaux d'accès depuis ma distribution Amazon CloudFront. Comment puis-je traiter les journaux CloudFront avec Amazon Elasticsearch Service (Amazon ES) afin de pouvoir créer des rapports personnalisés ?

Pour traiter des journaux CloudFront à l'aide d'Amazon ES, procédez comme suit :

  1. Créez un domaine Amazon ES et un compartiment Amazon Simple Storage Service (Amazon S3) dans la même région AWS.
  2. Configurez votre distribution CloudFront pour stocker les journaux d'accès dans le compartiment Amazon S3.
  3. Configurez une instance Amazon Elastic Compute Cloud (Amazon EC2) pour utiliser Logstash et traiter les journaux CloudFront et les envoyer vers le domaine Amazon ES.

Créer un domaine Amazon ES et un compartiment Amazon S3 dans la même région AWS

Pour traiter les journaux CloudFront à l'aide d'Amazon ES, vous devez d'abord configurer ces ressources dans la même région AWS :

Configurer votre distribution CloudFront pour stocker les journaux d'accès dans le compartiment Amazon S3

  1. Ouvrez la console Amazon CloudFront.
  2. Sélectionnez votre distribution CloudFront, puis Paramètres de distribution.
  3. Dans la vue Général, sélectionnez Modifier, puis procédez comme suit :
    Pour l'option Journalisation, sélectionnez Activé.
    Pour Compartiment pour les journaux, sélectionnez le compartiment S3 qui se trouve dans la même région AWS que votre domaine Amazon ES.
    Dans le champ Préfixe de journal, saisissez un préfixe pour les noms des journaux.
  4. Sélectionnez Oui, modifier.

Remarque : un délai de 24 heures peut être nécessaire avant que vos requêtes de journaux ne soient délivrées au compartiment S3.

Configurer une instance Amazon EC2 pour utiliser Logstash et traiter les journaux CloudFront, puis les envoyer vers le domaine Amazon ES

1.    Lancez une instance Amazon EC2.
Remarque : cette instance doit utiliser un rôle AWS Identity and Access Management (IAM) ayant accès à Amazon S3 (objet GET) et à Amazon ES (document PUT). Pour plus d'informations, consultez la section Création de rôles IAM.

2.    Connectez-vous à l'instance à l'aide de SSH.

3.    Installez Java 8 sur l'instance (cette version est requise pour l'exécution de Logstash). Pour plus d'informations, consultez la section Installation de Logstash sur le site web Elastic.

4.    Exécutez cette commande pour télécharger le client Logstash sur l'instance :

wget https://artifacts.elastic.co/downloads/logstash/logstash-5.5.0.tar.gz

5.    Exécutez cette commande pour extraire le client Logstash :

tar xvf logstash-5.5.0.tar.gz

6.    Exécutez cette commande pour installer le module d'extension Logstash pour Amazon ES :

cd logstash-5.5.0
bin/logstash-plugin install logstash-output-amazon_es

7.    Créez un fichier au format JSON afin de l'utiliser en tant que modèle pour la sortie Logstash. Le fichier modèle peut être similaire à l'exemple qui suit :
Remarque : assurez-vous de modifier le modèle selon vos besoins en matière de rapports.

cloudfront.template.json

#cloudfront.template.json
{
  "template": "cloudfront-logs-*",
  "mappings": {
    "logs": {
      "_source": {
        "enabled": false
      },
      "_all": {
        "enabled": false
      },
      "dynamic_templates": [
        {
          "string_fields": {
            "mapping": {
              "index": "not_analyzed",
              "type": "string"
            },
            "match_mapping_type": "string",
            "match": "*"
          }
        }
      ],
      "properties": {
        "geoip": {
          "dynamic": true,
          "properties": {
            "ip": {
              "type": "ip"
            },
            "location": {
              "type": "geo_point"
            },
            "latitude": {
              "type": "float"
            },
            "longitude": {
              "type": "float"
            }
          }
        }
      }
    }
  }
}

8.    Créez un fichier de configuration Logstash pour définir le compartiment S3 avec les journaux CloudFront comme entrée, et le domaine Amazon ES comme sortie. Le fichier de configuration JSON peut être similaire à l'exemple qui suit :

cloudfront.conf

#cloudfront.conf
input {
  s3 {
    bucket => "{CLOUDFRONT_LOG_BUCKET}"
    prefix => "{CLOUDFRONT_LOG_KEY_PREFIX}"
    region => "{BUCKET_REGION_NAME}"
  }
}


filter {
  grok {
    match => { "message" => "%{DATE_EU:date}\t%{TIME:time}\t%{WORD:x_edge_location}\t(?:%{NUMBER:sc_bytes:int}|-)\t%{IPORHOST:c_ip}\t%{WORD:cs_method}\t%{HOSTNAME:cs_host}\t%{NOTSPACE:cs_uri_stem}\t%{NUMBER:sc_status:int}\t%{GREEDYDATA:referrer}\t%{GREEDYDATA:User_Agent}\t%{GREEDYDATA:cs_uri_stem}\t%{GREEDYDATA:cookies}\t%{WORD:x_edge_result_type}\t%{NOTSPACE:x_edge_request_id}\t%{HOSTNAME:x_host_header}\t%{URIPROTO:cs_protocol}\t%{INT:cs_bytes:int}\t%{GREEDYDATA:time_taken}\t%{GREEDYDATA:x_forwarded_for}\t%{GREEDYDATA:ssl_protocol}\t%{GREEDYDATA:ssl_cipher}\t%{GREEDYDATA:x_edge_response_result_type}" }
  }

  mutate {
    add_field => [ "listener_timestamp", "%{date} %{time}" ]
  }

  date {
    match => [ "listener_timestamp", "yy-MM-dd HH:mm:ss" ]
    target => "@timestamp"
  }

  geoip {
    source => "c_ip"
  }

  useragent {
    source => "User_Agent"
    target => "useragent"
  }

  mutate {
    remove_field => ["date", "time", "listener_timestamp", "cloudfront_version", "message", "cloudfront_fields", "User_Agent"]
  }
}

output {
  amazon_es {
    hosts => ["{AMAZON_ES_DOMAIN_ENDPOINT}"]
    region => "{AMAZON_ES_DOMAIN_REGION_NAME}"
    index => "cloudfront-logs-%{+YYYY.MM.dd}"
    template => "/path-to-file/cloudfront.template.json"
  }
}

9.    Utilisez un éditeur de texte tel que vi pour modifier les valeurs suivantes dans votre fichier de configuration :
Dans le champ compartiment, saisissez le nom du compartiment S3 qui stocke les journaux CloudFront.
Dans le champ Préfixe, saisissez le préfixe que vous avez spécifié comme Préfixe de journal lorsque vous avez activé la journalisation sur votre distribution CloudFront.
Dans le champ Région, saisissez la région AWS du compartiment S3 et le domaine Amazon ES.
Dans le champ Hôtes, saisissez le point de terminaison de votre domaine Amazon ES.
Dans le champ Modèle, saisissez le chemin d'accès vers le fichier modèle que vous avez créé.

10.    Enregistrez les modifications que vous avez apportées au fichier de configuration.

11.    Exécutez Logstash avec l'option -f et indiquez le fichier de configuration que vous avez créé. Pour plus d'informations, consultez la page Command-Line Flags du site Web Elastic.

Une fois que vous avez suivi l'ensemble de ces étapes, Logstash publiera les documents sur le domaine Amazon ES que vous avez spécifié. Pour vous assurer que les documents sont correctement publiés, ouvrez le domaine Amazon ES depuis la console Amazon ES, puis vérifiez la vue Indexes.

Vous pouvez désormais utiliser Kibana pour créer des rapports et des visualisations personnalisés pour vos journaux. Pour plus d'informations, consultez la section Kibana et Logstash.

Remarque : vous devrez peut-être configurer une stratégie d'accès afin de garantir l'accès de Kibana aux journaux stockés dans votre domaine Amazon ES.


Cette page vous a-t-elle été utile ? Oui | Non

Retour au Centre de connaissances AWS Support

Vous avez besoin d'aide ? Consultez le site d'AWS Support Center

Date de publication : 09/01/2018

Date de mise à jour : 12/02/2019