アップストリームによる送信

intdashサーバーにリアルタイムに時系列データを送信する経路(ストリーム)をアップストリームと呼びます。 アップストリームによる送信を行うには以下の準備が必要です。 本章ではこれらについて説明します。 接続先サーバーと認証情報 は設定済みとします。

  • アップストリームの設定を作成する

  • デバイスコネクターIPCの設定を作成する

  • (必要な場合のみ)フィルターを設定する(フィルターを使用すると、条件に一致したデータポイントの行先のアップストリームを変更することができます)

../_images/config-upstream.svg

図 8 リアルタイムデータをサーバーに送信する

以上の設定を行ったうえで intdash-agentctl run コマンドを実行すると、ストリーマーが起動され、サーバーへのリアルタイム送信が開始されます。 ストリーマーの起動から終了までの一連の時系列データが1つの計測となります。

送信中に通信が切断された場合や帯域が不十分だった場合、送信できなかったデータはローカルストレージに蓄積され、通信が回復したときにREST APIで送信されます。これを遅延アップロードと呼びます。

アップストリーム

intdash Edge Agent 2では、設定の異なる複数のアップストリームを設定し、同時に使用することができます。 センサーデバイスからデバイスコネクターを使って取得されたデータは、指定されたアップストリームを使ってサーバーに送信されます。

各アップストリームについては、通信が切断された場合に遅延アップロードをするか、信頼性のある接続を使用するか、サーバーでのデータ永続化するか、などの設定が可能です。

アップストリームの設定はIDにより管理されます。 デバイスコネクターIPC設定やフィルター設定において、行先のストリームを指定する際には、このIDで指定します。

アップストリームを作成するには以下のコマンドを実行します。

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

例:

$ intdash-agentctl config upstream --create '
    id: recoverable
    enabled: true
    recover: true
    persist: true
    qos: unreliable
    flush_policy: interval
    flush_interval: 5
  '

作成済みのアップストリームの設定を変更するには、IDと、変更したい設定を与えます。

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

設定できるパラメーターについては、以下を参照してください。

キー

説明

id

string

アップストリームを識別するための文字列。 deferred は予約されているため使用できません。

enabled

bool

アップストリームの有効(true)/無効(false)

recover

bool

送信ができなかった場合の遅延アップロードの有効(true)/無効(false)。 true にすると、リアルタイム送信できなかった場合に、遅延アップロードが行われます。 ただし、 persistfalse の場合、遅延アップロードは行われません。

persist

bool

サーバーでのデータ永続化の有効(true)/無効(false)

qos

string

partial: iSCPのQoSとしてPARTIALを指定します。

unreliable: iSCPのQoSとしてUNRELIABLEを指定します。

flush_policy

string

interval - リアルタイム送信を一定周期でフラッシュします。

immediately - リアルタイム送信をデータポイントごとにフラッシュします。

flush_interval

string

リアルタイム送信をフラッシュする間隔(ミリ秒)。flush_policyがintervalの場合のみ使用されます。

注釈

アップストリーム設定の一覧表示、削除などのコマンドについては、 intdash-agentctl config upstream/downstream を参照してください。

デバイスコネクターIPC

intdash Edge Agent 2では、複数のデバイスコネクターを設定し、同時に使用することができます。 センサーデバイスからデバイスコネクターを使って取得されたデータは、指定されたアップストリームを使ってサーバーに送信されます。

デバイスコネクターからintdash Edge Agent 2にデータを渡すための設定は、デバイスコネクターIPC設定で行います。

デバイスコネクターIPC設定では、intdash Edge Agent 2との通信に使用するFIFOのパス、データの行先のアップストリーム、データ名称などを設定します。 デバイスコネクターIPC設定はIDにより管理されます。

アップストリーム用のデバイスコネクターIPC設定を作成するには以下のコマンドを実行します。

$ intdash-agentctl config device-connector upstream  --create <config_in_yaml_format>

例:

$ intdash-agentctl config device-connector upstream --create '
    id: up
    data_name_prefix: v1/1/
    dest_ids:
      - recoverable
    format: iscp-v2-compat
    ipc:
      type: fifo
      path: /var/run/intdash/uplink-hello1.fifo
    launch:
      cmd: device-connector-intdash
      args:
      - --config
      - /home/agent-volume-a/dc-hello-world-1.yaml
  '

作成済みのデバイスコネクターIPC設定を変更するには、IDと、変更したい設定を与えます。

$ intdash-agentctl config device-connector upstream --modify <id> <config_in_yaml_format>

config_in_yaml_format で設定できるパラメーターは以下のとおりです。

キー

説明

id

string

デバイスコネクターIPC設定の識別子

enabled

bool

デバイスコネクターIPC設定の有効(true)/無効(false)

data_name_prefix

string

iSCPのデータ名称のプレフィックスとして使用する文字列。 受信側でiSCP v1を使用する場合は、決められたルールに沿って data_name_prefix を与える必要があります。詳細は データID を参照してください。

dest_ids

[string]

