カスタムメトリックの作成

ビジネストランザクションのコール数や応答時間などのビルトインメトリックを補完するカスタムメトリックを作成できます。複数のアプリケーション コンテキストのメトリックも作成できます。

カスタムメトリックはアプリケーション コンテキストに依存します。複数のコンテキストがある状況では、関連するアプリケーション コンテキストに適用するカスタムメトリックに正しいコンテキスト名を指定する必要があります。代替アプリケーション コンテキストの作成 を参照してください。

警告: ノードでカスタムメトリックを作成すると、カスタムメトリックは階層内の他のすべてのノードに表示されます。

たとえば、デフォルトのアプリケーション コンテキストでは、名前としてヌルポインタまたは空の文字列を使用します。appd_sdk_init メソッドは、コントローラに接続し、デフォルトのアプリケーション コンテキストを作成するように SDK に指示します(名前は指定されません)。

struct appd_config* cfg = appd_config_init();
appd_config_set_controller_host(cfg, host.c_str());
appd_config_set_controller_port(cfg, port);
appd_config_set_controller_account(cfg, account_name.c_str());
appd_config_set_controller_access_key(cfg, access_key.c_str());
appd_config_set_controller_use_ssl(cfg, useSSL?1:0);
appd_config_set_app_name(cfg, app_name.c_str());
appd_config_set_tier_name(cfg, tier_name.c_str());
appd_config_set_node_name(cfg, node_name.c_str());
appd_sdk_init(cfg);

代替アプリケーション コンテキストを指定するには、(デフォルトのヌルポインタではなく)名前文字列を指定する必要があります。代替アプリケーション コンテキストを作成するには、appd_sdk_add_appd_context メソッドを使用します。次の例では、「context2」という代替アプリケーション コンテキストを作成します。この名前文字列を使用して、実際の構成構造体ではなく、カスタムメトリックを作成します。

const char* name = "context2";
struct appd_context_config* cfg2 = appd_context_config_init(name));
appd_context_config_set_controller_account(cfg2, ac.second.ac_account_get().c_str());
appd_context_config_set_controller_access_key(cfg2, ac.second.ac_access_key_get().c_str());
appd_context_config_set_controller_host(cfg2, ac.second.ac_host_get().c_str());
appd_context_config_set_controller_port(cfg, ac.second.ac_port_get());
appd_context_config_set_controller_use_ssl(cfg2, ac.second.ac_use_ssl_get() ? 1 : 0);
appd_context_config_set_app_name(cfg2, ac.second.ac_app_get().c_str());
appd_context_config_set_tier_name(cfg2, ac.second.ac_tier_get().c_str());
appd_context_config_set_node_name(cfg2, ac.second.ac_node_get().c_str());
appd_sdk_add_app_context(cfg2);

カスタムメトリックパスは、同じコントローラに移動する場合と移動しない場合があります。個別のノードのビジネストランザクションと同様に、プログラムは異なるノードの 2 つのビジネストランザクションを処理できます。1 つはデフォルトのアプリケーション コンテキストに合わせ、もう 1 つは代替アプリケーション コンテキストに合わせます。メソッド文字列が Custom Metric| ではなく Custom Metrics| で始まるように指定する必要があります。

カスタムメトリックを作成する場合、次のメソッドを使用できます。

  • appd_custom_metric_add()

  • appd_custom_metric_report()
デフォルトのアプリケーション コンテキスト

appd_custom_metric_add() メソッドは、デフォルトコンテキストにカスタムメトリックを登録します。

appd_custom_metric_add(nullptr, "Custom Metrics|my_default_custom_metric" , time_rollup_type, cluster_rollup_type, hole_handling_type);

appd_custom_metric_report() は、「my_default_custom_metric」という名前のアプリケーション コンテキストを作成します。

appd_custom_metric_report(nullptr, "Custom Metrics|my_default_custom_metric",some_value);

appd_custom_metric_report はデフォルトのアプリケーション コンテキストと、「my_second_custom_metric」という名前の代替アプリケーション コンテキストを作成します。

代替アプリケーション コンテキスト

代替コンテキストの場合、appd_custom_metric_add() メソッドは代替アプリケーション コンテキストにカスタムメトリックを登録します。

appd_custom_metric_add(name, "Custom Metrics|my_second_custom_metric" , time_rollup_type, cluster_rollup_type, hole_handling_type);

または

appd_custom_metric_add("context2", "Custom Metrics|my_second_custom_metric" , time_rollup_type, cluster_rollup_type, hole_handling_type);

appd_custom_metric_report はデフォルトのアプリケーション コンテキストと、「my_second_custom_metric」という名前の代替アプリケーション コンテキストを作成します。

