構文解析式
構文解析式のタスクは、指定のテキストに名前付きの値(キーと値のペア)の一覧を提供します。それらのフィールドは、メッセージのフィルタリングを可能にし、カウンタやステータスオブジェクトとしても扱うことができます。 各式は、式によって返される変数の一覧の宣言が必要です。
カンマ区切りの値
解析する単純な形式です。変数名は各列を表し、デフォルトの区切り文字はカンマです。
キーと値のペア
この形式は、1つの追加の区切り文字で区切られたキーと値のペアとして、データがエンコードされている場合に便利です。 例:
from:John;val:10
この場合、 ペアの区切り文字 は ; 、値の区切り文字は : です。
もう1つの例は、 ini エンコーティングです。
speed=10
acceleration=0
この場合、 ペアの区切り文字 は \n 、値の区切り文字は = です。
正規表現
正規表現は、パターンの一致に非常に役立ちます。NetCrunch は、正規表現のJavascript の実装を使用し、一致するグループの順序で変数を見つけます。
例 - Log4J log 形式
一般的なLog4J 形式の正規表現のパターンを作成しました。
(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2},\d{3}) \[(.*?)\] ([^ ]*) +([^ ]*) - (.*)$
次の変数(フィールド)を割り当てました。
- Date
- Time
- Thread
- Severity
- Module
- Message
Apache Common Log 形式
Common Log 形式を使用して、Apache ログを単純に解読することができます。必要なのは、指定のログの構成に使用される形式を提供することだけです。
XPath/DOM セレクタ
NetCrunch は、XML からデータの取得するためにXML パスをサポートしています。単一の値を返すパスのみがサポートされています。
例
<doc>
<amount>10.2</amount>
<user name="John" id="123"/>
</doc>
以下のパスを使用して、全ての変数を抽出できます。
/doc/amount//user/@name//user/@id
条件のセレクタ
別の属性を使用してノードの要素を選択することにより、要素の属性を選択することができます。この例では、ID で要素を選択して、ユーザーの名前を取得できます。
//doc/user[@id='123']/@name
DOM セレクタ
XPath 式はDOM セレクタ(別名CSS セレクタ)もサポートしています。ノードの値の選択に使用できます。 ただし、属性値が必要な場合、標準のCSS セレクタで指定する方法はありません。 そのため、我々は「|」パイプ文字の後に属性名を追加できるよう、構文を拡張しました。
次のパスは、上記のXPath と同じ結果を生成します。
doc > amountuser|nameuser|id
JSON Path
NetCrunch は、JSON データからデータを取得するためのJSON Path をサポートしています。単一の値を返すパスのみがサポートされます。
例
{
"doc" : {
"amount": 22,
"user" : {
"name" : "John",
"age" : 100
}
}
以下のパスを使用して、全ての変数を抽出できます。
$.doc.amount$..user.name$..user.id
Javascript
Javascript は、正規表現と精神の言語標準を実装するJavascript エンジン(V8)の全機能をを自由に使用できるため、データをクラックする究極のソリューションのように見えます。 スクリプトは、Strict モードで、別々でサンドボックスの NodeJS エンジンで実行し、制限時間を超えた場合は強制終了されます。
入力
スクリプト入力は text 変数にあります。
出力
スクリプトの結果として、NetCrunch は'result' 変数が宣言された変数(フィールド)と一致するプロパティを持つオブジェクトであることを期待しています。
例
JSON を含むメールを受け取っているとしましょう。Javascript を使用して必要なデータを抽出するのは非常に簡単です。
テストテキスト
{
"probe_1" : {
"temp" : 10
}
}
変数
- temperature
スクリプト
const data = JSON.parse(text);
result = {
temperature : data.probe_1.temp
}