Est-il possible de 1) filtrer et 2) extraire les données de journal brutes de Cloudwatch via l'API ou à partir de la CLI? Je dois extraire un sous-ensemble d'événements de journal de Cloudwatch pour analyse.
Je n'ai pas besoin de créer une métrique ou quelque chose comme ça. Ceci est pour la recherche historique d'un événement spécifique dans le temps.
Je suis allé à la visionneuse de journaux dans la console, mais j'essaie de tirer des lignes spécifiques pour me raconter une histoire à une certaine heure. La visionneuse de journaux serait pratiquement impossible à utiliser à cette fin. Si j'avais le fichier journal réel, je me contenterais de grep et ce serait terminé en 3 secondes environ. Mais je ne.
Clarification
Dans la description de Cloudwatch Logs , il est indiqué: "Vous pouvez afficher les données de journal d'origine (uniquement dans la vue Web?)} Pour voir la source du problème si nécessaire. Les données de journal peuvent être stocké et consulté (uniquement dans la vue Web?)} aussi longtemps que vous avez besoin d'un stockage hautement durable et économique, pour que vous n'ayez pas à vous soucier du remplissage des disques durs. " --italics sont à moi
Si cette vue de la console est le seul moyen d'accéder aux données source, alors stocker des journaux via Cloudwatch n'est pas une solution acceptable pour mes besoins. Je dois obtenir les données réelles avec suffisamment de flexibilité pour rechercher des modèles, ne pas cliquer sur des dizaines de lignes de pages et copier/coller. Il semble cependant qu'un meilleur moyen d'obtenir les données source ne soit pas disponible.
Pour utiliser AWSCLI (en clair et avec le plugin cwlogs
), voir http://docs.aws.Amazon.com/AmazonCloudWatch/latest/DeveloperGuide/SearchDataFilterPattern.html
Pour la syntaxe de modèle (plain text
, [space separated]
en tant que {JSON syntax}
), voir: http://docs.aws.Amazon.com/AmazonCloudWatch/latest/DeveloperGuide/FilterAndPatternSyntax.html
Pour l'utilitaire de ligne de commande python awslogs
, voir https://github.com/jorgebastida/awslogs .
AWSCLI est l'interface CLI officielle des services AWS et prend désormais également en charge les journaux.
Pour montrer de l'aide:
$ aws logs filter-log-events help
Le filtre peut être basé sur:
--log-group-name
(seul le dernier est utilisé)--log-stream-name
(peut être spécifié plusieurs fois)--start-time
--end-time
(pas --stop-time
)--filter-pattern
Seul --log-group-name
est obligatoire.
Les temps sont exprimés en Epoch en millisecondes (pas en secondes).
L'appel pourrait ressembler à ceci:
$ aws logs filter-log-events \
--start-time 1447167000000 \
--end-time 1447167600000 \
--log-group-name /var/log/syslog \
--filter-pattern ERROR \
--output text
Il imprime 6 colonnes de texte séparé par des tabulations:
EVENTS
(à noter, la ligne est un enregistrement de journal et non d'autres informations)eventId
timestamp
(heure déclarée par l'enregistrement comme heure de l'événement)logStreamName
message
ingestionTime
Ainsi, si vous avez à votre disposition des utilitaires de ligne de commande Linux et que vous vous préoccupez uniquement des messages d'enregistrement de journal pour un intervalle compris entre 2015-11-10T14:50:00Z
et 2015-11-10T15:00:00Z
, vous pouvez l'obtenir comme suit:
$ aws logs filter-log-events \
--start-time `date -d 2015-11-10T14:50:00Z +%s`000 \
--end-time `date -d 2015-11-10T15:00:00Z +%s`000 \
--log-group-name /var/log/syslog \
--filter-pattern ERROR \
--output text| grep "^EVENTS"|cut -f 5
Le plugin cwlogs
AWSCLI est plus simple à utiliser:
$ aws logs filter \
--start-time 2015-11-10T14:50:00Z \
--end-time 2015-11-10T15:00:00Z \
--log-group-name /var/log/syslog \
--filter-pattern ERROR
Il attend une date-heure lisible par l'homme et renvoie toujours une sortie texte avec des colonnes (délimitées par des espaces):
logStreamName
date
time
message
En revanche, son installation est un peu plus difficile (quelques étapes supplémentaires à effectuer, plus la version courante pip
nécessite de déclarer le domaine d’installation en tant que domaine de confiance).
$ pip install awscli-cwlogs --upgrade \
--extra-index-url=http://aws-cloudwatch.s3-website-us-east-1.amazonaws.com/ \
--trusted-Host aws-cloudwatch.s3-website-us-east-1.amazonaws.com
$ aws configure set plugins.cwlogs cwlogs
(si vous faites une faute de frappe dans la dernière commande, corrigez-la dans le fichier ~/.aws/config
)
awslogs
commande de jorgebastida/awslogs
Cela devient mon préféré - facile à installer, puissant, facile à utiliser.
Installation:
$ pip install awslogs
Pour répertorier les groupes de journaux disponibles:
$ awslogs groups
Pour lister les flux de journaux
$ awslogs streams /var/log/syslog
Pour obtenir les enregistrements et les suivre (voir les nouveaux au fur et à mesure):
$ awslogs get --watch /var/log/syslog
Et vous pouvez filtrer les enregistrements par plage de temps:
$ awslogs get /var/log/syslog -s 2015-11-10T15:45:00 -e 2015-11-10T15:50:00
Depuis la version 0.2.0, vous avez également l'option --filter-pattern
.
La sortie a des colonnes:
message
En utilisant --no-group
et --no-stream
, vous pouvez désactiver les deux premières colonnes.
En utilisant --no-color
, vous pouvez vous débarrasser des caractères de contrôle des couleurs dans la sortie.
EDIT: comme awslogs
la version 0.2.0 ajoute --filter-pattern
, le texte mis à jour.
Bien que la réponse de Jan soit excellente et probablement ce que voulait l'auteur, veuillez noter qu'il existe un moyen supplémentaire d'obtenir un accès programmatique aux journaux - via subscriptions .
Ceci est destiné aux scénarios de streaming toujours actifs où les données sont constamment extraites (généralement dans le flux Kinesis) et ensuite traitées.
Si vous utilisez la bibliothèque Python Boto3 pour l'extraction des journaux AWS cloudwatch. La fonction get_log_events () accepte les heures de début et de fin en millisecondes.
Pour référence: http://boto3.readthedocs.org/fr/latest/reference/services/logs.html#CloudWatchLogs.Client.get_log_events
Pour cela, vous pouvez saisir une heure UTC et la convertir en millisecondes à l'aide des modules Datetime et timegm, et vous êtes prêt à partir:
from calendar import timegm
from datetime import datetime, timedelta
# If no time filters are given use the last hour
now = datetime.utcnow()
start_time = start_time or now - timedelta(hours=1)
end_time = end_time or now
start_ms = timegm(start_time.utctimetuple()) * 1000
end_ms = timegm(end_time.utctimetuple()) * 1000
Donc, vous pouvez donner les entrées comme indiqué ci-dessous y en utilisant l'entrée sys comme:
python flowlog_read.py '2015-11-13 00:00:00' '2015-11-14 00:00:00'
Je ne l'ai pas utilisé moi-même, mais voici un exportateur open source CloudWatch to Excel que j'ai rencontré sur GitHub:
https://github.com/petezybrick/awscwxls
Générique AWS CloudWatch vers exportateur de feuilles de calcul CloudWatch ne fournit pas d'utilitaire d'exportation - c'est le cas. awscwxls crée des feuilles de calcul sur la base d'ensembles génériques d'espace de nom/dimension/métrique/statistique Caractéristiques. Tant que AWS continue de suivre le Espace de noms/Dimension/Métrique/Modèle statistique, awscwxls devrait fonctionner pour Namespaces (Services) existants et futurs. Chaque ensemble de spécifications est stocké dans un fichier de propriétés, chaque fichier de propriétés peut donc être configuré pour un ensemble spécifique de services AWS et de ressources. Prenez un Regardez run/properties/template.properties pour un exemple complet.