ビジネス・メトリックの定義
ビジネス・メトリックは、ダッシュボードまたはプロダクション・モニタで表示するための、プロダクションの性能に関連した 1 つ以上の値を測定または計算します。このページでは、ビジネス・メトリックの作成方法と表示方法について説明します。
別の方法として、サードパーティ・ビジネス・アクティビティ監視製品と InterSystems IRIS® を組み合わせて使用することもできます。このような製品は、Web サービス、JDBC、ODBC をはじめとする任意の接続テクノロジを介して、InterSystems IRIS と相互運用できます。
InterSystems IRIS ビジネス・メトリックの概要
ビジネス・メトリックは、プロダクションに含める特殊なビジネス・サービス・クラスです。プロダクションが動作中は、ビジネス・メトリック値を表示に使用できます。プロダクションが動作していない場合は、値が NULL になります。
ビジネス・メトリックのプロパティ
ビジネス・メトリック内の値は、プロパティと呼ばれます。単純なプロパティと自動履歴付き多次元プロパティの 2 種類の一般的なビジネス・メトリック・プロパティがあります。
単純なプロパティは、常に、1 つの値しか保持しません。下の例は、2 つの単純なプロパティを持つビジネス・メトリックを示しています。
自動履歴付きプロパティは、複数の値 (時間単位ごとに 1 つずつの値) を保持し、一番最後が最も新しい値です。値を記録する回数を制御できます。下の例は、2 つの自動履歴付きのプロパティを持つビジネス・メトリックを示しています。
ビジネス・メトリック・クラスの開発時には、任意の方法でメトリック・プロパティに値を提供できます。例えば、プロダクション・メッセージやビジネス・プロセス・インスタンスに格納したデータに基づく値、ビジネス・プロセスによって InterSystems IRIS に保持しているデータに基づく値、外部のアプリケーションやデータベースに要求を送信して取得したデータに基づく値を指定できます。
単一インスタンス・ビジネス・メトリックと複数インスタンス・ビジネス・メトリック
一般的なビジネス・メトリックには、単一インスタンス・ビジネス・メトリックと複数インスタンス・ビジネス・メトリックの 2 種類があります。
単一インスタンス・ビジネス・メトリックは、単一のメトリック値のセットを保持します。前の節の例は単一インスタンス・ビジネス・メトリックを示していました。
複数インスタンス・ビジネス・メトリックは、複数のメトリック値のセット (メトリックで定義されたインスタンスごとに 1 つずつのセット) を保持します。このメトリックは、複数の同様の項目のメトリックを比較する場合に役立ちます。各項目は別個ですが、他の項目と共通するプロパティを持っています。例えば、各部門で、割り当てられていないワークフロー・タスクの数と割り当てられたワークフロー・タスクの数をカウントする場合などです。1 つのビジネス・メトリックに、部門ごとに 1 つずつのインスタンスを割り当てることができます。2 つの単純なプロパティを持つ複数インスタンス・ビジネス・メトリックの例を以下に示します。
複数インスタンス・ビジネス・メトリックは、自動履歴付き多次元プロパティも持つことができます。ただし、実際には、インスタンスと履歴を同時に表示することはできません。このようなビジネス・メトリックを定義してダッシュボードに追加すると、デフォルトで、すべてのインスタンスの現在値がダッシュボードに表示されます。ユーザが単一のインスタンスを選択できるようにするフィルタを含めることができます。その場合は、ダッシュボードにそのインスタンスの履歴を表示できます。
以下に例を示します。
次に、ユーザがインスタンスを選択した場合:
ビジネス・サービスとしてのビジネス・メトリック
すべてのビジネス・メトリック・クラスは、それ自体が Ens.BusinessServiceOpens in a new tabクラスから派生した Ens.BusinessMetricOpens in a new tab クラスから派生しているため、ビジネス・サービスのすべての機能を備えています。例えば、プロダクション定義にビジネス・メトリックを追加したり、ビジネス・メトリックに論理名を割り当てたり、定期的に実行する (特定の時間間隔でメトリック・プロパティを計算し直す) ようにスケジュールしたり、ビジネス・オペレーションとビジネス・プロセスをメトリック値計算の一部として呼び出したりできます。
単一インスタンス・ビジネス・メトリックの定義
単一インスタンス・ビジネス・メトリックを定義するには、以下の要件を満たすクラスを定義します。
-
Ens.BusinessMetricOpens in a new tab のサブクラスにする必要があります。
このクラスの場合は、ADAPTER パラメータが Ens.InboundAdapterOpens in a new tab で、[CallInterval] 設定があります。これにより、ビジネス・メトリックが定期的に呼び出されることが保証されます。
-
1 つ以上のビジネス・メトリック・プロパティを定義する必要があります。詳細は、単純なプロパティと自動履歴付きプロパティで異なります。
-
オプションで、例えば、値の範囲を制御するために、プロパティ・パラメータの値を指定できます。
-
ビジネス・メトリック・プロパティに値を割り当てる必要があります。そのためには、OnCalculateMetrics() メソッドを実装する必要があります。
以降の項で詳しく説明します。
"複数インスタンス・ビジネス・メトリックの定義" も参照してください。
単純なビジネス・メトリック・プロパティの定義
単純なビジネス・メトリック・プロパティを定義するには、次のように、ビジネス・メトリック・クラスにプロパティを追加します。
Property MetricProperty As Ens.DataType.Metric;
このプロパティは、数値と文字列値のどちらかを保持できます。
ここで、MetricProperty はビジネス・メトリック・プロパティの名前です。以下に例を示します。
/// This metric tracks A/R totals
Property AccountsReceivable As Ens.DataType.Metric;
このプロパティは、数値と文字列値のどちらかを保持できます。
自動履歴付きビジネス・メトリック・プロパティの定義
自動履歴付きビジネス・メトリック・プロパティを定義するには、次のように、ビジネス・メトリック・クラスにプロパティを追加します。
Property MetricProperty As Ens.DataType.Metric (AUTOHISTORY=50) [MultiDimensional];
AUTOHISTORY パラメータには、任意の正の整数を使用できます。以下に例を示します。
/// Recent Sales History
Property SalesHistory As Ens.DataType.Metric (AUTOHISTORY = 50) [ MultiDimensional ];
一般に、この種のプロパティの目的は、一定期間に一定の間隔で値を収集し、収集した一連の数値をグラフ上にプロットすることです。そのため、割り当てられる値は数値がほとんどです。
収集の頻度は、構成されたビジネス・メトリックの [呼び出し間隔] 設定によって制御されます。
メトリック・プロパティのその他のパラメータの指定
他にも、ビジネス・メトリック・プロパティのプロパティ・パラメータを指定できます。これらのパラメータには、メトリックを表示するメーターの外観を制御する上限と下限のデフォルト値が含まれます。以下に例を示します。
/// Total Sales for the current day.
Property TotalSales As Ens.DataType.Metric (RANGELOWER = 0, RANGEUPPER = 50, UNITS = "$US");
下の表は、(前の節で説明した AUTOHISTORY に加えて) Ens.DataType.MetricOpens in a new tab で使用可能なプロパティ・パラメータを示しています。これらのパラメータは、数値を保持するメトリック・プロパティに適用されます。メトリック・プロパティが文字列値を保持する場合には適用されません。
パラメータ | 説明 |
---|---|
LINK | オプション。メトリックに関連するブラウザ・ページを指定する URL。ダッシュボードのユーザがこのパラメータに関連付けられたメーターを右クリックして [ドリル・ダウン] オプションを選択すると、ブラウザにこのページが表示されます。 |
RANGELOWER | オプション。メトリックに想定される値の範囲の低い方を指定する数値。この値は、このメトリックに関連付けられたメーターの下位範囲のデフォルトになります。 |
RANGEUPPER | オプション。メトリックに想定される値の範囲の高い方を指定する数値。この値は、このメトリックに関連付けられたメーターの上位範囲のデフォルトになります。 |
THRESHOLDLOWER | オプション。メトリックに想定される低い方のしきい値を指定する数値。この値は、このメトリックに関連付けられたメーターの下位しきい値のデフォルトになります。 |
THRESHOLDUPPER | オプション。メトリックに想定される高い方のしきい値を指定する数値。この値は、このメトリックに関連付けられたメーターの上位しきい値のデフォルトになります。 |
UNITS | オプション。メトリックの単位を指定する、二重引用符に囲まれたユーザ定義の文字列。例として "$US" または "リットル" などがあります。この文字列は、ダッシュボード画面で、ユーザが画面の上半分に表示された該当のメーターをクリックすると、画面の下半分に表示されます。 |
ビジネス・メトリック・プロパティへの値の割り当て
ここでは、単一インスタンス・ビジネス・メトリックのビジネス・メトリック・プロパティへの値の割り当て方法について説明します。複数インスタンス・ビジネス・メトリックの詳細は、このページの後半で説明します。
ビジネス・メトリック・プロパティに値を割り当てるには、ビジネス・メトリック・クラスの OnCalculateMetrics() インスタンス・メソッドを実装します。OnCalculateMetrics() の目的は、クラス内の任意のメトリック・プロパティの値を計算、検索、または設定することです。
以下の例では、2 つのメトリック・プロパティ、Counter および SalesHistory を定義しています。この例では、OnCalculateMetrics() メソッドが、単一値 Counter プロパティをインクリメントして、SalesHistory プロパティをランダム値に更新するだけです。
/// Example Business Metric class
Class MyProduction.MyMetric Extends Ens.BusinessMetric
{
/// Number of times these metrics have been calculated.
Property Counter As Ens.DataType.Metric
(RANGELOWER = 0, RANGEUPPER = 100000, UNITS = "Events");
/// Total Sales for the current day.
Property SalesHistory As Ens.DataType.Metric
(RANGELOWER = 0, RANGEUPPER = 50, AUTOHISTORY = 50, UNITS = "$US")
[ MultiDimensional ];
/// Calculate and update the set of metrics for this class
Method OnCalculateMetrics() As %Status
{
// set the values of our metrics
Set ..Counter = ..Counter + 1
Set ..SalesHistory = $GET(..SalesHistory) + $RANDOM(10) - 5
Quit $$$OK
}
}
注 :
-
単純なプロパティと自動履歴付きプロパティは値の指定方法が同じであることに注目してください
(多次元プロパティに慣れている場合は、ここで示すように、添え字が付けられていないプロパティの最上位ノードの値しか指定しないことに注意してください。AUTOHISTORY パラメータに従って、InterSystems IRIS は、配列内の下位ノード (整数添え字が付けられた配列) を自動的に維持するコードを生成します。例えば、SalesHistory(1) は SalesHistory プロパティ内の最も古い値です)。
-
このメソッドでは、オプションで、ビジネス・オペレーションとビジネス・プロセスを呼び出すことができます。値の計算に必要な API を呼び出すこともできます。
-
自動履歴付きプロパティに NULL 値を含めることはできません。NULL 値は表示されないため、棒グラフと折れ線グラフの棒やエントリの数が合わなくなります。これにより、軸ラベルとラベルで表示する項目が不一致になることがあります。このような問題を避けるには、すべての NULL 値を 0 に置き換えます。
-
OnCalculateMetrics() メソッドの呼び出しの前に、すべてのメトリック・プロパティは、最後に計算された値に設定されます (そのような値がある場合)。OnCalculateMetrics() の呼び出し後、すべてのメトリック・プロパティの値は、ダッシュボードやそれらの値を必要とする関係者など (存在する場合) が後から使用できるように、ビジネス・メトリックのキャッシュに格納されます。
複数インスタンス・ビジネス・メトリックの定義
複数インスタンス・ビジネス・メトリックを定義するには:
-
インスタンス名を定義します。そのためには、以下を実行します。
-
静的なインスタンス名のセットを定義します。そのためには、配列に名前の固定リストを割り当てる OnGetInstances() メソッドを実装します。このアプローチはインスタンスのセットが静的な場合に有効です。
-
インスタンス名を動的に定義します。そのためには、SQL データベースの列から名前のリストを取得する MetricInstances() クエリを追加します。このアプローチは、項目数または項目名が時間の経過に伴って変化することを想定している場合に有効です。
-
これらのアプローチを組み合わせます。MetricInstances() クエリを使用して初期リストを取得してから、OnGetInstances() を使用して名前を追加または置換します (ビジネス・メトリック・インスタンスは、最初に MetricInstances() を呼び出してから、OnGetInstances() を呼び出します)。
-
-
OnCalculateMetrics() の実装では、%Instance プロパティの値をチェックして、ビジネス・メトリック・プロパティにそのインスタンスに適切な値を割り当てます。
-
以下の原則を覚えておいてください。
-
インスタンス名は文字列です。
-
インスタンス名は一意である必要があります。
-
インスタンス名は、ユーザに対してダッシュボード上に表示される場合があるため、簡潔でわかりやすい適切な名前を使用してください。
-
インスタンス数は適度なものにしてください。インスタンスが多数あると、計算にコストがかかり、ユーザにとって理解しにくくなる可能性があります。
-
以降の項で詳しく説明します。
静的なインスタンス名のセットの定義
静的なインスタンス名のセットを定義するには、OnGetInstances() メソッドを上書きします。このメソッドには、配列が参照によって渡されます。OnGetInstances() メソッドは、1 から始まる序数を添え字として使用した名前をこの配列に格納する必要があります。単純な例を以下に示します。
/// Return an array of metric instances
ClassMethod OnGetInstances(ByRef pInstSet As %String) As %Status
{
Set pInstSet(1) = "Apple"
Set pInstSet(2) = "Banana"
Set pInstSet(3) = "Cherry"
Quit $$$OK
}
動的なインスタンス名の定義
インスタンス名のセットを動的に定義するには、次のように、ビジネス・メトリック・クラスにクエリを追加します。
-
クエリには MetricInstances() という名前を付ける必要があります。
-
引数は取らないようにする必要があります。
-
クエリには SQL SELECT 文を含める必要があります。
-
クエリから返される最初の列にインスタンス名が入っています。
以下に例を示します。
/// Return current list of product names
Query MetricInstances() As %SQLQuery
{
SELECT ProductName FROM MyApplication.Product
}
複数インスタンス・メトリック内のプロパティへの値の割り当て
複数インスタンス・ビジネス・メトリック内のプロパティに値を割り当てるには、OnCalculateMetrics() メソッドを実装します。この実装では、インスタンスごとに適切な値を設定します。そのためには、以下のように操作します。
-
%Instance プロパティの値をチェックします。このプロパティは、ビジネス・メトリック・インスタンスのいずれかの名前と一致します
(InterSystems IRIS は、自動的に、一度に 1 つずつのインスタンスを順番に処理します。インスタンスごとに、OnCalculateMetrics() インスタンス・メソッドが実行されます)。
-
ビジネス・メトリック・プロパティの値をそのインスタンスの必要に応じて設定します。
以下に例を示します。
Method OnCalculateMetrics() As %Status
{
// get product name
Set product = ..%Instance
// find recent sales using SQL
&SQL(SELECT SUM(Sales) INTO :sales
FROM MyApplication.Product
WHERE ProductName = :product)
// update sales metric
Set ..Sales = sales
Quit $$$OK
}
この例では、SQL クエリ内の現在のインスタンス名 (%Instance) を使用して、そのインスタンスの最新の売上データを取得してから、それをクラスの現在のインスタンスの Sales プロパティに書き込みます。
%Instance プロパティは、現在のインスタンス名を置き換えたいとき、クラス内の別の場所で使用することもできます。
ビジネス・メトリック内のその他のオプション
この節では、ビジネス・メトリック・クラス内のその他のオプションについて説明します。
ダッシュボード内で使用するアクションの定義
ビジネス・メトリック・クラスでは、ダッシュボードにユーザ・オプションとして表示可能なアクションを定義できます。アクションはクライアント側のアクティビティ (ダッシュボードのフィルタリングや更新など) とサーバ側のアクティビティ (独自の API の呼び出しなど) の組み合わせを実行できます。アクション・メカニズムはごく一般的なものです。
アクションを定義するには、ビジネス・メトリック・クラスの %OnGetActionList() メソッドと %OnDashboardAction() メソッドを実装します。これらのメソッドの詳細は、"InterSystems Business Intelligence の実装" の "カスタム・アクションの定義" を参照してください。
OnInit() の実装
例えば、すべてのプロパティを初期化するように、ビジネス・メトリック・クラスの OnInit() コールバックを上書きすることもできます。そのためには、以下に示すように、スーパークラスの BusinessMetric から提供される OnInit() メソッドが明示的に呼び出されることを保証する必要があります。そうしないと、該当するダッシュボード要素が正しく表示されません。
Method OnInit() As %Status
{
// . . .
// invoke superclass implementation
Quit ##super()
}
ダッシュボードへのビジネス・メトリックの追加
ダッシュボードにビジネス・メトリックを追加するには、次の手順を実行します。
-
他のビジネス・サービスを追加する場合と同じ方法で、適切なプロダクションにビジネス・メトリックを追加します。
-
ビジネス・メトリックごとに必要であれば、[呼び出し間隔] 設定を構成します。
-
ダッシュボードを作成して、それらにビジネス・メトリックを追加します。詳細は、"プロダクションの構成" を参照してください。
-
オプションで、ビジネス・メトリックからの情報が表示されるように [プロダクション・モニタ] ページを拡張します。次の節を参照してください。
プロダクション・モニタへのビジネス・メトリックの追加
ダッシュボードにビジネス・メトリックを表示することに加えて、ビジネス・メトリック・クラスからの情報を表示するように [プロダクション・モニタ] ページを拡張できます。そのためには、次のように、ネームスペース内の ^Ens.Monitor.Settings グローバルのノードを設定します。
ノード | 値 |
---|---|
^Ens.Monitor.Settings("MetricClasses",n,"Metric") | n 番目のビジネス・メトリックの構成名。[プロダクション・モニタ] ページには、ビジネス・メトリックが n で指定された順で表示されます。 |
^Ens.Monitor.Settings("MetricClasses",n,"Title") | このビジネス・メトリックの表示名。デフォルトは、ビジネス・メトリックの構成名です。 |
^Ens.Monitor.Settings("MetricClasses",n,"Instance") | このビジネス・メトリックのインスタンス名。メトリックにインスタンスが存在しない場合は、これを省略します。メトリックにインスタンスが存在せず、これを省略した場合は、定義された順で最初のインスタンスが使用されます。 |
例えば、ターミナルで以下を実行します。
Set ^Ens.Monitor.Settings("MetricClasses",1,"Metric") = "MetricConfigName"
Set ^Ens.Monitor.Settings("MetricClasses",1,"Title") = "Title for Display"
Set ^Ens.Monitor.Settings("MetricClasses",1,"Instance") = "MetricInstanceName"
追加する各ビジネス・メトリックについて、[プロダクション・モニタ] ページには、そのメトリック情報の最終更新日時、そのメトリックやインスタンスのデータが存在するかどうか、およびそのメトリックが現在実行中であるかどうかが示されます。
[プロダクション・モニタ] ページの使用方法は、"プロダクションの監視" の "プロダクションの監視" を参照してください。
プログラムによる値の設定と取得
メトリック・プロパティにプログラムからアクセスしなければならない場合があります。例えば、メトリックのプロパティを直接読み込んだり、設定したりするために、ビジネス・プロセスが必要になる場合もあります。そのためには、Ens.BusinessMetricOpens in a new tab の GetMetric() クラス・メソッドと SetMetric() クラス・メソッドを使用します。
GetMetric() メソッドの使用法
GetMetric() クラス・メソッドは、ビジネス・メトリック・キャッシュから、指定されたメトリック・プロパティの現在値を読み取ります。このメソッドは次のように呼び出します。
Set value = ##class(Ens.BusinessMetric).GetMetric(metric,property)
ここで、metric はビジネス・メトリックの名前 (クラス名ではなく、構成名) で、property はメトリック・プロパティの名前です。指定された値を GetMetric() で読み込めない場合は、空文字列が返されます。
多次元メトリックのプロパティの値を読み込む場合には、プロパティのどのサブノードを読み込むかを指定する、別のオプション・パラメータがあります。以下に例を示します。
Set value(1) = ##class(Ens.BusinessMetric).GetMetric(metric,property,1)
SetMetric() メソッドの使用法
SetMetric() クラス・メソッドは、ビジネス・メトリック・キャッシュ内の指定されたメトリック・プロパティの値を設定します。このメソッドは次のように呼び出します。
Set tSC = ##class(Ens.BusinessMetric).SetMetric(metric,property,value)
ここで、metric はビジネス・メトリックの名前 (クラス名ではなく、構成名)、property はメトリック・プロパティの名前、value はメトリック・プロパティに設定する値です。
SetMetric() は、成功か失敗かを示す %StatusOpens in a new tab コードを返します。そのため、SetMetric() が目的のビジネス・メトリックのロックを取得できずに失敗する場合があります。
多次元メトリック・プロパティのすべての値を設定するには、値の配列を作成してから、参照によって配列を渡します。以下に例を示します。
For i=1:1:20 {
Set data(i) = i*i
}
Set tSC = ##class(Ens.BusinessMetric).SetMetric("MyMetric","MyGraph",.data)
ビジネス・メトリック・キャッシュについて
InterSystems IRIS はできるだけ効率的にメトリック値を読み取ることができるように、その値をキャッシュに保存しています。このキャッシュが以下の構造を持つグローバル ^IRIS.Temp.EnsMetrics です。
^IRIS.Temp.EnsMetrics(Namespace,BusinessMetric,Instance,Property) = value
説明 :
-
Namespace は、このメトリックが設定されたプロダクションが実行されるネームスペースです。
-
BusinessMetric は、ビジネス・メトリックのプロダクション構成名です。
-
Instance は、インスタンス番号です。インスタンスには、定義された順で番号が付けられます。
-
Property は、ビジネス・メトリック・プロパティの名前です。