[PYTHON] Gérez les journaux structurés avec GCP Cloud Logging

Qu'est-ce qu'un journal structuré?

Une sortie de journal dans un format de données tel que JSON, comme indiqué ci-dessous. GCP analyse automatiquement les journaux au format JSON à utiliser dans les requêtes de recherche, ce qui est pratique. (Confirmé dans Cloud Run) Les sauts de ligne sont également échappés en tant que JSON, ce qui facilite la gestion des journaux multilignes comme effet secondaire.

{"level": "INFO", "message": "hello\nworld", "timestamp": "2020-07-01 00:00:00"}

Exemple de journal de sortie en JSON en Python

En Python, vous pouvez générer le journal au format JSON en définissant votre propre formateur dans logger.

$ python -V
Python 3.8.0

logger.py


import sys
import logging
import json
import traceback


class JsonFormatter(logging.Formatter):
  def format(self, log):
    return json.dumps({
      "level": log.levelname,
      "message": log.msg,
      "timestamp": self.formatTime(log, self.datefmt),
      "traceback": traceback.format_exc() if log.exc_info else []
    })
    

formatter = JsonFormatter(datefmt="%Y-%m-%d %H:%M:%S")

stream = logging.StreamHandler(stream=sys.stdout)
stream.setFormatter(formatter)

logger = logging.getLogger('your-logger-name')
logger.setLevel(logging.INFO)
logger.addHandler(stream)

Chargez et utilisez l'enregistreur défini.

sample.py


from logger import logger


logger.info("hello\nworld")
logger.info({"foo": "foo", "boo": "boo"})

Le journal suivant est généré.

{"level": "INFO", "message": "hello\nworld", "timestamp": "2020-07-01 00:00:00", "traceback": []}
{"level": "INFO", "message": {"foo": "foo", "boo": "boo"}, "timestamp": "2020-07-01 00:00:00", "traceback": []}

Cloud Logging

Vous pouvez effectuer une recherche à partir de l'écran GCP Cloud Logging-> Log Viewer. La sortie des données sous forme de journal comme indiqué ci-dessous est stockée dans jsonPayload, et la clé peut être spécifiée sur la requête.

resource.type="cloud_run_revision"
jsonPayload.level="INFO"
jsonPayload.message.foo="foo"

Le journal apparaîtra comme résultat de la recherche comme indiqué ci-dessous

{
  "insertId": "xxxxxxxxxxxxxxxxxxxxxxxx",
  "jsonPayload": {
    "message": {"foo": "foo", "boo": "boo"},
    "traceback": [],
    "timestamp": "2020-07-07 15:33:28",
    "level": "INFO"
  },
  ...
}

Recommended Posts

Gérez les journaux structurés avec GCP Cloud Logging
Extraction de texte avec l'API GCP Cloud Vision (Python3.6)
Gérez Excel avec python
Manipuler rabbimq avec python
Nuage de points avec du poivre
[GCP] Comment générer des journaux Cloud Functions vers Cloud Logging (Stackdriver Logging) (Python)