# Fastly

### **Streaming des logs Fastly vers S3**

Pour envoyer les logs d'accès en temps réel de Fastly vers un bucket Amazon S3, vous pouvez configurer le **streaming de logs Fastly** en utilisant Amazon S3 comme destination. Vous trouverez ci-dessous les étapes documentées nécessaires pour configurer le streaming en temps réel vers un bucket S3 hébergé par Netacea, en utilisant la fonctionnalité de journalisation de Fastly et un format de log personnalisé répondant aux exigences de Netacea.

### **Prérequis**

Pour streamer avec succès les logs de trafic web vers Netacea, veuillez vous assurer des éléments suivants :

* Vous disposez d'un compte Fastly actif avec accès au panneau de contrôle Fastly.
* Un service Fastly est disponible et configuré pour gérer votre trafic de production.
* Vous avez reçu les informations nécessaires concernant le bucket AWS S3 (nom du bucket, région, chemin et identifiants) de la part de Netacea. Celles-ci sont disponibles [ici](https://netacea.gitbook.io/portal-docs/user-guides-and-videos/portal-setup-and-log-shipping-guide).
* Vous connaissez les champs du [jeu de données minimum requis](#netacea-minimum-dataset) nécessaires à Netacea pour l'analyse des logs.

### Envoi des données : streaming en temps réel

Cette option journalise chaque requête et livre les logs par lots. Ceci est configurable selon les exigences du POV.

### **Étapes d'implémentation**

1. Connectez-vous au [panneau de contrôle Fastly](https://manage.fastly.com/).
2. Depuis la page [Accueil](https://manage.fastly.com/home), sélectionnez le service approprié. Vous pouvez utiliser la zone de recherche pour rechercher par ID, nom ou domaine.
3. Cliquez sur **Modifier la configuration** puis sélectionnez l'option pour cloner la version active.

<figure><img src="https://899558619-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaRSpZrGcUHd5EHGjrrO5%2Fuploads%2Fgit-blob-6cbf08792a7033c58fce6d5b179a35dc20c84ad9%2Fimage%20(119).png?alt=media" alt=""><figcaption></figcaption></figure>

<figure><img src="https://899558619-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaRSpZrGcUHd5EHGjrrO5%2Fuploads%2Fgit-blob-f00f50dce3b60448c39d99de0aa7c19a8881d494%2Fimage%20(120).png?alt=media" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
Toutes les modifications de configuration ci-dessous seront effectuées sur la **version nouvellement clonée.**
{% endhint %}

### **Configuration du streaming de logs**

1. Accédez à la section **Logging**.
2. Cliquez sur le bouton **'Create endpoint'** pour Amazon S3

<figure><img src="https://899558619-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaRSpZrGcUHd5EHGjrrO5%2Fuploads%2Fgit-blob-c56c044e55e2825a508884b63243b5dc79d9ed45%2Fimage%20(121).png?alt=media" alt=""><figcaption></figcaption></figure>

3. Saisissez les informations du tableau ci-dessous :

XLOCKX109![](https://899558619-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaRSpZrGcUHd5EHGjrrO5%2Fuploads%2Fgit-blob-f00f50dce3b60448c39d99de0aa7c19a8881d494%2Fimage%20\(120\).png?alt=media)110XLOCKX

<table><thead><tr><th width="196">Champ</th><th>Valeur</th></tr></thead><tbody><tr><td>Name</td><td>Saisissez un nom mémorable et lisible pour le endpoint, par exemple <strong>Netacea_Logging</strong></td></tr><tr><td>Placement</td><td>Format Version Default</td></tr><tr><td>Log Format</td><td>Collez le <strong>Log Format</strong> disponible <a href="#log-format">ici</a></td></tr><tr><td>Timestamp</td><td>Collez le <strong>Timestamp Format</strong> disponible <a href="#timestamp-format">ici</a></td></tr><tr><td>Bucket Name</td><td>Le nom du bucket Amazon S3 fourni par Netacea dans le <a href="https://portal.netacea.com/">portail d'administration</a></td></tr><tr><td>Domain</td><td>s3.eu-west-1.amazonaws.com</td></tr><tr><td>Access Method</td><td>Sélectionnez <strong>'User Credentials'</strong></td></tr><tr><td>Access Key</td><td>Copiez depuis le <a href="https://portal.netacea.com/">portail d'administration Netacea</a></td></tr><tr><td>Secret Key</td><td>Copiez depuis le <a href="https://portal.netacea.com/">portail d'administration Netacea</a></td></tr><tr><td>Period</td><td></td></tr></tbody></table>

4. Développez la section **'Advanced options'** et appliquez les valeurs spécifiques listées dans le tableau ci-dessous :

| Option                 | Valeur   |
| ---------------------- | -------- |
| Path                   | /        |
| PGP Public Key         | Vide     |
| Select Log line Format | Vide     |
| Compression            | Gzip     |
| Redundancy Level       | Standard |
| ACL                    | None     |
| Server Side Encryption | None     |
| Maximum Bytes          | 0        |

5. Cliquez sur **'Create'** pour enregistrer le endpoint de journalisation.

### Format de log

{% code overflow="wrap" %}

```
{"@timestamp": "%{%Y-%m-%dT%H:%M:%S%z}t","bc_type": %{if(req.http.netacea_bctype_string, "%u0022" + json.escape(req.http.netacea_bctype_string) + "%u0022", "null")}V,"bytes_sent": "%B","cookie_session_status": %{if(req.http.x-netacea:cookie_session_status, "%u0022" + json.escape(req.http.x-netacea:cookie_session_status) + "%u0022", "null")}V,"client": "%{json.escape(client.ip)}V","domain": %{if(req.http.host, "%u0022" + json.escape(req.http.host) + "%u0022", "null")}V,"integration_mode": %{"%u0022" + json.escape(req.http.x-netacea:integration_mode) + "%u0022"}V,"integration_type": %{if(req.http.integration_type, "%u0022" + json.escape(req.http.integration_type) + "%u0022", "null")}V,"integration_version": %{if(req.http.integration_version, "%u0022" + json.escape(req.http.integration_version) + "%u0022", "null")}V,"method": "%{json.escape(req.method)}V","path": "%{json.escape(req.url.path)}V","mit_svc_latency":%{if(req.http.x-netacea:mit_svc_latency, "%u0022" + json.escape(req.http.x-netacea:mit_svc_latency) + "%u0022", "0")}V,"mit_status":%{if(req.http.x-netacea:mit_status, "%u0022" + json.escape(req.http.x-netacea:mit_status) + "%u0022", "0")}V,"protocol": "%{json.escape(req.proto)}V","query": "%{json.escape(req.url.qs)}V","referrer": %{if(req.http.referer, "%u0022" + json.escape(req.http.referer) + "%u0022", "null")}V,"request_time": %{time.elapsed}V,"status": "%{json.escape(resp.status)}V","user_agent": %{if(req.http.user-agent, "%u0022" + json.escape(req.http.user-agent) + "%u0022", "null")}V,"user_id": %{if(req.http.x-netacea-userid, "%u0022" + json.escape(req.http.x-netacea-userid) + "%u0022", "null")}V,"client_ja3_md5": %{if(tls.client.ja3_md5, "%u0022" + json.escape(tls.client.ja3_md5) + "%u0022", "null")}V,"x_forwarded_for": %{if(req.http.X-Forwarded-For, "%u0022" + json.escape(req.http.X-Forwarded-For) + "%u0022", "null")}V}
```

{% endcode %}

### Format d'horodatage

```
%Y-%m-%dT%H:%M:%S.000
```

### Jeu de données minimum Netacea

Le format de log ci-dessus permettra à Netacea de collecter le jeu de données minimum suivant pour l'analyse

<table><thead><tr><th width="215">Champs requis</th><th>Description</th></tr></thead><tbody><tr><td>Timestamp</td><td>L'heure à laquelle la requête a été reçue</td></tr><tr><td>Adresse IP</td><td>L'adresse IP depuis laquelle la requête a été effectuée</td></tr><tr><td>User Agent</td><td>La chaîne user agent envoyée dans l'en-tête par le client</td></tr><tr><td>Méthode</td><td>La méthode HTTP de la requête</td></tr><tr><td>Chemin</td><td>Le chemin de la ressource demandée</td></tr><tr><td>Requête</td><td>La chaîne de requête de la demande HTTP</td></tr><tr><td>Statut</td><td>Le code de statut HTTP retourné par le serveur</td></tr><tr><td>Referrer</td><td>La page web depuis laquelle l'utilisateur a suivi un lien</td></tr><tr><td>Octets envoyés</td><td>Les octets envoyés dans le cadre de la réponse du serveur</td></tr><tr><td>Client JA3</td><td>Empreinte JA3 du client</td></tr><tr><td>X-Forwarded-For*</td><td>Adresse IP d'origine d'une requête client</td></tr><tr><td>Host</td><td>L'hôte de destination de la requête</td></tr><tr><td>Protocole</td><td>Le protocole de la requête</td></tr><tr><td>Temps de requête</td><td>Le temps total nécessaire pour traiter la requête</td></tr></tbody></table>

\* Utile lorsque des proxys se trouvent sur la ligne de trafic entre le client et l'origine

### Considérations relatives à la journalisation

Lors de la configuration de l'envoi des logs Fastly, par défaut, toutes les requêtes seront envoyées, y compris le contenu statique et média vers le bucket S3. Ces données ne sont pas requises par Netacea. Pour résoudre ce problème, nous devons ajouter une condition de journalisation au service et l'attacher au service de journalisation créé en suivant les étapes ci-dessus.

#### Ajouter une condition de journalisation

1. Accédez au endpoint de journalisation nouvellement créé :

<figure><img src="https://899558619-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaRSpZrGcUHd5EHGjrrO5%2Fuploads%2Fgit-blob-b869549315f09db6c5160d8bdc5195db79ee2cc8%2Fimage%20(122).png?alt=media" alt=""><figcaption></figcaption></figure>

2. Cliquez sur **'Create a new response condition'**

<figure><img src="https://899558619-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaRSpZrGcUHd5EHGjrrO5%2Fuploads%2Fgit-blob-f9b1247afd61266eff997a4775fbd11e8d47dccb%2Fimage%20(123).png?alt=media" alt=""><figcaption></figcaption></figure>

3. Saisissez les informations suivantes dans la fenêtre contextuelle

| Champ    | Valeur                                                                                    |
| -------- | ----------------------------------------------------------------------------------------- |
| Name     | par ex. Netacea\_Log\_Visit                                                               |
| Apply If | (req.url !\~ "/media/" && req.url !\~ "/static/") && fastly.ff.visits\_this\_service == 0 |
| Priority | 10                                                                                        |

{% hint style="warning" %}
Développez la section **'Advanced option'** pour définir la Priority
{% endhint %}

<figure><img src="https://899558619-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaRSpZrGcUHd5EHGjrrO5%2Fuploads%2Fgit-blob-d98d1184fca3eb81e9f1b659d44ea50f6ecbebf1%2Fimage%20(124).png?alt=media" alt=""><figcaption></figcaption></figure>

4. Cliquez sur **'Save and apply'**

### Finalisation

* Vérifiez la configuration pour détecter d'éventuels messages d'erreur ou avertissements.
* Une fois confirmé, déployez vos modifications en cliquant sur **Activate**.

<figure><img src="https://899558619-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaRSpZrGcUHd5EHGjrrO5%2Fuploads%2Fgit-blob-ca57d8a8f917a2b559d8ff6bdc29885177aeeb27%2Fimage%20(126).png?alt=media" alt=""><figcaption></figcaption></figure>

Votre configuration de streaming de logs Fastly est maintenant active et devrait envoyer des données vers le bucket S3 Netacea.

### Étapes finales

Une fois la livraison des logs active, **informez votre Solutions Engineer Netacea**. Cela nous permet de :

* Confirmer la réception des données
* Valider le format et l'exhaustivité du jeu de données
* Commencer l'analyse une fois qu'un volume suffisant de données a été collecté

Si vous avez besoin d'assistance lors de la configuration, l'équipe SE de Netacea est là pour vous aider — n'hésitez pas à nous contacter.
