フィルタリング/サンプリング

フィルターとは

intdash Edge Agent 2では、intdash Edge Agent 2内を流れるデータポイントに対して、フィルターを適用することができます。 フィルターを使用すると、以下のことができます。

  • アップストリーム方向の場合: デバイスコネクターから取得したデータポイントのうち、指定された条件に一致するデータポイントを選び出し、指定されたアップストリーム、または、遅延アップロードの処理に渡す。

  • ダウンストリーム方向の場合: サーバーから取得したデータポイントのうち、指定された条件に一致するデータポイントを選び出し、指定されたデバイスコネクターに渡す。

さまざまな条件を指定するために、条件の指定方法が異なるいくつかのフィルタータイプが用意されています。 例えば、nameタイプのフィルターでは、条件としてデータ名称を指定します。この場合、流れてきたデータポイントのデータ名称が指定されたものと一致すると、フィルターの定義に従って処理されることになります。

使用できるフィルターのタイプは以下のとおりです。条件の設定方法については各フィルタータイプの説明を参照してください。:

注釈

フィルターは、上記のタイプのみを使用できます。ユーザーが独自のフィルタータイプを開発することはできません。 既存のフィルタータイプでは不足がある場合は、同様の仕組みをデバイスコネクターにおいて開発することで対応できます。

複数のフィルターを設定して多段階の条件を設定することもできます。複数のフィルターを設定した場合、設定ファイルに書かれた順にフィルターが適用されます。

また、一定時間ごとに最初の1つのデータポイントを選択するフィルター(samplingタイプのフィルター)を設定することで、サンプリングを実行することができます。

注釈

ここで説明するフィルターは、intdash Edge Agent 2内を流れるデータに対して適用されるものです。 サーバーからダウンストリームする対象を指定するための「ダウンストリームフィルター」とは別の機能です。 ダウンストリームフィルターについては、 ダウンストリーム を参照してください。

../_images/config-upstream-filter.svg

図 15 フィルター(アップストリームの場合)

../_images/config-downstream-filter.svg

図 16 フィルター(ダウンストリームの場合)

フィルターを設定する

フィルターを作成するには以下のコマンドを実行します。

アップストリーム方向:

$ intdash-agentctl config filter upstream --create <config_in_yaml_format>

ダウンストリーム方向:

$ intdash-agentctl config filter downstream --create <config_in_yaml_format>

例:

$ intdash-agentctl config filter upstream --create '
    id: string_to_deferred
    enabled: true
    type: type
    target:
      dest_ids:
      - recoverable
      type: string
    change_to:
      dest_id: deferred
  '

作成済みのフィルターの設定を変更するには、IDと、変更したい設定を与えます。

$ intdash-agentctl config filter upstream --modify <id> <config_in_yaml_format>
$ intdash-agentctl config filter downstream --modify <id> <config_in_yaml_format>

キー

説明

id

string

フィルター設定を識別する任意のID

enabled

bool

フィルターの有効(true)/無効(false)

type

string

フィルターのタイプ

target

object

フィルターのタイプに応じた対象データポイントの条件指定。条件の指定方法については、フィルターの種類別の説明を参照してください。

データポイントがここで記載された条件に一致した場合、データポイントに change_to で指定された変更が行われます。

change_to

object

フィルターの条件に合致したデータポイントは、ここに指定された変更が行われます。

フィルターのタイプ

フィルターのタイプと、それぞれで指定できる条件は以下のとおりです。

always

alwaysタイプのフィルターでは、データポイントの行先を条件にしてフィルタリングが行われます。 データポイントの行先が target.dest_ids で列挙された行先のいずれかである場合、その行先は change_to で指定されたものに変更されます。

条件指定( target )では以下を指定します。

キー

説明

dest_ids

[string]

アップストリームの場合、行先ストリームのIDのリスト。

ダウンストリームの場合、行先デバイスコネクターIPCのIDのリスト。

change_to では、以下のように新しい行先を指定します。

キー

説明

dest_id

string

アップストリームの場合、行先ストリームのID。

ダウンストリームの場合、行先デバイスコネクターIPCのID。

例:

id: example
enabled: true
type: always
target:
  dest_ids:
    - recoverable
change_to:
  dest_id: deferred

