J'ai récemment rencontré un scénario dans lequel je devais télécharger localement des journaux complets à partir de MongoDB Atlas Triggers. Actuellement, il existe trois façons de télécharger les journaux d'Atlas :
Cependant, les options GUI et CLI ont des limites concernant le volume de journaux pouvant être téléchargés, en particulier un plafond de 10 000 journaux.
Utilisation de l'interface graphique
Avec l'interface graphique, les utilisateurs peuvent filtrer les journaux par date, type, ID utilisateur ou ID de demande, mais la limite est fixée à 10 000 journaux en matière de téléchargement.
Utilisation de la CLI
Avec la CLI, nous pouvons exécuter une commande comme :
appservices logs list --project 5e208aa2d5ec1375ecd5*** --app triggers_realmapp-**** --type=trigger --start="2024-10-15T00:00:00.000+0000" -o log.logs
Cependant, cela a également la même limite de téléchargement de 10 000 journaux.
Pour surmonter ces limitations de téléchargement, l'API d'administration App Services fournit un moyen d'accéder aux journaux avec pagination. En implémentant la pagination, les utilisateurs peuvent récupérer les journaux au-delà de la limite par défaut de 10 Ko.
Des instructions détaillées sur l'utilisation de la pagination avec l'API peuvent être trouvées dans la documentation de MongoDB : Obtenir les journaux paginés.
Pour rationaliser cela, j'ai développé un script qui récupère automatiquement les journaux à l'aide de la pagination. Ce script est disponible dans un référentiel public ici : Atlas App Logs Aggregator.
Le script utilise uniquement le point de terminaison GET et regroupe les journaux dans un fichier sans modifier aucune donnée.
appservices logs list --project 5e208aa2d5ec1375ecd5*** --app triggers_realmapp-**** --type=trigger --start="2024-10-15T00:00:00.000+0000" -o log.logs
python3 -m venv venv source venv/bin/activate # On Windows use `venv\Scripts\activate`
pip install -r requirements.txt
Avec paramètres optionnels
python main.py <project_id> <app_id> <public_api_key> <private_api_key> --start_date 2024-10-05T14:30:00.000Z --end_date 2024-10-06T14:30:00.000Z --type TRIGGER_FAILURE,SCHEMA_GENERATION
Si start_date et end_date ne sont pas fournis, le script définira par défaut start_date sur les dernières 24 heures à partir de l'heure actuelle.
L'option --filter vous permet de filtrer les journaux par paires clé-valeur. Cette option accepte plusieurs paires clé-valeur séparées par des espaces. Chaque paire clé-valeur doit être au format clé=valeur.
La paire clé-valeur doit être constituée des valeurs renvoyées par le point de terminaison. De cette façon, il les utilisera pour filtrer et ne conservera que ceux qui correspondent. Par exemple, pour un "type" : "SCHEDULED_TRIGGER", les valeurs-clés de réponse seront similaires à :
python main.py <project_id> <app_id> <public_api_key> <private_api_key> --start_date 2024-10-05T14:30:00.000Z --type TRIGGER_FAILURE,SCHEMA_GENERATION --user_id 671d2e2010733ecbaa2bab8f --filter event_subscription_name=getUnpausedClustersMetrics
Nous pouvons utiliser n'importe lequel de ces éléments dans l'option --filter (par exemple, --filter event_subscription_name=getUnpausedClustersMetrics)
Le script prend en charge la journalisation à la fois sur la console et dans un fichier journal. Par défaut, les fichiers journaux sont stockés dans le dossier des journaux. Le nom du fichier journal inclut un horodatage pour garantir l'unicité de chaque exécution.
--verbose : lorsque cet indicateur est utilisé, le niveau de journalisation est défini sur DEBUG, fournissant des informations de journalisation détaillées. Sans cet indicateur, le niveau de journalisation est défini sur INFO.
Les fichiers journaux sont stockés dans le dossier des journaux. Chaque fichier journal est nommé avec un horodatage pour garantir que les journaux des différentes exécutions ne s'écrasent pas.
appservices logs list --project 5e208aa2d5ec1375ecd5*** --app triggers_realmapp-**** --type=trigger --start="2024-10-15T00:00:00.000+0000" -o log.logs
Veuillez noter : ce dépôt est publié pour une utilisation « EN L'ÉTAT » sans aucune garantie d'aucune sorte, y compris, mais sans s'y limiter, leur installation, leur utilisation ou leurs performances. Nous déclinons toute garantie, expresse ou implicite, y compris, mais sans s'y limiter, toute garantie de non-contrefaçon, de qualité marchande et/ou d'adéquation à un usage particulier. Nous ne garantissons pas que la technologie répondra à vos exigences, que son fonctionnement sera ininterrompu ou sans erreur, ni que toute erreur sera corrigée.
Toute utilisation de ces scripts et outils est à vos propres risques. Il n'y a aucune garantie qu'ils aient été soumis à des tests approfondis dans un environnement comparable et nous ne sommes pas responsables de tout dommage ou perte de données résultant de leur utilisation.
Vous êtes responsable d'examiner et de tester minutieusement tous les scripts que vous exécutez avant de les utiliser dans un environnement non testé.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!