デフォルトのアプリケーション コンテキスト
appd_custom_metric_report(name, "Custom Metrics|my_second_custom_metric",some_value);
代替アプリケーション コンテキスト
appd_custom_metric_report("context2", "Custom Metrics|my_second_custom_metric",some_value);

コントローラでは、カスタムメトリックフォルダは、my_default_custom_metricmy_second_custom_metric の 2 つのエンティティを持つ「Custom Metrics」として、Metric Browser の関連付けられた階層の下に表示されます。

次の例は、両方のメソッドシグネチャを持つコールを示しています。

appd_custom_metric_add("app_context", "Custom Metrics|Memory|Total Memory Usage",
APPD_TIMEROLLUP_TYPE_AVERAGE, APPD_CLUSTERROLLUP_TYPE_INDIVIDUAL,
APPD_HOLEHANDLING_TYPE_RATE_COUNTER);

このメソッドは、アプリケーション コンテキスト(「Total Memory Usage」)とメトリックへのパス(appd_custom_metric_report() [Metric Browser] の [Custom Metrics] > [Memory])をコントローラに渡します。その他のパラメータは、メトリックの処理方法を定義します。メトリックが宣言されると、次のようにコードで appd_custom_metric_report() メソッドを使用してメトリックにデータをレポートできます。

appd_custom_metric_report("app_context", "Custom Metrics|Memory|Total Memory Usage", 1234);

C++ アプリケーションのインストルメンテーションを簡素化するには、「C/C++ SDK リソース管理」を参照してください。

メトリック処理パラメータ

コントローラでは、ビルトインメトリックと同様に、カスタムメトリック値にも一部の標準処理関数が適用されます。これらの関数では、メトリックが時間経過とともにロールオーバーされる方法などが定義できます。コントローラがカスタムメトリックを処理する方法は、メトリックの性質によって異なります。マシンの状態を表すメトリックの場合、コントローラはメトリックの最後に観測された値をキャプチャします。コール率メトリックの場合、コントローラは平均値を使用します。次のセクションでは、コントローラによるメトリック処理を定義するために使用できるパラメータについて説明します。

時間ロールアップタイプ

time_rollup_type パラメータは、メトリック値を時間経過とともにロールアップする方法をコントローラに指示します。コントローラでメトリックをロールアップする方法は、次の3つです。

  • 期間内にレポートされたすべての値の平均を計算できます。この方法を使用するビルトインメトリックの例は、Average Response Time メトリックです。
  • その1分以内にレポートされたすべての値の合計。この動作はカウンターと同様です。メトリックの例は、 Calls per Minute メトリックです。
  • 現在の値は、最後にレポートされた値です。その1分以内に値がレポートされない場合は、最後にレポートされた値が使用されます。この方法を使用するメトリックの例は、Max Available (MB) メトリックなどのマシン状態メトリックです。

クラスタロールアップタイプ

appd_cluster_rollup_type パラメータは、ティア(ノードのクラスタ)のメトリック値を集計する方法をコントローラに指示します。

  • Individual:ティア内の各ノードでのメトリック値を平均して、メトリック値を集計します。たとえば、Hardware Resources|Memory|Used % は個別ロールアップタイプを使用するビルトインメトリックです。
  • Collective:ティア内のすべてのノードのメトリック値を合計して、メトリック値を集計します。たとえば、Agent|Metric Upload|Metrics uploaded は集合ロールアップタイプを使用するビルトインメトリックです。

ホール処理タイプ

特定のメトリックでは、特定の1分以内のデータがレポートされない場合があります。appd_hole_handling_type パラメータは、そのタイムスライスのメトリックカウントを設定する方法をコントローラに指示します。このカウントは、ホール処理タイプが REGULAR_COUNTER の場合は 0 に設定され、RATE_COUNTER の場合は 1 に設定されます。つまり、集計は REGULAR_COUNTER の影響を受けませんが、RATE_COUNTER の影響は受けます。

たとえば、データ 9、3、0、12 を持つ 4 つのタイムスライスがあるとします。3 番目のタイムスライスには 0 が設定され、そのタイムスライスにはメトリックは報告されません。の合計は、9+3+0+12 = 24 です。

メトリックが REGULAR_COUNTER の場合、3 番目のタイムスライスのカウントは 0 なので、カウントの合計は 1+1+0+1 = 3 です。メトリックが RATE_COUNTER の場合、カウントの合計は 1+1+1+1 = 4 です。REGULAR_COUNTER の場合の平均値は 24/3 = 8、RATE_COUNTER の場合の平均値は 24/4 = 6 になります。

通常のカウンタのホール処理タイプを使用するビルトインメトリックには、Average Response TimeAverage CPU UsedNumber of Stalls などがあります。レートカウンタのホール処理タイプを使用するビルトインメトリックには、BT Calls per minuteErrors per minute などがあります。