New Relic Goエージェントをインストールして、Goアプリケーションの詳細なパフォーマンスインサイトを取得します。このガイドでは、一般的なGoアプリケーションパターンの例を含む完全なインストレーションを説明します。
開始する前に
New Relicアカウントを作成する - まだアカウントをお持ちでない場合は、 New Relicアカウントを作成してください。永久に無料です。
互換性を確認する - 次のことを確認してください:
- Go 1.19以降
- Linux、macOS、またはWindows
- サポートされているウェブフレームワークまたはライブラリ
ライセンスキーを入手する - インストール時にが必要になります。
インストレーション手順
Goエージェントのインストール
New Relic Goエージェントをプロジェクトに追加します。
$go get github.com/newrelic/go-agent/v3/newrelicヒント
Goモジュールを使用していますか?エージェントはGoモジュールとシームレスに動作します。古いバージョンのGoを使用している場合は、エージェントをvendorフォルダーに追加する必要がある場合があります。
エージェントをインポートする
Goアプリケーションにインポートを追加します。
import "github.com/newrelic/go-agent/v3/newrelic"エージェントを初期化する
main関数でアプリケーションインスタンスを作成します。
func main() { app, err := newrelic.NewApplication( newrelic.ConfigAppName("My Go Application"), newrelic.ConfigLicense(os.Getenv("NEW_RELIC_LICENSE_KEY")), ) if err != nil { log.Fatal("Failed to create New Relic application:", err) }
// Wait for the application to connect if err := app.WaitForCompletion(5 * time.Second); err != nil { log.Println("Warning: New Relic application did not connect:", err) }
// Your application code here}重要
セキュリティのベストプラクティス:ライセンスキーは、ソースコードにハードコーディングするのではなく、常に環境変数を使用してください。
ウェブハンドラーをインストゥルメントする
HTTPアプリケーションの場合、ハンドラーをウェブサイトを監視するようにラップします。
// Method 1: Wrap individual handlershttp.HandleFunc(newrelic.WrapHandleFunc(app, "/", indexHandler))http.HandleFunc(newrelic.WrapHandleFunc(app, "/users", usersHandler))http.HandleFunc(newrelic.WrapHandleFunc(app, "/api/data", apiHandler))
// Method 2: Wrap your entire mux (recommended for many routes)mux := http.NewServeMux()mux.HandleFunc("/", indexHandler)mux.HandleFunc("/users", usersHandler)mux.HandleFunc("/api/data", apiHandler)
http.ListenAndServe(":8080", newrelic.WrapListen(app, mux))基本的なエラー処理を追加する
ハンドラーでエラーをキャプチャします。
func usersHandler(w http.ResponseWriter, r *http.Request) { // Get transaction from request context txn := newrelic.FromContext(r.Context())
user, err := getUserFromDatabase(r.URL.Query().Get("id")) if err != nil { // Report error to New Relic txn.NoticeError(err) http.Error(w, "User not found", http.StatusNotFound) return }
// Add custom attributes txn.AddAttribute("user.id", user.ID) txn.AddAttribute("user.tier", user.Tier)
// Return user data json.NewEncoder(w).Encode(user)}導入・検証する
環境変数を設定します:
bash$export NEW_RELIC_LICENSE_KEY="your-license-key-here"アプリケーションをコンパイルして実行します:
bash$go build -o myapp$./myappアプリケーションのURLにアクセスしてトラフィックを生成します
one.newrelic.com で2~3分以内にNew Relicを確認してください。
インストレーション例
シンプルなHTTPサーバー
package main
import ( "fmt" "log" "net/http" "os" "time"
"github.com/newrelic/go-agent/v3/newrelic")
func main() { // Initialize New Relic app, err := newrelic.NewApplication( newrelic.ConfigAppName("Simple Go Server"), newrelic.ConfigLicense(os.Getenv("NEW_RELIC_LICENSE_KEY")), ) if err != nil { log.Fatal(err) }
// Simple handler http.HandleFunc(newrelic.WrapHandleFunc(app, "/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, World!") }))
log.Println("Server starting on :8080") log.Fatal(http.ListenAndServe(":8080", nil))}Ginフレームワークインテグレーション
package main
import ( "os"
"github.com/gin-gonic/gin" "github.com/newrelic/go-agent/v3/integrations/nrgin" "github.com/newrelic/go-agent/v3/newrelic")
func main() { // Initialize New Relic app, _ := newrelic.NewApplication( newrelic.ConfigAppName("Gin Application"), newrelic.ConfigLicense(os.Getenv("NEW_RELIC_LICENSE_KEY")), )
// Set up Gin with New Relic middleware r := gin.Default() r.Use(nrgin.Middleware(app))
r.GET("/", func(c *gin.Context) { c.JSON(200, gin.H{"message": "Hello, World!"}) })
r.Run(":8080")}バックグラウンドジョブの監視
func processBackgroundJob(app *newrelic.Application, jobData JobData) { // Create a background transaction txn := app.StartTransaction("background-job") defer txn.End()
// Add job context txn.AddAttribute("job.id", jobData.ID) txn.AddAttribute("job.type", jobData.Type)
// Process job with error handling if err := processJob(jobData); err != nil { txn.NoticeError(err) log.Printf("Job %s failed: %v", jobData.ID, err) return }
log.Printf("Job %s completed successfully", jobData.ID)}次の手順
基本的なインストールが完了すると、すぐに次の画面が表示されます。
- HTTPエンドポイントのレスポンスタイム、スループット、エラー率を備えたAPMダッシュボード
- 最も遅いウェブrequestsを示すトランザクショントレース
- 報告されたエラーの基本的なエラー追跡
txn.NoticeError()
追加の監視機能のロックを解除するには、さらに計装を追加する必要があります。
- データベース監視 - データベースセグメント計装が必要です
- 外部サービストラッキング - 外部セグメント計装が必要です
- カスタムメトリックとイベント - カスタムインストゥルメンテーションが必要です
トラブルシューティング
インストール後にデータが表示されない場合:
- アプリケーションログでNew Relic接続メッセージを確認してください
- ライセンスキーが正しく、期限切れでないことを確認してください
- New Relicへのネットワーク接続を確保する(ポート80/443)
- 詳細なヘルプについてはトラブルシューティングガイドを確認してください
ヒント
エージェントが何を実行しているかを確認するには、デバッグログを有効にします。
config := newrelic.NewConfig("My App", os.Getenv("NEW_RELIC_LICENSE_KEY"))config.Logger = newrelic.NewDebugLogger(os.Stdout)app, _ := newrelic.NewApplication(config)次のステップ
基本的な監視のセットアップが完了したので、設定と計装を通じて監視の可能性を強化できます。
- 設定はエージェントがアプリケーション全体にわたってグローバルにどのように動作するかを制御します
- 計装は追跡したい特定の操作に監視コードを追加します
エージェントの設定
エージェント設定を使用してグローバルな動作を制御し、次のことを実現します。
- ディストリビューティッド(分散)トレーシングを有効にする - 複数のサービスにわたるrequestsを追跡します
- ログ記録を制御する - デバッグレベルとログの保存先を設定します
- パフォーマンス閾値を設定する - クエリが「遅い」とみなされる時間を設定します
- セキュリティ機能を有効にする - 高セキュリティモードをオンにします
計装を追加する
詳細な計装を使用して特定の操作を監視し、次のことを達成します。
- モニターデータベースクエリ - SQLパフォーマンスとスロータイムを追跡します
- 外部APIコールを追跡する - サードパーティのサービス呼び出しの監視
- バックグラウンドジョブを監視する - 非ウェブトランザクションを追跡します
- カスタムメトリックの作成 - ビジネス固有のKPIを監視します
高度な機能と監視
- ブラウザ監視やカスタムイベントなどの高度な機能を確認します
- 主要なパフォーマンスメトリクスのアラートを設定します
ヒント
エージェントを最新の状態に保つ:新しい機能、パフォーマンスの向上、セキュリティパッチを取得するには、定期的に最新バージョンに更新します。