データパーサー
データパーサーは、外部データを変換して解析し、NetCrunch カウンタメトリックとステータスオブジェクトとして利用できます。
データパーサーを使用すると、外部データをNetCrunch JSON形式に変換し、カウンタとステータスオブジェクトを記述することができます。データパーサーを使用して外部ソースからこれらのデータを取得できるいくつかのセンサーがあります。
データパーサーを使用するセンサー
Data File
このセンサーは、以下のソースからデータを取得できます:
- Windows ファイル
- HTTP(ファイルまたはページ)
- FTP/S
- SSH (SFTP または Bash)
Generic Agent
Generic Agent センサーは、外部ソース(エージェント)からデータを受信できます。データは、JSON (ネイティブNetCrunch 形式)や、NetCrunch データパーサーを使用して変換できる他の形式で送信できます。
REST HTTP
カスタム要求を含む任意のタイプのHTTP 要求を送信でき、URL クエリパラメータを追加できます。また、要求のカスタムヘッダーとCookie を設定することもできます。データパーサーと組み合わせて、外部ソースから任意のデータを取得できます。
XPath/DOM データパーサー
カウンターの一覧とステータスオブジェクトとパスを定義することができます。XPath を使用するもできますし、CSS セレクタをよくしている場合はCSS セレクタを使用することもできます。CSS セレクタは、DOM ノードのみを選択することが望ましいので、'|' パイプ文字の後に属性名を追加して、構文を拡張しました。
例
<doc>
<amount>10.2</amount>
<user name="John" age="123"/>
</doc>
セレクタ
- Amount を取得するには、XPath selector セレクタ
//doc/amountまたは DOM セレクタdoc > amountを使用できます。 - 特定のJohn age を取得するには、
//doc/user[@name='John']/@ageまたは拡張DOM セレクタdoc > user[name='John'] | ageで選択できます。
JSONPath
JSONPath は、XPath に近く、同様の機能を備えています。単純なパスの場合、単純なドットのパスを使用できます。
例
{
"main" : {
"temperature" : 10.2,
"humidity" : 66
}
}
これは簡単な例ですが、公共の天気API の1つで提供されている実際のデータを非常によく似ています。
- 単純な
main.temperatureで温度を選択できます。 - 湿度については、JSONPath
$..humidityを使用できます。
データパーサースクリプト(Javascript)
Javascript は、正規表現と最新のEXMAScript 言語標準を実装するJavascript エンジン(V8)の全機能を使用できるので、データを解析するのに適したソリューションです。
スクリプトはStrict モードで、別々のSandbox のNodeJS エンジンで実行され、制限時間を超えた場合は強制終了されます。 通常のランタイム(外部モジュールを読み込むことはできません)に加え、JSON、XML、HTMLデータ形式を解析するために最も望ましいユーティリティを提供しました。
テストコンソール
データパーサーエディターは、実際にNetCrunch のスクリプトエンジンでスクリプトを実行することにより、スクリプトをテストできる小さな開発環境です。テストデータを提供することができ、コンソールオブジェクトを使用してテストコンソールにログメッセージを記録することができます。
スクリプトパラメータと結果
スクリプトには2つのパラメータがあります:
- data - 入力データを含みます。ソースから期待するデータタイプに依存いたします。
- result - カウンタとステータスオブジェクトの一覧の提供するスクリプト結果オブジェクト
カウンタ
カウンタメトリックは、NetCrunch が観測した数値を表します。これは、NetCrunch の基本的な構成単位の1つです。 カウンタパスは次のように記述されます:
- Object - 空欄のままにしておくと、センサーの識別がオブジェクトとして使用されます。測定対象を説明しています。プログラムの期間では、測定対象のクラスを記述します。例えば、Process、Disk など。
- Counter - メトリックの名前。例えば、Temperature、% Utilization% など。
- Instance - オブジェクトのインスタンスを識別します。これはオプションです。ディスクID、プロセス名など。
カウンタパスの形式
<Object>/<Counter>.<Instance>
例
Process/% Processor Utilization.NCServer.exe
WebSite/Current Visitors
ステータスオブジェクト
ステータスオブジェクトは、監視対象のオブジェクトの状態を示します。単純な文字列または複雑なデータにすることも可能です。カウンタとは異なり、ステータスオブジェクト名には特別な要件はありません。
一般的なステータス値
- 不明
- OK
- 警告
- エラー
複雑なステータスオブジェクト
"Disk C:" : {
"value" : "ok",
"message" : "Working fine",
"retain" : 5,
"critical": true,
"data" : {
"type" : "SDD",
"upTimeSec" : 123431
}
}
ステータスオブジェクトには次のようなフィールドを含めることができます:
-
Value - ステータス値は任意の文字列にすることができますが、標準値の1つが使用されている場合は、NetCrunch はアラートの条件に値を使用できるようになります。フィールドは、ステータスオブジェクトを認識するために必須です。オブジェクト全体がテキストの文字列として脅かされます。標準値は、OK、エラー、警告、無効、不明です。
-
Name - オブジェクトの名前は必須ではなく、また一意である必要はありません (オプション)
- Message - エラーメッセージなど、状態を技術するメッセージ(オプション)
- Received - ステータスを取得した時刻 (オプション)
- Retain - 新しいステータスが受信されない場合に、ステータスが有効な期間。この時のステータスは不明になります。
- Class - ステータスクラス。指定したステータス履歴がデータベースに保存されます。クラスは、UI がステータスに関連するデータを認識し、適切に表示するのを助けます。
- Data - カスタムデータ。クラスがウェルノウンクラスの1つを指している場合は、クラスのデータ形式に準拠しなければなりません。
結果の提供
全ての結果の関数を連鎖させることができます。
result.counter('Value', 10).counter('Value 2', 20);
result.counter(path,value)
センサーの結果にカウンタ値の追加。
result.counter('% Utilization', 23.5);
result.counter(obj)
単一のオブジェクトのように複数のカウンタの追加。
result.counter( {
"Temperature" : 33,
"Humidity" : 65
});
result.status(name,value[,message])
単純なオブジェクトのステータスの設定。
result.status('Door 1', 'closed' ).status('Door 2', 'opened');
result.status(obj)
複雑なステータスオブジェクトの設定。
result.status('Light 1', {
value : 'ok',
data : {
color: 'red'
switchedOn : "2018-03-11T22:20:59.903Z"
}
result.error(message)
'@parser' ステータスオブジェクトを設定すると、ステータスが危機として記されているため、センサーステータスが変更されます。このように、データが期待通りでない場合に、センサーにエラーを渡すことができます。
result.error('Missing section')
result.warning(message)
センサーの状態を「警告」に変更したい場合に使用できます。
例
我々はあなたがES6 に精通していると想定しています。下位互換性があるJavascript のように、次のように古い構文を使用することができます。
単純
単純な形式の1つは、名前がなく、カンマで区切られた値のシリーズです。
テストデータ
10.2, 30, 100
スクリプト
data.split(',').forEach((value,ix) => result.counter(`Value ${ix}`, value));
XML/HTML データの解析
ネイティブJavascript はXML パーサーを提供していないので、XML パーサーを追加しました。XPath とCSS セレクタを使用して、要素や属性を選択できます。
単純な XML ドキュメント
NetCrunch にはDOM パーサーが含まれています。DOMParser コンストラクタまたはDOM クラスを使用して、低いレベル(インターネットでxmldom.js をご参照ください)で使用できます。
DOM
doc.nodes(xpath)
指定のXPath に一致した全ての要素を返します。
例
<doc>
<value name="Temp">10.2</value>
<value name="Fan Speed">100.2</value>
</doc>
スクリプト
const doc = new DOM(data);
doc
.nodes('//value')
.map(e => ([e.getAttribute('name'), e.firstChild.data ])
.forEach(([name,value]) => result.counter(name, value));
上記のスクリプトは、適切な名前を持つ全ての値をカウンタとして返します。
doc.selectByXPath(path)
パスと一致する要素の値を返します。
doc.valueByXPath(path)
returns single (first) value regardless of number matching elements; 要素に一致した数にかかわらず、単一(最初)の値を返します;
valueByCSS(path)
CSS セレクタをXPath に変換し、valueByXPath を呼び出して単一の値を取得します。「|」パイプの後に属性名を追加し、属性値を選択します。 例:
val[name='Temperature'] | value
次の要素から値を選択することができます。
<val name="Temperature" value="23.5"></val>
cssToXPath(selector)
この関数は、CSS セレクタをXPath に変換します。パイプ区切り文字の後に属性名を追加して、属性値を選択することができます。
例:
val[device='Fan'] | rpm
DOM パーサーは、XML に準拠していなくても、HTML ドキュメントの解析に使用できます。
データ
<doc>
<value1>13.10</value1>
<value2>345</value2>
</doc>
スクリプト
const doc = new DOM(data);
result
.counter('Values/Value 1', doc.valueByXPath('//value1'))
.counter('Values/Value 2', doc.valueByXPath('//value2'));
CSS セレクタ
doc.selectByCSSを使用して使い慣れたCSS セレクタを使用することもできます。
doc.selectByCSS('value1')
JSON データの解析
Javascript は、パーサーが組み込まれており、ネイティブのJavascript オブジェクトに変換されます。 スクリプトでは、オブジェクトの属性にアクセスする2つの方法があります。
selectProperty(obj,path)
ドットのパスでプロパティを選択します。
selectByJSONPath(obj,path)
JSONPath によって適切な要素を選択します。
例
API サービスが提供するデータと非常によく似たデータを解析しようとします。
データ
{
"main" : {
"Temperature" : 22,
"Humidity" : 66
}
}
スクリプト
const doc = JSON.parse(data);
result
.counter('Temperature', selectProperty(doc, 'main.Temperature'))
.counter('Humidity', selectByJSONPath(doc, '$..Humidity'));