Tutoriel : Archiver vos logs d’API

Ce tutoriel montre comment exporter des logs d’API soit localement, soit vers le service OUTSCALE Object Storage (OOS).

Vous pouvez désormais utiliser l’outil osc-logs pour exporter vos logs d’API.

Créer un script pour la pagination des logs d’API

Ci-dessous, un exemple de script qui exécute ReadApiLogs avec pagination afin de récupérer tous les logs depuis une date donnée et de les sauvegarder ensuite dans un fichier CSV nommé logs.csv.

Par défaut, le script marche avec Linux. Afin qu’il marche avec macOS, vous devez mettre en commentaire les deux lignes sous la ligne # Linux et décommenter les deux lignes sous la ligne # macOS.

apilogs.sh
#!/bin/bash

# Exit when any command fails
set -e

# Usage: apilogs.sh [PROFILE] [YYYY-MM-DD]

profile=${1:-default}
# Linux: use $(date --date '2 weeks ago' +%F)
query_date_after=${2:-$(date --date '2 weeks ago' +%F)}
query_date_before=${2:-$(date +%F)}
# macOS/BSD: use $(date -v [+|-]val[ymwdHMS] +%F)
#query_date_after=${2:-$(date -v -2w +%F)}
#query_date_before=${2:-$(date +%F)}
next_page="null"

retrieve_apilogs(){
    # Perform ReadApiLogs calls with/without page token
    if [ "$next_page" = "null" ]; then
        osc-cli --profile $profile api ReadApiLogs --Filters '{"QueryDateAfter":"'$query_date_after'","QueryDateBefore":"'$query_date_before'"}' > tmp_logs.json;
    else
        echo ">>> Retrieving new page" $next_page
        osc-cli --profile $profile api ReadApiLogs --Filters '{"QueryDateAfter":"'$query_date_after'","QueryDateBefore":"'$query_date_before'"}' --NextPageToken $next_page > tmp_logs.json;
    fi
    # Concatenate selected fields from logs and save to CSV file
    cat tmp_logs.json | jq -r '.Logs[] | [.RequestId, .AccountId, .QueryAccessKey, .ResponseStatusCode, .QueryCallName, .QueryIpAddress, .QueryDate, .QueryUserAgent] | @csv' >> logs.csv
    # Check whether another page needs to be retrieved
    next_page=$(cat tmp_logs.json | jq -r '.NextPageToken // "null"')
}

retrieve_apilogs
while [ "$next_page" != "null" ]; do
    retrieve_apilogs
done

# Nicely display logs as columns with selected fields in shell
cat logs.csv | column -t -s ',' | tr -d '"'

# Cleanup
rm tmp_logs.json

Archiver vos logs API en local

Avant de commencer :

Vous pouvez exécuter le script précédent comme suit :

$ bash apilogs.sh PROFILE YYYY-MM-DD

où :

  • PROFILE est le nom de votre profil OSC CLI (par défaut, default).

  • YYYY-MM-DD est la date à partir de laquelle vous voulez récupérer les logs (par défaut, le script définit cette date à deux semaines auparavant). Le script récupère les logs depuis cette date jusqu’à aujourd’hui en utilisant cette date pour le paramètre QueryDateAfter de ReadApiLogs et la date d’aujourd’hui pour le paramètre QueryDateBefore.

Archiver vos logs API vers OOS

Avant de commencer :

Le service OUTSCALE Object Storage (OOS) vous permet de conserver à froid et de manière sécurisée des données sensibles. Il vous permet également de mutualiser l’accès à ces données.

Pour exporter vos logs d’API vers un bucket OOS, vous pouvez utiliser l’outil cron, qui permet d’exécuter automatiquement des tâches à intervalles réguliers.

Linux

  1. Ouvrez votre fichier de tâches cron avec la commande suivante :

    $ crontab -e
  2. Dans le fichier, insérez une des lignes suivantes, puis enregistrez :

    Pour un archivage quotidien
    0 0 * * * MDATE=$(date --date '1 day ago' +%F) ; bash readapilogs.sh default $MDATE ; aws s3api put-object --body logs.csv --bucket archives --key logs-$MDATE.csv ; rm logs.csv
    Pour un archivage tous les 30 jours
    0 0 */30 * * MDATE=$(date --date '30 days ago' +%F) ; bash readapilogs.sh default $MDATE ; aws s3api put-object --body logs.csv --bucket archives --key logs-$MDATE.csv ; rm logs.csv

La tâche ainsi créée enregistre la réponse d’une requête ReadApiLogs dans un fichier temporaire, exporte le fichier temporaire vers le bucket, puis supprime le fichier temporaire.

macOS

  1. Ouvrez votre fichier de tâches cron avec la commande suivante :

    $ crontab -e
  2. Dans le fichier, insérez une des lignes suivantes, puis enregistrez :

    Pour un archivage quotidien
    0 0 * * * MDATE=$(date -v -1d +%F) ; bash readapilogs.sh default $MDATE ; aws s3api put-object --body logs.csv --bucket archives --key logs-$MDATE.csv ; rm logs.csv
    Pour un archivage tous les 30 jours
    0 0 */30 * * MDATE=$(date -v -30d +%F) ; bash readapilogs.sh default $MDATE ; aws s3api put-object --body logs.csv --bucket archives --key logs-$MDATE.csv ; rm logs.csv

La tâche ainsi créée enregistre la réponse d’une requête ReadApiLogs dans un fichier temporaire, exporte le fichier temporaire vers le bucket, puis supprime le fichier temporaire.

Pages connexes

Méthode API correspondante

AWS™ et Amazon Web Services™ sont des marques de commerce d’Amazon Technologies, Inc. ou de ses affiliées aux États-Unis et/ou dans les autres pays.