C SDKでアプリケーションをインストゥルメントする

Cライブラリをインポートできる言語を使用して Linux上でアプリケーションをモニターするには、以下が必要です:

  1. newrelic_new_app_config()を使用して設定を作成し、newrelic_init()を使用してデーモンに接続し、newrelic_create_app()を使用してアプリケーションに接続します。詳細については、C SDKのインストレーション手順を参照してください。
  2. 本ドキュメントの説明通り、C SDKを使用して手動でトランザクションをインストゥルメントします。

New Relicは、ウェブまたは非ウェブトランザクションを、ソフトウェアアプリケーションの動作に対する1つの論理単位として定義します。New Relic機能を追加し、ソースコードに手動でトランザクションをインストゥルメントすると、New Relicのトランザクションページでデータを表示できます。トランザクションとエラーのセグメントのインストゥルメントも行えます。

トランザクションをインストゥルメントする

モニターできるようにトランザクションをインストゥルメントするには、トランザクションの周囲でインストゥルメンテーションを開始および停止するNew Relic機能をラップします。使用する機能は、ウェブまたは非ウェブトランザクションのいずれをインストゥルメントしたいかにより異なります。

次の例では、アプリケーションはnewrelic_create_app()を呼び出した後に作成されています。詳細については、GitHubにあるC SDKのインストレーション手順およびC SDK libnewrelic.hドキュメントを参照してください

  1. モニターしたいトランザクションの直前に次のコードを追加し、必要なパラメーターを供給します。

    ウェブトランザクションの場合:

    // Example code:
    newrelic_txn_t *txn;
    /* ... */
    txn = newrelic_start_web_transaction(app, "NAME_YOUR_TRANSACTION");

    非ウェブトランザクションの場合:

    // Example code:
    newrelic_txn_t *txn;
    /* ... */
    txn = newrelic_start_non_web_transaction(app, "NAME_YOUR_TRANSACTION");
  2. モニターしたいウェブまたは非ウェブトランザクションの直後newrelic_end_transaction()を追加し、パラメーターとしてポインタにトランザクション&txnを供給します。

セグメントをインストゥルメントする

C SDKを使用してトランザクションをインストゥルメントしたら、そこでセグメントをインストゥルメントできます。セグメントをインストゥルメントすることにより、トランザクション内の個別の機能および呼び出しをモニターできます。

セグメントの例

チェックアウトプロセスに関連するトランザクションがあり、これは、発送情報とクレジットカード情報の両方をプロセスするものです。アプリケーションをインストゥルメントし、当該トランザクションを最大2つのセグメントに分割することができます。1つのセグメントは発送、もう1つのセグメントは支払いです。

セグメントをインストゥルメントし、次のような種類の呼び出しをモニターできます:

詳細については、GitHubにあるC SDKのインストレーション手順およびC SDK libnewrelic.hドキュメントを参照してください

外部サービスの呼び出しをインストゥルメントする

外部サービスへの呼び出しをモニターするには、インストゥルメントされたトランザクション内の外部セグメントをインストゥルメントします。外部セグメントは、トランザクションページの内訳表と外部サービスページに表示されます。

外部セグメントをインストゥルメントするには、モニターしたい機能の周囲でインストゥルメンテーションを開始および停止するNew Relic機能をラップします:

  1. トランザクションをインストゥルメントします
  2. 外部セグメントを説明するnewrelic_external_segment_params_tを作成し、必要なパラメーターを供給します。
  3. モニターしたい機能の直前に newrelic_start_external_segment()を追加し、必要なパラメーターを供給します。

  4. モニターしたい機能の直後にnewrelic_end_segment()を追加し、必要なパラメーターを供給します。

詳細については、GitHubにあるC SDKのインストレーション手順およびC SDK libnewrelic.hドキュメントを参照してください

任意コードへの呼び出しをインストゥルメントする(カスタムセグメント)

任意コードへの呼び出しをモニターするには、インストゥルメントされたトランザクション内のカスタムセグメントをインストゥルメントします。カスタムセグメントは、トランザクションページにある内訳表に表示されます。

