NewRelic CodeStreamでコードの質問やデバッグを効率的に行えるようにする

newrelicgolang

New Relic CodeStreamはIDE上でコードの質問やIssue/PRの作成、デバッグを行う際に役に立つプラグインで、IntelliJやVSCodeなどで提供されている。

インストール

IDEにプラグインをインストールしてインテグレーションの設定を行う。

コメント

コードブロックに対してコメントを書いて質問を投げたり、Issueを作成することができる。

Slackのインテグレーションを行っていると次のように投稿される。

これに対して"Open in IDE"ボタンを押すと対象の行に飛んでコメントを返すことができる。

デバッグ

New RelicのErrors Inboxにはデフォルトで404以外の4xx,5xxのレスポンスが入るが NoticeError() でそれ以外のエラーも送ることができる。

func BrokenFunc() error {
	return newrelic.Error{
		Message:    "Func is broken",
		Class:      "FuncError",
		Attributes: map[string]interface{}{},
		Stack:      newrelic.NewStackTrace(),
	}
}

if err := BrokenFunc(); err != nil {
    nrecho.FromContext(c).NoticeError(err)
    return c.String(http.StatusInternalServerError, "XD")
}

ちなみにErrorとして扱うステータスコードは次のようにして指定できる。

app, err := newrelic.NewApplication(
    newrelic.ConfigAppName("test_app"),
    newrelic.ConfigLicense(os.Getenv("NEWRELIC_LICENSE_KEY")),
    newrelic.ConfigDistributedTracerEnabled(true),
    func(cfg *newrelic.Config) {
        cfg.ErrorCollector.IgnoreStatusCodes = []int{
            http.StatusBadRequest,
            http.StatusNotFound,
        }
    },
)

次の環境変数を渡すと

$ export NEW_RELIC_METADATA_REPOSI[email protected]:sambaiz/newrelic-codestream-example.git
$ export NEW_RELIC_METADATA_COMMIT=$(git rev-parse HEAD)

Errors Inboxからも"Open in IDE"できる。

newrelic.Error にスタックトレースを含めていると次のように辿ることができて便利。

担当者をアサインしてコメントも残せるので障害発生時の初動からポストモーテムまで役に立ちそうだ。