GCPのStackdriver Loggingは最高のプロダクトの一つですよね。
Stackdriverに限らずですがGCPのリソースを確認する際に、慣れてくるとgcloudのCLI経由で作業したいケースが増えてくると思います。その場合に、特にログ周りの出力日時は、国内サービスを運営している人からするとTimezoneがUTCだと脳内マッピングが発生して混乱する人が多いと思います。(というか私です)
...という訳で、JST(Japan Standard Time: 日本標準時)で出力する方法を調べました。
結論
日付項目に対して、--format
オプション内で .date(tz=Asia/Tokyo)
を提供すればOKです。これで変換してくれるのは不思議ですね。当初は取得した文字列をawkとかで変換するかーとか思っていたのですが、gcloudのオプションでできました。凄い。
$ gcloud logging read --project <Your GCP Project ID> "resource.type=<Your Resource Type>" \
--format="table(receiveTimestamp.date(tz=Asia/Tokyo), textPayload)" \
--order=asc
RECEIVE_TIMESTAMP TEXT_PAYLOAD
2019-09-03T21:00:10 Function execution started
2019-09-03T21:00:27 Function execution took 17391 ms, finished with status: 'ok'
...省略...
デフォルトでは並び順がdescなので、--order
オプションで昇順に切り替えています。
ちなみに、日付フォーマットも変換できます。.date('%Y-%m-%d %H:%M:%S.%Z', tz=Asia/Tokyo)
のように記載することでTimezone付きで出力することもできます。
$ gcloud logging read --project <Your GCP Project ID> "resource.type=<Your Resource Type>" \
--format="table(receiveTimestamp.date('%Y-%m-%d %H:%M:%S%Z', tz=Asia/Tokyo), textPayload)" \
--order=asc
RECEIVE_TIMESTAMP TEXT_PAYLOAD
2019-09-03 21:00:10+09:00 Function execution started
2019-09-03 21:00:27+09:00 Function execution took 17391 ms, finished with status: 'ok'
...省略...
これでログをSlackなどで別の人に渡しても混乱が減りますね。
gcloudの--format
オプションは中々趣がある機能が満載です。もちろんそのままJSONでもCSVでも出力できますし、いい感じにパディングしてくれるtableオプションもあります。
フィールドの項目もjq
で絞り込みを行わずgcloudで行ってしまうことが、コマンドをシンプルにする上でもおすすめです。
まとめ
- gcloudの
--format
オプションでTimezoneを始めとした日付整形が可能 - 良いログライフを!