ビジネストランクションスナップショットの管理

エージェントは、ビジネストランザクションをモニタする際、特定の時点でのビジネストランザクションのインスタンスを示すトランザクション スナップショットを自動作成します。トランザクションスナップショットには多くの詳細が含まれるため、パフォーマンス低下時のトラブルシューティングに大変役立ちます。

スナップショットを作成するには、ビジネストランザクションを作成する以外に変更することは何もありませんが、以下を実行するコールを追加できます。

  • スナップショットが取得されているかを確認
  • スナップショットに追加データを提供
  • スナップショットにURLを設定

エージェントが現在スナップショットを取得しているかを確認

エージェントは、コストが高いため、スクリーンショットを常に収集しません。デフォルトではスナップショットは10分ごとに収集されますが、このスケジュールは構成可能です。スナップショットの定期的な収集頻度の構成 を参照してください。

エージェントがスナップショットを収集している場合に 0 ではない数字を返す appd_bt_is_snapshotting() を使用して、スナップショットが現在取得されているかどうかを確認できます。主に、スナップショットのユーザーデータ収集のための無駄なオーバーヘッドや、現在スナップショットが収集されていない場合にスナップショットURLを設定することを回避するために使用します。

ビジネストランザクションユーザーデータの追加

必要に応じて、トランザクション スナップショットにデータを追加できます。たとえば、多数のエラーが発生しているユーザ、応答時間が遅くなっているリージョンやどのメソッドが遅いのかを把握できます。データは、コントローラ UI のトランザクション スナップショットの [USER DATA] タブに表示されます。

スナップショットが発生しているときは、appd_bt_add_user_data() を使用してスナップショットに収集させるデータのキーと値を渡します。{{appd_bt_add_user_data,}} 関数の場合、コントローラデータベースは 5000 文字を超えるログメッセージを切り捨てます。

スナップショットURLの追加

スナップショットの URL を使用すると、コントローラユーザはスナップショットを他のユーザと共有できます。appd_bt_set_url() を使用して、URL を現在のスナップショットに設定できます。

スナップショットの設定例

void setSnapshotAttributes(appd_bt_handle btHandle, int minute, int halfsec)
{
// do this only if the agent is collecting a snapshot
if (appd_bt_is_snapshotting(btHandle))
{
char nameBuf[30];
char valueBuf[30];
// add custom data to the snapshot
snprintf(nameBuf, sizeof(nameBuf), "BT:%p\n", btHandle);
snprintf(valueBuf, sizeof(valueBuf), "Minute:%d Second:%d\n", minute, halfsec/2);
appd_bt_add_user_data(btHandle, nameBuf, valueBuf);
static int snapCount = 0;
int switchVal = snapCount % 4;
// report errors, but only ERROR_LEVEL errors are marked as error transactions
if (switchVal)
{
appd_error_level errorLevel;
bool markBtAsError;
switch (switchVal)
{
case 1:
errorLevel = APPD_LEVEL_NOTICE;
markBtAsError = false;
snprintf(nameBuf, sizeof(nameBuf), "NOTICE BT:%p M:%d S:%d\n", btHandle, minute, halfsec/2);
break;
case 2:
errorLevel = APPD_LEVEL_WARNING;
markBtAsError = false;
snprintf(nameBuf, sizeof(nameBuf), "WARNING BT:%p M:%d S:%d\n", btHandle, minute, halfsec/2);
break;
case 3:
errorLevel = APPD_LEVEL_ERROR;
markBtAsError = true;
snprintf(nameBuf, sizeof(nameBuf), "ERROR BT:%p M:%d S:%d\n", btHandle, minute, halfsec/2);
break;
}
appd_bt_add_error(btHandle, errorLevel, nameBuf, markBtAsError, markbtaserror);
}
snapCount++;
// set the snapshot url
snprintf(nameBuf, sizeof(nameBuf), "http://bt-%p.com", btHandle);
appd_bt_set_url(btHandle, nameBuf);
}
}