カスタムセグメントをインストゥルメントするには、モニターしたい機能の周囲でインストゥルメンテーションを開始および停止するNew Relic機能をラップします。

  1. トランザクションをインストゥルメントします
  2. モニターしたい機能の直前に newrelic_start_segment()を追加し、必要なパラメーターを供給します。
  3. モニターしたい機能の直後にnewrelic_end_segment()を追加し、必要なパラメーターを供給します。

詳細については、GitHubにあるC SDKのインストレーション手順およびC SDK libnewrelic.hドキュメントを参照してください

データストアへの呼び出しをインストゥルメントする

データストアへの呼び出しをモニターするには、インストゥルメントされたトランザクション内のデータストアセグメントをインストゥルメントします。データストアセグメントは、New Relicのトランザクションページにある内訳表とデータベースタブに表示されます。データストアセグメントはAPMトランザクションイベントdatabaseDuration属性としても表示できます。

データストアセグメントをインストゥルメントするには、モニターしたい機能の周囲でインストゥルメンテーションを開始および停止するNew Relic機能をラップします。

  1. トランザクションをインストゥルメントします
  2. データストアセグメントを説明するnewrelic_datastore_segment_params_tを作成します。
  3. モニターしたい機能の直前にnewrelic_start_datastore_segment()を追加し、必要なパラメーターを供給します。
  4. モニターしたい機能の直後にnewrelic_end_segment()を追加し、必要なパラメーターを供給します。

詳細については、GitHubにあるC SDKのインストレーション手順およびC SDK libnewrelic.hドキュメントを参照してください

データベース名とデータベースインスタンスの報告方法を設定するには、newrelic_datastore_segment_config_tを使用します。

データストアセグメントの低速クエリトレースを報告する(SQLのみ)

低速クエリトレースを報告できるのは、SQLデータベースのみです。

特定した時間より長くかかるデータストアセグメントについて低速クエリトレースを報告するには、newrelic_app_config_tで次の設定を有効化します。

  1. transaction_tracer.datastore_reporting.enabledtrueに設定することで、低速クエリトレースを有効化します。
  2. 閾値を設定するには、transaction_tracer.datastore_reporting.threshold_usに、マイクロ秒単位で時間の長さを追加します。

その後、データストアの呼び出し時間が閾値より長くかかる場合は、C SDKが低速クエリとして報告します。低速クエリトレースの詳細を表示するには、New Relicのデータベースおよび低速クエリページを使用します。

詳細については、GitHubにあるC SDKのインストレーション手順およびC SDK libnewrelic.hドキュメントを参照してください

エラーをインストゥルメントする

トランザクションのエラーをモニターするためにC SDKを使用するには、newrelic_notice_error()機能を追加することにより、手動でソースコードをインストゥルメントする必要があります。

トランザクションのエラーおよびエラーのトレースは、New Relicのエラー解析ページに表示されます。C SDKは、エラーの総数および1分間に最大100件までのエラートレースを報告します。トランザクションのエラーは、APMTransactionErrorイベントとして表示、クエリ、可視化することもできます。

関数の呼び出しをエラートレースに含めるには、GNUの-rdynamicリンカーフラグを使い、コンパイルする際にアプリケーションをリンクさせます-rdynamicリンカーフラグを使うと、エラートレースがより意味を持つものになります。

トランザクションのエラーをインストゥルメントするには:

  1. トランザクションを開始します
  2. newrelic_notice_error()でエラーを記録し、必要なパラメーターを供給します。
  3. トランザクションを終了し、必要なパラメーターを供給します。

詳細については、GitHubにあるC SDKのインストレーション手順およびC SDK libnewrelic.hドキュメントを参照してください

メトリクスのグループ化問題を回避する

アカウントまたはアプリケーションが、グループで管理した方がよい個別のメトリックスを送信し過ぎた場合、New Relicはメトリクスのグループ化問題またはMGIという用語でこの問題を示します。アプリケーションがNew Relicに不必要に大量なデータを送信している場合、これが原因となってチャート、表、そしてレポートの有効性が損なわれることとなります。

メトリックのグループ化問題が最も起きやすいのはWebトランザクションであり、特に当てはまるのはURLに基づく命名が行われた場合です。このような状況を回避するために、メトリクスのグループ化問題を参照してください。

その他のヘルプ

さらに支援が必要な場合は、これらのサポートと学習リソースを確認してください: