PDF

データパーサー

データパーサーは、外部データを変換して解析し、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 で選択できます。
XPath Data Parser

JSONPath

JSONPath は、XPath に近く、同様の機能を備えています。単純なパスの場合、単純なドットのパスを使用できます。

{
  "main" : {
      "temperature" : 10.2,
      "humidity" : 66
  }
}    

これは簡単な例ですが、公共の天気API の1つで提供されている実際のデータを非常によく似ています。

  • 単純な main.temperature温度を選択できます。
  • 湿度については、JSONPath $..humidity を使用できます。
JSONPAth Data Parser

データパーサースクリプト(Javascript)

Javascript は、正規表現と最新のEXMAScript 言語標準を実装するJavascript エンジン(V8)の全機能を使用できるので、データを解析するのに適したソリューションです。

スクリプトはStrict モードで、別々のSandbox のNodeJS エンジンで実行され、制限時間を超えた場合は強制終了されます。 通常のランタイム(外部モジュールを読み込むことはできません)に加え、JSON、XML、HTMLデータ形式を解析するために最も望ましいユーティリティを提供しました。

テストコンソール

データパーサーエディターは、実際にNetCrunch のスクリプトエンジンでスクリプトを実行することにより、スクリプトをテストできる小さな開発環境です。テストデータを提供することができ、コンソールオブジェクトを使用してテストコンソールにログメッセージを記録することができます。

スクリプトパラメータと結果

スクリプトには2つのパラメータがあります:

  • data - 入力データを含みます。ソースから期待するデータタイプに依存いたします。
  • result - カウンタとステータスオブジェクトの一覧の提供するスクリプト結果オブジェクト

カウンタ

カウンタメトリックは、NetCrunch が観測した数値を表します。これは、NetCrunch の基本的な構成単位の1つです。 カウンタパスは次のように記述されます:

  • Object - 空欄のままにしておくと、センサーの識別がオブジェクトとして使用されます。測定対象を説明しています。プログラムの期間では、測定対象のクラスを記述します。例えば、ProcessDisk など。
  • 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));

Simple Script

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'));
XML Parsing

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'));
JSON Script

datadomhtmljsonpathparserparsingxmlxpath