Stackdriver Logging / ErrorReporting に標準出力/エラー出力を拾わせる
Stackdriver Logging クライアントライブラリへの依存をしたくない、というのがモチベーション
通信待ったりとか意識したくない
書くだけなら楽
Node であれば console.error でレポートできる
? このログってレポートされたら Logging から見えなくなるんだっけ
やったやつ
Flex env でやった例
だめだった例
いろいろ実験
まとめ
Logging
GAE, GKE では JSON の構造を stdout/stderr に書けば JSON としてパースされる
Go 等では末尾の改行忘れないように
Cloud Functions では stdout/stderr に書いてもだめ
JSON を書いても textPayload として扱われるのでクライアントライブラリを使う
jsonPayload として扱われるようになったけど ErrorReporting に拾われる構造では書けない
出力を直接 agent が見ているわけじゃなくて1層かぶっている感じがある
アプリケーションログは trace を引き回すことで親の httpRequest ログに UI 上ぶら下げることができる
ぶら下げなくても同じ trace を引き回せば検索で紐づくので有用
Error Reporting
クライアントライブラリを使わない場合、Logging に拾わせたものをエラーとして認識してもらうことでレポートする
GAE, GKE(おそらく) は sidecar に agent が居るので、json で書けば拾ってくれる
Cloud Functions は Logging 同様にクライアントライブラリ使わないとだめそう
解析してくれる形式の Stacktrace を投げればキャプチャしてくれるはずではある
Node は多分いけて、Go は未確認
json の message フィールドに stacktrrace を入れれば拾ってくれる
stack_trace, exception, message の優先順位
stacktrace でなくても以下の構造を含めたら ErroReporting へ送れる
{ "@type": "type.googleapis.com/google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent", ... }
Go では stderr に stacktrace を書くだけでは拾ってくれない、Node では拾ってくれる
サポートと会話中
ドキュメント
2016 年からある issue
GAE sidecar のリポジトリで、エージェントがへ detect_json: true してる PR 古そう?
When the log line is a serialized JSON object and the detect_json option is enabled, the output plugin transforms the log entry into a structured (JSON) payload. This option is enabled by default in VM instances running on App Engine flexible environment and Google Kubernetes Engine. This option isn't enabled by default in VM instances running on App Engine standard environment.
GKE & GAE Flex ではデフォルトで有効、GAE Standard では有効じゃない ErrorReporting が拾ってくれる Stacktrace 形式の話への PR
各言語の ErrorReporting が拾う Stacktrace の形式についてのドキュメント
JavaScript: Must be the value of error.stack as returned by V8.
Go: Must be the return value of runtime.Stack().