この例では、行先が recoverable であるデータポイントすべてについて、行先が deferred に変更されます。

type

typeタイプのフィルターでは、データポイントの行先とデータ型を条件にしてフィルタリングが行われます。 データポイントの行先が target.dest_ids で列挙された行先のいずれかであり、データ型が target.type で指定されたものである場合、その行先は change_to で指定されたものに変更されます。

条件指定( target )では以下を指定します。

キー

説明

dest_ids

[string]

アップストリームの場合、行先ストリームのIDのリスト。

ダウンストリームの場合、行先デバイスコネクターIPCのIDのリスト。

type

string

iSCP v2のデータ型名によるフィルター条件(正規表現)

change_to では、以下のように新しい行先を指定します。

キー

説明

dest_id

string

アップストリームの場合、行先ストリームのID。

ダウンストリームの場合、行先デバイスコネクターIPCのID。

例:

id: example
enabled: true
type: type
target:
  dest_ids:
    - recoverable
  type: h26.+
change_to:
  dest_id: deferred

この例では、行先が recoverable であるデータポイントのうち、データ型が h26.+ の正規表現にマッチするものについて、行先が deferred に変更されます。

name

nameタイプのフィルターでは、データポイントの行先とデータ名称を条件にしてフィルタリングが行われます。 データポイントの行先が target.dest_ids で列挙された行先のいずれかであり、データ名称が target.name で指定されたものである場合、その行先は change_to で指定されたものに変更されます。

条件指定( target )では以下を指定します。

キー

説明

dest_ids

[string]

アップストリームの場合、行先ストリームのIDのリスト。

ダウンストリームの場合、行先デバイスコネクターIPCのIDのリスト。

name

string

データ名称によるフィルター条件(正規表現)

change_to で行先を変更できます。

キー

説明

dest_id

string

アップストリームの場合、行先ストリームのID。

ダウンストリームの場合、行先デバイスコネクターIPCのID。

例:

id: example
enabled: true
type: name
target:
  dest_ids:
    - recoverable
  name: v1/.+
change_to:
  dest_id: deferred

この例では、行先が recoverable であるデータポイントのうち、データ名称が v1/.+ の正規表現にマッチするものについて、行先が deferred に変更されます。

src-id

src-idタイプのフィルターでは、データポイントの行先と生成元(アップストリームではデバイスコネクターIPC、ダウンストリームではストリーム)のIDを条件にしてフィルタリングが行われます。 データポイントの行先が target.dest_ids で列挙された行先のいずれかであり、生成元が target.src_id で指定されたものである場合、その行先は change_to で指定されたものに変更されます。

条件指定( target )では以下を指定します。

キー

説明

dest_ids

[string]

アップストリームの場合、行先ストリームのIDのリスト。

ダウンストリームの場合、行先デバイスコネクターIPCのIDのリスト。

src_id

string

アップストリームの場合、生成元デバイスコネクターIPCのID(正規表現)。

ダウンストリームの場合、生成元ストリームのID(正規表現)。

change_to では、以下のように新しい行先を指定します。

キー

説明

dest_id

string

アップストリームの場合、行先ストリームのID。

ダウンストリームの場合、行先デバイスコネクターIPCのID。

例:

id: example
enabled: true
type: src-id
target:
  dest_ids:
    - recoverable
  src_id: dc?
change_to:
  dest_id: deferred

この例では、行先が recoverable であるデータポイントのうち、生成元のIDが dc? の正規表現にマッチするものについて、行先が deferred に変更されます。

rename

データポイントの行先が target.dest_ids で列挙された行先のいずれかであり、データ型、データ名称、生成元のID(アップストリームではデバイスコネクターIPCのID、ダウンストリームではストリームのID)が条件に一致した場合、そのデータポイントのデータ名称がリネームされます。

正規表現を空文字にした項目は、条件に一致するかどうかの評価対象にはなりません。 例えば、 target.typetarget.name を指定し、 target.src_id (生成元ID)を空文字にした場合、 target.typetarget.name がマッチすれば、生成元IDに関係なくリネームが行われます。

条件指定( target )では以下を指定します。

キー

説明

dest_ids

[string]

(オプショナル) アップストリームの場合、行先ストリームのIDのリスト。 ダウンストリームの場合、行先デバイスコネクターIPCのIDのリスト。

