JavaScript 計算機の使用方法
内容
apmdevops96jp
内容
JavaScript 計算機は、ユーザが作成した JavaScript テキスト ファイルに指定された計算に従って、入力メトリックを読み取り、出力メトリックを生成します。 計算された新しいメトリックは、仮想カスタム エージェントの下の Investigator ツリーに表示できます。または、計算機スクリプトで指定された出力メトリックに従って、Investigator ツリーのどのノードにも表示できます。 計算されたメトリックはシャットオフできますが、メトリックを生成する計算機ではシャットオフ状態が認識されません。
Enterprise Manager の JavaScript エンジンでは、実行中の Enterprise Manager に JavaScript 計算機をホット デプロイすることができます。
JavaScript 計算機の作成
JavaScript 計算機ファイルは、名前の最後に .js 拡張子が付いており、Enterprise Manager の scripts ディレクトリに配置される必要があります。 サンプルの JavaScript 計算器ファイルは、Enterprise Manager インストールの
examples/scripts/
ディレクトリに用意されています。JavaScript 計算機は、入力メトリックを指定し、1 つ以上の出力メトリックを生成します。
execute( ) 関数
各計算機には 2 つの引数が指定された execute() 関数が必要です。 さらに、ヘルパ関数を使用して、Enterprise Manager に送り返すメトリックを作成できます。 構文は以下のとおりです。
function execute(metricData,javascriptResultSetHelper)
各項目の説明
- metricData: execute() の間隔より前に、15 秒ごとに関数が呼び出されるときに、関数に指定されるメトリック データの配列
- javascriptResultSetHelper: スクリプトが生成した新しいメトリック データを収集し、EM に返送するオブジェクト
- kDefaultFrequency: addMetric() ヘルパ関数の頻度引数への入力として使用します
- kIntegerConstant: 整数定数メトリック タイプにマップします
- kIntegerFluctuatingCounter: 整数変動カウンタ メトリック タイプにマップします
- kLongConstant: ロング定数メトリック タイプにマップします
- kLongFluctuatingCounter: ロング変動カウンタ メトリック タイプにマップします
- kLongTimestamp: ロング タイムスタンプ メトリック タイプにマップします
- kLongTimestampConstant: ロング タイムスタンプ定数メトリック タイプにマップします
- kIntegerPercentage: 整数パーセント メトリック タイプにマップします
- kIntegerDuration: 整数持続時間メトリック タイプにマップします
- kLongDuration: ロング持続時間メトリック タイプ \ にマップします
- kLongIntervalCounter: ロング間隔メトリック タイプにマップします
- kStringIndividualEvents: 文字列メトリック タイプにマップします
- addMetric(metricName, count, value, min, max, metricType, frequency): メトリック値のカウント/値/最小/最大の設定をサポートします。これはレートおよび間隔カウント メトリック タイプに必要です。メトリックの「値」はその「カウント」に基づきます
- getCustomMetricAgentMetric(agentMetric): 指定のエージェント メトリックを使用し、SuperDomain カスタム メトリック エージェントに基づいて残りを記入することで、完全修飾メトリック名を構築するのに役立ちます
execute() 関数は、スクリプト エンジンによって、15 秒間隔で呼び出されます。
入力メトリックの指定
計算機スクリプトでは、受信する入力メトリックを、以下のいずれかの方法で指定できます。
- 最も簡単なのは、1 組のメソッドである getAgentRegex() 関数(エージェントと一致する正規表現を含む文字列を返す)および getMetricRegex() 関数(メトリックと一致する正規表現を含む文字列を返す)を使用する方法です。
- 代わりに、メトリック指定子を返すメソッドである getMetricSpecifier() メソッド関数を使用することもできます。
注:
getAgentRegex() 関数および getMetricRegex() 関数内で文字列として作成された正規表現では、Introscope で使用する他の正規表現(メトリック グループや検索ビューで使用する表現)とは異なる方法で、文字のエスケープを行う必要があります。 これらの JavaScript 関数から返される Java のエスケープ文字は、JavaScript 内でもエスケープする必要があります。 この理由から、たとえば「\|」は、JavaScript では「\\|」とエスケープする必要があります。グローバル変数「log」
すべての JavaScript の計算機の関数は、種類が IModuleFeedbackChannel のグローバル変数「log」にアクセスします。 たとえば、以下の通りです。
function execute(metricData,javascriptResultSetHelper) { log.info("message"); log.error("message"); log.debug("message"); }
注:
高度な JavaScript 機能を使用する場合、または ECMA に準拠する場合は、スクリプト エンジンに Mozilla Rhino JavaScript ライブラリ、バージョン 1.6_R1 が埋め込まれていることに注意してください。出力メトリック データの作成
出力メトリック データを作成する方法
- メトリック名:エージェントと、メトリック ツリー内の適切なノードへの完全パスで構成されます。
- メトリック名は、入力データに基づいて作成できます。この場合、新しい計算機データがエージェントのその他のメトリック データとともに表示されます。または、
- 新しい計算機メトリック名を指定できます。この場合、計算されたメトリック データがメトリック ツリー内でそれ自体のノードに表示されます。
- データ値:スクリプトによって計算されます。
- 結果のデータ タイプ:クラス com.wily.introscope.spec.metric.MetricTypes の定数値で指定されます。
- レポートの頻度:新しいメトリック データを Enterprise Manager にレポートする頻度。入力データから取得することも、明示的に指定することもできます。 これは、Enterprise Manager のデフォルト間隔(15 秒)の倍数に変更できます。
スクリプトから計算された値は、通常、以下のようになります。
javascriptResultSetHelper.addMetric(metricName, heapUsedValue,Packages.com.wily.introscope.spec.metric.MetricTypes.kIntegerFluctuatingCounter,frequency)
注:
正規表現を指定するときは、生成するメトリックのいずれかと一致する可能性があるため、注意が必要です。 たとえば、正規表現「EJB.*Time.*」を指定すると、EJB の下に新しい値が挿入される可能性があります (つまり、「EJB.*Time.*」という正規表現を使用すると、「EJB」の下に新しい値が挿入されます)。 これを行う正規表現を変更するか、独自のメトリックからメトリック データを削除します。Javascript 計算機の追加
新しい JavaScript 計算機をインストールするには、JavaScript テキスト ファイルを Enterprise Manager インストールの
<EM_Home>/scripts
ディレクトリにコピーします。 スクリプトに別のディレクトリを使用することもできます。この場合は、introscope.enterprisemanager.javascript.dir プロパティを使用してディレクトリを指定します。スクリプトは、このスクリプト ディレクトリから、introscope.enterprisemanager.javascript.refresh プロパティで指定された間隔(デフォルトは 60 秒)で自動的にデプロイされます。
デプロイが成功すると、新しいメトリックがメトリック ブラウザ ツリーに表示されます。
MOM 上での JavaScript 計算機の実行
MOM 上で JavaScript 計算機を実行し、MOM の Custom Metric Agent 用メトリックを生成できます。 Collector に接続されているエージェントのメトリックを生成することはできませんが、Collector 内のエージェントから入力メトリックを表示することはできます。
クラスタ環境で計算機を追加、変更、または削除した場合、Collector の自動更新をオフにしない限り、MOM は変更を自動的にすべての Collector にコピーします。 詳細については、「Collector の自動更新のオフ」を参照してください。
runOnMOM 関数
MOM で実行すべきでない JavaScript 計算機は、次の例のように、false を返す runOnMOM 関数を実装する必要があります。
// return false if the script should not run on the MOM // default is true. function runOnMOM() { return false; }
runOnMOM 関数が true を返す場合、または実装されていない場合、JavaScript 計算機は MOM 上で実行されます。
ログに記録されるメトリック作成エラー数の削減
計算機が MOM 上で実行され、Collector 内に存在するエージェントのメトリックを作成する場合、以下の例のように、一度だけ WARN レベルのイベントがログに記録されます。
5/15/07 02:32:20 PM PDT [WARN] [Manager.MetricCalculatorBean] Calculator Registered Metric <ID=7, JavaScript calculator C:\workspaces\workspaceKrakatau\com.wily.introscope.em.feature\rootFilesMOM\.\scripts\HeapUsedPercentage.js>. A JavaScript calculator in the MOM cannot output metric data to an agent that exists in a Collector: SuperDomain|rhart-dt1|EPAgentProcess1|EPAgent15|GC Heap:Heap Used (%) 5/15/07 02:32:20 PM PDT [WARN] [Manager.MetricCalculatorBean]
以降のイベントは DEBUG レベルでのみログに記録されます。
Collector の自動更新のオフ
クラスタ環境は、追加、変更、または削除された JavaScript 計算機を Collector にコピーするように自動的に設定されます。 ただし、計算機をコピーしない場合は、この機能をオフにすることができます。
Collector の自動更新をオフにする方法
- MOM Enterprise Manager の上のプロパティ ファイルを開きます。
- プロパティを次のように編集します。introscope.enterprisemanager.javascript.hotdeploy.collectors.enable(デフォルト値はtrue) 値をfalseに変更します。
- Collector 上の<EM_Home>\config\internal\server\scriptsディレクトリにあるJavaScriptCalculatorsMOM.propertiesファイルを表示して、変更が適用されたことを確認します。
- 変更を保存して終了します。
- MOM Enterprise Manager を再起動します。