created: 2022-06-21T07:55:19.742Z

[GCP] LogEntryにユーザ定義の lables を付与するログの落とし方

  • GCP の CloudLogging はJSON形式でログを落とすと jsonPayload という構造体にデータを入れてくれる
  • それだけではなく、labelsmessage などいくつかの特殊なキーに値を入れるとLogEntry の属性を上書きまたは付与することができる
    • labels はログの検索を高速にしてくれるインデックスのような役割
    • message はUIで一覧したときにどんなログだかを把握し易くしてくれる

これらの機能は便利だが動作させるまでにいくつかハマったのでメモしておく。

JSONのキー名に注意

ログ出力するオブジェクトのキー名に注意する必要がある。

ダメな例

{
  "labels": {
    "userid": "1234567",
    "appid": "xxxxxxxx",
  }
}

OKな例

"logging.googleapis.com/labels" というキーにいれる。

{
  "logging.googleapis.com/labels": {
    "userid": "1234567",
    "appid": "xxxxxxxx",
  }
}

データ型に注意

データ型は value: string ということになっている。

labels map (key: string, value: string)

ダメな例

1つでも文字列でない値が入っているとダメ。

{
  "logging.googleapis.com/labels": {
    "userid": "1234567",
    "isapp": true,
  }
}

Logging Agent 経由じゃないとLogEntryに入れてくれない

ユーザ定義の属性を labels に生やす機能は Logging Agent 経由で回収されたログにしか適用されない。

# こんなことをしていた
$ gcloud logging write --payload-type=json thisismycustomlog "$(cat /tmp/_.json)"

最初は動作確認で gcloud コマンド経由でログを落としていて期待通りにならないので気がついた。よく見ればちゃんとドキュメントには条件が書いてあった(悔しい)

If you use the Cloud Logging agent to get your log entries, you can specify that the Logging agent convert your payloads to JSON format.

参考