HTTP 応答やバックグラウンド タスクなどの特定のアプリケーション サーバー アクティビティに関連付けられたトランザクションを作成して、NewNew Relic Relic Go アプリケーションまたはマイクロサービスを監視します。その後、 APM Transactionsページを含む New Relic でアプリのパフォーマンスを表示できます。
Webトランザクションと非Webトランザクションの識別
他の多くの言語とは異なり、Goアプリケーションはコンパイルされたネイティブのバイナリファイルから実行されます。このため、GolangアプリケーションにNew Relicを設定するには、ソースコードにNew Relicのメソッドを手動で追加する必要があります。
APMでは、トランザクションは、 ウェブトランザクション または 非ウェブトランザクション として識別されます。
- HTTP リクエストとレスポンスのライターを持つトランザクションをインストゥルメントまたはラップすると、New Relic はそのトランザクションを Web トランザクションとして扱います。
- HTTP データを持たないトランザクションをインストゥルメントまたはラップすると、New Relic はそのトランザクションを非ウェブトランザクションとして扱います。
セグメントとは、トランザクションを構成する関数やコールのことです。New Relic for Go を使用して、 トランザクションにセグメントレベルの詳細を追加することもできます 。
トランザクションの監視
重要
トランザクション名の末尾に角かっこ[suffix]
を使用しないでください。 New Relicは、名前から角かっこを自動的に削除します。代わりに、必要に応じて括弧(suffix)
またはその他の記号を使用してください。
トランザクションをモニターするには監視したい機能の開始直後に以下のコードを配置します。たとえば、次のようになります。
txn := app.StartTransaction("transaction_name")defer txn.End()
このコード例では
app
NewRelicの設定プロセス中に割り当てられた変数を指します。詳細については、 Goエージェントのインストール手順を参照してください。defer
ステートメントは、関数が閉じるまでセグメントの終了を延期します。
Webトランザクションを監視するには、 Transaction.SetWebRequest
およびオプションでTransaction.SetWebResponse
APIを呼び出します。
txn := app.StartTransaction("transaction_name")defer txn.End()
// req is a *http.Request, this marks the transaction as a web transactiontxn.SetWebRequestHTTP(req)
// writer is a http.ResponseWriter, use the returned writer in place of the originalwriter = txn.SetWebResponse(writer)writer.WriteHeader(500)
複数のゴルーチンを持つトランザクションの監視
複数のゴルーチンにわたるトランザクションを監視するには、 Transaction.NewGoroutine()
を使用します。 NewGoroutine
メソッドは、トランザクションへの新しい参照を返します。これは、セグメントを作成する各ゴルーチンに必要です。他のゴルーチンが開始する前または後にNewGoroutine
を呼び出すかどうかは関係ありません。
すべてのTransaction
メソッドは、任意のTransaction
参照で使用できます。 Transaction
は、任意のゴルーチンでEnd()
が呼び出されたときに終了します。
HTTPハンドラをラップしてトランザクションを監視
標準のHTTPライブラリパッケージを使用している場合、 関数のコードをインストルメントする代わりに、HTTPリクエストをラップしてトランザクションを作成することができます 。
ここでは、HTTPハンドラをラップする前と後の例を示します。
前です。
http.HandleFunc("/users", usersHandler)
後です。
これにより、リクエストライターとレスポンスライターとの間で、自動的にトランザクションが開始・終了します。
http.HandleFunc(newrelic.WrapHandleFunc(app, "/users", usersHandler))
ハンドラーでトランザクションにアクセスするには、 newrelic.FromContext
APIを使用します。これは、Goバージョン1.7以降でのみ機能することに注意してください。例えば:
func myHandler(w http.ResponseWriter, r *http.Request) { txn := newrelic.FromContext(r.Context()) txn.NoticeError(errors.New("my error message"))}
モニターエラー
New Relic for Goでは、3つの異なる方法でエラーを把握しています。
あなたがしたい場合は... | これを使用 |
---|---|
エラーを追跡し、メッセージ、クラス、属性のあらゆる組み合わせを報告する | |
予想されるエラーを追跡し、アラートをトリガーしたり、エラー メトリックに影響を与えたりすることなく、メッセージ、クラス、および属性の任意の組み合わせをレポートします | |
パニックを報告する |
|
エラーレスポンスコードの報告 | トランザクションは、400を超えるエラーと100を下回るエラーを自動的に記録します。 詳細はNew Relic for Go GitHubのドキュメントを参照してください。. |
APMおよびインフラストラクチャデータのログを表示
また、ログとアプリケーションのデータを統合して、トラブルシューティングをより簡単かつ迅速にできます。コンテキストのログでは、エラーとトレースに関連するログメッセージをアプリケーションのUIで直接表示できます。
- Errorsページからトレースをクリックすると、 Error detailsページに移動します。
- エラーの詳細ページで、 See logsをクリックします。
- 個々のログメッセージに関連する詳細を表示するには、メッセージを直接クリックします。
また、Kubernetesクラスターなどのインフラストラクチャデータのコンテキストでログを表示することもできます。別のUIに切り替える必要はありません。
取引方法の追加
Transaction
オブジェクトには、 NoticeError
、 AddAttribute
、 Ignore
など、トランザクションの動作を制御するために使用できるいくつかのオプションのメソッドがあります。トランザクションメソッドのリストについては、GodocのNew RelicforGoトランザクションメソッドを参照してください。