21
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

GCP Cloud Logging で構造化ログを扱う

Last updated at Posted at 2020-07-11

構造化ログとは

下記のように JSON 等のデータ形式で出力されたログのこと。
GCP では JSON 形式のログは自動的にパースされ、検索クエリで利用できるようになり便利。
(Cloud Run では確認済み)
改行も JSON としてエスケープされるので、副次的に複数行のログも扱いやすくなる。

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

Python でログを JSON で出力するサンプル

Pythonでは logger に独自のフォーマッターを設定することでログを JSON 形式で出力することができる。

$ 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.getMessage(),
      "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)

設定した logger を読み込んで利用する。

sample.py
from logger import logger


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

下記のような JSON 化されたログが出力される。

{"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

ロギング -> ログエクスプローラ画面から検索することができる。
ログとして出力したデータは jsonPayload に格納されており、クエリ上で検索することができる。

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

下記のようにログが検索結果としてでてくる

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?