created: 2022-06-21T07:55:19.742Z
[GCP] LogEntryにユーザ定義の lables を付与するログの落とし方
- GCP の CloudLogging はJSON形式でログを落とすと
jsonPayload
という構造体にデータを入れてくれる - それだけではなく、
labels
やmessage
などいくつかの特殊なキーに値を入れると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.