データは、ここで指定したIDのアップストリームを使ってサーバーに送られます。複数のIDを指定した場合、データポイントは複製され、それぞれのアップストリームからサーバーに送られます。 ただし、フィルターを設定すると、行先のアップストリームを変更することができます。 フィルター(必要な場合のみ) を参照してください。

format

string

デバイスコネクターとの通信に使用されるデータフォーマット

iscp-v2-compat : iSCPv2と同等のFIFOデータフォーマット

logger-msg : 旧intdash Edge AgentのFIFOデータフォーマット

ipc.type

string

intdash Edge Agent 2とデバイスコネクターのデータ通信方法(現在 fifo のみに対応しているため、 fifo を指定してください。)

ipc.path

string

intdash Edge Agent 2がデバイスコネクターからデータを受信するFIFOのパス

launch.cmd

string

intdash Edge Agent 2が起動したらそれに連動してデバイスコネクターも起動させたい場合は、デバイスコネクターの実行ファイルのパスを指定します。

この設定を使ってデバイスコネクターを起動した場合、intdash Edge Agent 2を終了すると、デバイスコネクターも終了します。

launch.args

[string]

デバイスコネクター起動時の引数。

launch.environment

[string]

デバイスコネクター起動時に追加する環境変数( VARIABLE=VALUE の形式で記載します)

注釈

付属デバイスコネクターdevice-connector-intdashを使用する場合は、以下のようにします。

launch:
  cmd: device-connector-intdash
  args:
  - --config
  - <path-to-pipeline-configuration.yaml>

注釈

デバイスコネクターIPC設定の一覧表示、削除などのコマンドについては、 intdash-agentctl config device-connector を参照してください。

遅延アップロード用の行先(deferred)

persist: true 」かつ「 recover: true 」のアップストリームでは、リアルタイム送信ができなかった場合は遅延アップロードが行われます。しかし、リアルタイム送信を試みることなく最初から遅延アップロードしたい場合は、疑似的な行先ストリームとして deferred を指定します。

deferred は設定のための名称で、実際にはdeferredというストリームがintdash Edge Agent 2とサーバーとの間に作成されるわけではありません。

注釈

deferred というストリームIDは予約されており、ユーザーが作成するストリームにこの名前を付けることはできません。 また、 intdash-agentctl config device-connector upstreamdeferred の設定を変更したり削除したりすることはできません。

遅延アップロードの優先度や、遅延アップロード用のデータに使用するストレージに関しては、 遅延アップロード を参照してください。

フィルター(必要な場合のみ)

どのアップストリームを使ってサーバーにデータを送信するか(行先のアップストリーム)はデバイスコネクターIPC設定で指定しましたが、デバイスコネクターIPCとアップストリームの間にフィルターを挟むことにより、データの行先を他のストリームに変更することができます。

フィルターには条件を設定します。条件に一致するデータだけを別のアップストリームに送ることができます。これにより、一部のデータだけをリアルタイム送信し、その他のデータはリアルタイム送信せずに遅延アップロードするといった設定が可能です。

フィルターの設定方法については、 フィルタリング/サンプリング を参照してください。

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

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

注釈

デバイスコネクターIPC設定やフィルター設定では、存在しないストリームIDを指定することができます。

最終的に、存在しないIDを行先としているデータポイントは破棄されるため、存在しないストリームIDを一時的な行先として使用すると便利な場合があります。 以下の例では、デバイスコネクターIPC設定の dest_ids において、存在しないアップストリーム stream_x を行先として指定しています。そのうえで、フィルタリングの段階で、フィルター条件に一致したデータポイントの行先を変更しています。 フィルタリングの段階を完了してもなお stream_x を行先としているデータポイントは、破棄されます。

../_images/config-upstream-nonexisting-stream.svg

図 10 存在しないアップストリームIDの使用

送信の開始/終了

アップストリームの設定とデバイスコネクターIPCの設定を行ったうえで、 intdash-agentctl run を実行すると、intdashサーバーへの接続が行われます。

この状態で、デバイスコネクターからFIFOにデータポイントを書き込むことで、そのデータポイントは、intdash Edge Agent 2からintdashサーバーに送信されます。

リアルタイムデータの送受信を終了する場合は、 intdash-agentctl run を実行したターミナルでCtrl+Cを押してください。

recover: true 」のアップストリームにおいてデータの欠損が発生した場合や、行先ストリームとして deferred が指定されていた場合は、遅延アップロードが行われます。 リアルタイムデータの送受信を終了しても、intdash-agentdが起動している間は、遅延アップロードが継続されます。

基準時刻について

intdashにおいて、基準時刻とは、計測を開始した時刻を指します。 intdash Edge Agent 2が送信する基準時刻には以下の2つがあります。

  • EdgeRTC による基準時刻

    • intdash Edge Agent 2を実行しているシステムの時計による基準時刻です。計測開始時は必ずEdgeRTCで基準時刻が作成されます。 その後、基準時刻は一定間隔でサーバーに送信されます。

  • NTPによる基準時刻

    • NTPサーバーから取得した時計による基準時刻です。NTPサーバーとの通信ができたらNTP基準時刻が作成されます。 その後、基準時刻は一定間隔でサーバーに送信されます。