LoginSignup
24
10

More than 5 years have passed since last update.

GAE/GoだとStackdriverErrorReportingの通知のStacktraceからSourceRepositoryのソースコードに直接飛べる

Last updated at Posted at 2017-06-01

昨日ふと投稿したtwitterが結構RTやイイネが付いたのだけど、twitterの長さの制約の関係でちょっとした注意点が漏れていたので記事にしてみた。

twitterの投稿内容はこんな感じ

GAE/Goだと で書き始めているので何もしなくて実現できているのかと誤解されそうだったので、
注意点を下記します。

Stackdriver Error Reporting とはなに?

Googleのサイトより.
Stackdriver Error Reporting は、実行中のクラウド サービスで発生したクラッシュをカウントして、
分析と集計を実施します。
結果は一元化されたエラー管理インターフェースに表示され、並べ替えやフィルタリングも行えます。
専用のビューには、タイムチャート、発生回数、影響を受けたユーザー数、最初または最後の発生日時、
削除された例外スタック トレースといったエラー詳細が表示されます。
また、新しいエラーの発生時にメールアラートやモバイル アラートを受信することもできます。

エラーをよしなに通知しますよ。というもので、詳しくは こちら を。

Cloud Source Repositories とはなに?

Googleのサイトより.
Cloud Source Repositories では、プライベート Git レポジトリをいくつでも持つことができ、
お客様に最適な方法でクラウド プロジェクトに関連付けられているコードを整理することができます。

簡単に言うとgitのリポジトリですよ、と。

さっそく、注意点

ただ普通に Go で書いて Appengine にデプロイしただけでは 使えません!!

1点だけ注意点があって、ログの中にStackdriver Error Reportingが Stacktraceだと認識できる形式の文字列 を出力する必要があります。

どうすればいいか

サンプルコードですが、
エラー発生箇所でログに以下のようなロジックで生成したStacktraceを含めれば良いです。
(ユーティリティ化して使うのが良いと思いますが、その際にStackを剥がす処理をしたくなると思いますのでそのあたりは頑張ってみてください)

サンプル

c := appengine.NewContext(r) // appengineのcontextを生成する

buf := make([]byte, 1<<16)
runtime.Stack(buf, true)
s := fmt.Sprintf("%s", buf)

log.Errorf(c, s) // ログを出力する

GAE/Goを書いたことがある人はわかると思いますが、Stacktraceを普通にログとして出力しているだけです。

どのようになるか

上記のようにStacktraceを含むログを出力した際に、Error Reportingはエラーを認識してエラーを通知します。

サンプル1.png

上の例は殆どモザイクで見えないと思いますが、ErrorReportingで通知されたエラーの1件を選択すると以下のようなエラーの詳細画面へと遷移します。

サンプル2.png

エラー詳細画面に Go の Stacktrace が表示されるので、 gin.go:265 のようなリンクになっている部分をクリックします。

サンプル3.png

リンクから遷移すると Source Repository のコードへ飛び、ここまでのことがブラウザの中で一発で出来ます。
(この例はginというgoのライブラリのコードに飛んでいる例なのですが、実際には実装したアプリケーションのソースコードに飛んで確認ができます。)

ちなみに、Go のコードは Source Repository でわざわざホストする必要は無いと思います。
agppengineにデプロイするだけ。ちなみに、Source Repositoryの参照権限の付与は忘れないようにしましょう。

24
10
0

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
24
10