🍺

New Relic Go agentに入門

2022/12/25に公開

概要

Merry Christmas!!!サンタさんになった気持ちでNew Relic Go Agent入門HowTo書いていきます!
この記事はPTAのアドベントカレンダー25日目の記事です。ビール片手にLet's Try!!

New Relicとは

New Relic (ニューレリック) は企業名であり、かつ SaaS のサービス名で、パフォーマンス監視プラットフォームを提供している。フロントエンドからインフラまで、アプリケーションに関する全レイヤーを監視できる。

具体的に一部機能を抜粋...

クラスタに悩まされる必要はありません。プラットフォーム全体を可視化し、アプリからインフラストラクチャ、そしてネットワークまでのクラスタ内全てを確認することができます。

テクノロジースタック全体におけるアプリケーションのパフォーマンスを把握。依存関係を追跡し、異常を検知し、レイテンシを軽減し、エラーを除去し、顧客体験を最適化。

クエリの数を考慮せず、優れた可視性、ほぼ即時の検索、フルコンテキストのログ情報を手に入れましょう。シンプルで透明性の高い価格プラン。システムの規模が拡大しても、データとユーザー料金は変わりません。

エラーは起こるものです。スタック全体を見渡し、対処すべきエラーを積極的に監視、管理することができるようになりました。New Relicプラットフォームの一部となった、エラー追跡ソリューション、Errors Inboxを活用しましょう。

コード? インフラストラクチャ? 基盤となるネットワーク? Kentikとの提携により、全てのデータを1か所で確認し、ネットワークとシステム全体のパフォーマンスが相互にどのような影響を与えているかを正確に把握することができます。それにより、適切なレイヤーでトラブルシューティングに取り組み、適切なチームによって検出を加速化し、平均復旧時間(MTTR)を大幅に削減できます。

実用的なアラートでデータの状況を常に把握し、深刻化する前に問題点を見つけます。インテリジェントな検出機能により、軽微な問題と重要な問題を区別し、最も重要な問題について通知を受けることができるため、より早く、より少ないアラートで問題を解決できます。

Go-agentとは

New Relic Go Agent を使用すると、Go アプリケーションを New Relic で監視できる!
https://github.com/newrelic/go-agent

セットアップ

以下からアカウント作成して触れるよう
https://newrelic.com/jp

入門してみる

  1. go agentを追加
go get github.com/newrelic/go-agent/v3
  1. 初期設定!
// main.go
app, err := newrelic.NewApplication(
    newrelic.ConfigAppName("local-hello-rew-relic"),
    newrelic.ConfigLicense("適宜"),
    newrelic.ConfigAppLogForwardingEnabled(true),
)
if nil != err {
		fmt.Println("failed to setup new relic")
	} else {
		fmt.Println("start new relic <relic application name>: local-hello-rew-relic"))
	}
  1. 作成したappを呼び出す!
// main.go
http.HandleFunc(newrelic.WrapHandleFunc(app, "/hello", hello))

func hello() http.HandlerFunc {
	return func(resp http.ResponseWriter, req *http.Request) {
		resp.WriteHeader(http.StatusOK)
		resp.Write([]byte("hello new relic"))
	}
}
  1. dockerでlocalからメトリクスを送るためのコンテナを作成&起動!
docker run \
-d \
--name newrelic-infra \
--network=host \
--cap-add=SYS_PTRACE \
--privileged \
--pid=host \
-v "/:/host:ro" \
-v "/var/run/docker.sock:/var/run/docker.sock" \
-e NRIA_LICENSE_KEY="適宜" \
newrelic/infrastructure:latest
  1. いざエンドポイントを叩く!
curl http://127.0.0.1:8080/hello

かっこいい画面が見れるようになった😌
エンドポイント叩いた分だけグラフが跳ねてるっ
DashBord

custom instrumentation使ってみる

アプリケーションの詳細なパフォーマンスの監視に使える
https://docs.newrelic.com/jp/docs/apm/agents/java-agent/custom-instrumentation/custom-instrumentation-editor-instrument-ui/

なななんと、この一行追加するだけっ!

// main.go
func hello() http.HandlerFunc {
	return func(resp http.ResponseWriter, req *http.Request) {
+		defer newrelic.FromContext(req.Context()).StartSegment("hello func").End()
		resp.WriteHeader(http.StatusOK)
		resp.Write([]byte("hello new relic"))
	}
}

トランザクションが見れるようになった!

詳細画面ではパフォーマンスが可視化!ボトルネック発見などに役立つこと請け合い😏


感想

とれも少ない実装で、パフォーマンスの可視化を行うことができたっ!
これをもとに、アラートを設定したり、ログを監視したり、できることの幅が広がりますね。

Discussion