web-dev-qa-db-fra.com

Comment filtrer et extraire les données d'événements de journal brutes d'Amazon Cloudwatch

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.

12
Zach

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: aws enregistre les événements de filtre-journal

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:

  • nom du groupe de journaux --log-group-name (seul le dernier est utilisé)
  • nom du flux de journalisation --log-stream-name (peut être spécifié plusieurs fois)
  • heure de début --start-time
  • heure de fin --end-time (pas --stop-time)
  • filtre filtre --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:

  • 1st: EVENTS (à noter, la ligne est un enregistrement de journal et non d'autres informations)
  • 2e: eventId
  • 3e: timestamp (heure déclarée par l'enregistrement comme heure de l'événement)
  • 4ème: logStreamName
  • 5ème: message
  • 6: 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

AWSCLI avec le plugin cwlogs

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):

  • 1er: logStreamName
  • 2e: date
  • 3ème: time
  • 4ème jusqu'à la fin: 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:

  • 1er: nom du groupe de journaux
  • 2ème: nom du flux de journalisation
  • 3ème: 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.

35
Jan Vlcinsky

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.

1
Froyke

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'
1
Murphy

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.

0
E.J. Brennan