GAE/Go라면 StackdriverErrorReporting 통지의 Stacktrace에서 SourceRepository의 소스 코드로 직접 날 수 있다

어제 문득 투고한 twitter가 상당히 RT나 벼가 붙었지만, twitter의 길이의 제약의 관계로 약간의 주의점이 새고 있었기 때문에 기사로 해 보았다.

트위터의 투고 내용은 이런 느낌

GAE/Go라면, Stackdriver Error Reporting에 통지된 Stacktrace의 Hoge.go:90등과 같은 링크로부터 Cloud Source Repositories의 코드에 직접 날 수 있기 때문에, 어느 행에서 에러 나왔는지 곧 알 수 있으므로 더 이상 놓을 수 없다. htps // t. 코 / MfT에 zr5tX — kiyo (@chidakiyo) 2017년 5월 31일
GAE/Goだと 로 쓰기 시작하고 있기 때문에 아무것도 하지 않고 실현되고 있는지 오해될 것 같았으므로,
주의점은 아래와 같습니다.

Stackdriver Error Reporting이란 무엇입니까?



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

오류를 잘 알립니다. 라고 하는 것으로, 자세한 것은 여기 을.

Cloud Source Repositories란 무엇입니까?



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

간단히 말하면 git의 리포지토리입니다, 라고.

바로, 주의점



그냥 보통 Go로 쓰고 Appengine에 배포하는 것만으로는 使えません!!
한 점만 주의점이 있어, 로그안에 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은 오류를 인식하고 오류를 알립니다.



위의 예는 대부분 모자이크로 보이지 않는다고 생각합니다만, ErrorReporting로 통지된 에러의 1건을 선택하면 이하와 같은 에러의 상세 화면으로 천이합니다.



오류 세부 정보 화면에 Go Stacktrace가 표시되므로 gin.go:265와 같은 링크가있는 부분을 클릭하십시오.



링크에서 전이하면 Source Repository의 코드로 날아가, 여기까지의 일이 브라우저 안에서 일발로 할 수 있습니다.
(이 예제는 gin이라는 go 라이브러리의 코드로 날아가는 예이지만 실제로는 구현한 애플리케이션의 소스 코드로 날아가 확인할 수 있습니다.)

덧붙여서, Go의 코드는 Source Repository로 일부러 호스팅할 필요는 없다고 생각합니다.
agppengine에 배포하기만 하면 됩니다. 그건 그렇고, 소스 리포지토리에 대한 참조 권한을 부여하는 것을 잊지 마십시오.

좋은 웹페이지 즐겨찾기