type

string

iSCP v2のデータ型名によるフィルター条件(正規表現)

name

string

データ名称によるフィルター条件(正規表現)

src_id

string

生成元IDによるフィルター条件(正規表現)

change_to では、以下のように新しい行先とデータ名称を指定します。

キー

説明

dest_id

string

アップストリームの場合、行先ストリームのID。

ダウンストリームの場合、行先デバイスコネクターIPCのID。

name

string

新しいデータ名称

例:

id: example
enabled: true
type: rename
target:
  dest_ids:
    - recoverable
    - deferred
  name: "v1/2/.+"
  type: ""
  src_id: ""
change_to:
  name: "v1/10/aaa"

この例では、行先が recoverable または deferred であるデータポイントのうち、データ名称が v1/2/.+ の正規表現にマッチするものについて、データ名称が v1/10/aaa に変更されます。行先は変更されません。

sampling

samplingタイプのフィルターでは、データポイントのサンプリングが行われます。

samplingタイプのフィルターでは、行先、データ型、データ名称、生成元(アップストリームではデバイスコネクターIPC、ダウンストリームではストリーム)のIDを条件として設定します。

指定された行先( target.dest_ids のうちいずれか)を持つデータポイントのうち、指定された正規表現すべてにマッチしたデータポイントがサンプリングの対象となります。サンプリング対象のうち、サンプリング間隔 interval_ms 内で最初の1つのデータポイントのみ、行先が change_to.dest_id の値に変更されます。サンプリング間隔内で2つ目以降のデータポイントの行先は変更されません。

../_images/sampling-filter.ja.svg

図 17 サンプリング

キー

説明

dest_ids

[string]

アップストリームの場合、行先ストリームのIDのリスト。

ダウンストリームの場合、行先デバイスコネクターIPCのIDのリスト。

interval_ms

integer

サンプリング間隔(ミリ秒)

type

string

iSCP v2のデータ型名によるフィルター条件(正規表現)

name

string

データ名称によるフィルター条件(正規表現)

src_id

string

生成元IDによるフィルター条件(正規表現)

change_to では、以下のように新しい行先を指定します。

キー

説明

dest_id

string

アップストリームの場合、行先ストリームのID。

ダウンストリームの場合、行先デバイスコネクターIPCのID。

例:

id: example
enabled: true
type: sampling
target:
  dest_ids:
    - recoverable
  name: "v1/1/abc"
  type: ""
  src_id: ""
  interval_ms: 300
change_to:
  dest_id: deferred

この例では、行先が recoverable であり、かつデータ名称が正規表現 v1/1/abc にマッチするデータポイントのうち、300ミリ秒に1つだけ、行先が deferred に変更されます。 それ以外のデータポイントの行先は変更されません。

h264-essential-nal-units

h264-essential-nal-unitsタイプのフィルターは、h264_nal_unit型専用です。

h264-essential-nal-unitsタイプのフィルターでは、データポイントの行先と、ペイロードの内容によってフィルタリングが行われます。 データポイントの行先が target.dest_ids で列挙された行先のいずれかであり、ペイロードがH.264動画の再生において重要なNALユニット(SPS、PPSまたはIDRピクチャー)である場合、行先が変更されます。

条件指定( target )では以下を指定します。

キー

説明

dest_ids

[string]

アップストリームの場合、行先ストリームのIDのリスト。

ダウンストリームの場合、行先デバイスコネクターIPCのIDのリスト。

change_to では、以下のように新しい行先を指定します。

キー

説明

dest_id

string

アップストリームの場合、行先ストリームのID。

ダウンストリームの場合、行先デバイスコネクターIPCのID。

注釈

H.264動画を送信する際に、適切に設定されたストリームとこのフィルターを組み合わせることで、Visual M2M Data Visualizerにおいてより少ない遅延でH.264動画を再生できます。 H.264動画をNALUごとに送信する の使用例を参照してください。

例:

id: example
enabled: true
type: h264-essential-nal-units
target:
  dest_ids:
    - h264_nal_unit_extra_units
change_to:
  dest_id: h264_nal_unit_key_units

この例では、行先が h264_nal_unit_extra_units であるデータポイントのうち、再生表示に必須のNALユニットの行先が h264_nal_unit_key_units に変更されます。